###### tags: `Training` # 打包Image 練習筆記 ## 複製Lina 打包VM 略 IP: 10.62.163.133 使用者: centos 使用此憑證E:\FiXo_doc\RD憑證\Key_gitLab (內容隱藏) <!-- -----BEGIN RSA PRIVATE KEY----- MIIEqQIBAAKCAQEA+/vN11A3P47hWPm+vvaJ2NgKRNfT7+KqDCcsa+hN6Pw5zI/i M5oe4XXQJDuVawsPC5uLzqdFVqKxfXJx8KTB5G4Wcg/0cE0varcqVXsDvle+BU92 YJIwTJtKRNuJilQkA//k28GRAxxZzrZTPyympvWoGTpgDOH8mZcWWEK1y6EoP5jf b7JsiTh/Z2FMLVHqnFcWz9nk/QemEx272nYPZg70qP5nImgQnd/b2WPhOvgMqvB3 VZFK+rEg3Ls7hByCZYGdaHIHIPeT6UqDkdnk3vVXhk4vbftTexLXuZuV7URM7HJc boBeXLkSEzC/RqobGJq2nZ8vSjQt/HRDfPstowIDAQABAoIBAQDmXB+k7D9lynA2 0DJSD76bT32rzAeDsRq1+4X/rCK1kQgh+5PWitoaUYMT7Ki/cB+0A+I+7OpVtmw+ e8awMV7UPtQkOHPFyrpDe+mmtcwJUdt0rV1SEbM4BWtTIcROgndedKy7Pe0dA+kS MdpO0boUvlWLorM2c85idx5FV88stHpdwejb/SbWUASj7mNSix/nCo3kxI0QgqQD 7HPx3/n0ey/YH51Dc3aU57l+3+Z8+KlyvwlEOAch5+p178OeStvn5k+TQ9DEIRWG r3jkZhkX9ZPnEy/vEFbq41MP/VvTBCPZXbxK3LKrFT5md7QeoQO2Z5yb4pL1OXNQ mPxbJhZJAoIAgQD96ztOTbt/rpQW29N/j49RKXNvfYlk+ZcCVJ1CcVxGGZvZHLZa LcpCfjn4ysK7TES9hp7GJ7o8qEt2xQggDPvmcQn/+AgJjrGT+V4CiKziYRgObIow TPgMqQSvQsqwnJuWVlu1sz2AMkGcSu+5IGiD2DtBwfC65bCBPUXFicjuPQKCAIEA /gyDCYvwpiy3SlT5/LDFwVFyqYz0DIFAXNId1w62gujppwrz6GJCXaOSQXWOiLaH W1BCWAvK6k1KdSGOYTGmCpJkLPvEeg6j14IkJaX+gqW6MohqTyZpm4U/497ap+DV iCe7E6caFMLc6Jl8sSkpQ5L+7rWhfui02DbkosF/KV8CggCACxG7JyG6X8mTiR+S K8htXgNpld2qJK3AyIg5xtC8Tg4FvkRDKtE+NQHdsxvbu2CKypxYxZirxMMtbwMN 5J/MR3J8Fh2Q9CG1WhcP4xpkNwY2j0JqD8r7MUoY+y71ORfKrJYdL2Gd9725IIAf zTk9dSnzA13aCbvDow6xwPfNu50CggCACLjRPuCpEGt0l363Xm+LOonbT+rg7hT5 6rXkBGAi7/ejHfMIULAe6ywUd17b1+G8X+wveupcuxKQPdk7FCcqNi60db7nDfG2 uk1jhE9gn4elDtsUG0eMVKSMfvxFsYHMkvIaQCB6ir/t6aZrW4G4QvOnAPcHZl4C 53FrBBN0lC0CggCBAJBF7qQUQdnheX5zMew0qmCO14nzCPLyZQn5t2ON1dsxOzNN V+/wZZ+iuhnd12WkYPSVo3lr05Mah4D7X0LT7cjvW1I2XwwElOZgxLVjbube9qmd cwCZn1nh+rmJNfiXf2yGVPwitmi81RtCTwhWYKU6mQNmCKPn0ndUstzDsftG -----END RSA PRIVATE KEY----- --> ## SSH Login後 切換至`cd /docker-files` 資料夾 ### 創建欲打包資料夾 `sudo su` `mkdir docker-mgmt-framework` ### 進新建資料夾下載source code 下載 jade-node-framework 下載 jade-mgmt-framework  git clone http://10.62.163.20/cloud-platform-web/jade-node-framework.git git clone http://10.62.163.20/cloud-platform-web/jade-mgmt-framework.git cd jade-node-framework git checkout develop cd jade-mgmt-framework git checkout develop  複製buildImage.sh, Dockerfile, makeConfig.sh, start_pm2.sh ```javascript= `source buildImage.sh` ``` 執行完buildImage.sh,查詢docker images  ```javascript= docker push 10.62.163.20:5000/fixoweb/dcasentry.framework.mgmt:v4.1.0 ``` ## buildImage.sh ```javascript= #/bin/bash source /etc/profile # ========================= Node ============================== git --git-dir=/docker-files/docker-mgmt-frame/jade-node-order/.git --work-tree=/docker-files/docker-mgmt-frame/jade-node-order/ reset --hard git --git-dir=/docker-files/docker-mgmt-frame/jade-node-order/.git --work-tree=/docker-files/docker-mgmt-frame/jade-node-order/ pull rm -rf /docker-files/docker-mgmt-frame/jade-node-order/server/build rm -rf /docker-files/docker-mgmt-frame/jade-node-order/jade-web # ========================= React ============================== git --git-dir=/docker-files/docker-mgmt-frame/jade-mgmt-framework/.git --work-tree=/docker-files/docker-mgmt-frame/jade-mgmt-framework/ reset --hard git --git-dir=/docker-files/docker-mgmt-frame/jade-mgmt-framework/.git --work-tree=/docker-files/docker-mgmt-frame/jade-mgmt-framework/ pull rm -rf /docker-files/docker-mgmt-frame/jade-mgmt-framework/build # === RUN Config === bash /docker-files/buildNode/config_frame/run_config.sh mf # === Build React === # npm install /docker-files/docker-mgmt-frame/jade-mgmt-framework --prefix /docker-files/docker-mgmt-frame/jade-mgmt-framework npm run build --prefix /docker-files/docker-mgmt-frame/jade-mgmt-framework # === Build Node === cp -R /docker-files/docker-mgmt-frame/jade-mgmt-framework/build/ /docker-files/docker-mgmt-frame/jade-node-order/server/ npm run build --prefix /docker-files/docker-mgmt-frame/jade-node-order/ # === Zip Order === rm -f /docker-files/docker-mgmt-frame/jade-node-order/*.zip cd /docker-files/docker-mgmt-frame/jade-node-order/ && zip -rq jade_order.zip jade-web/ cd /docker-files/docker-mgmt-frame/jade-node-order/ && zip -rq node_modules.zip node_modules/ cd /docker-files/docker-mgmt-frame/ && docker build -t frame.mgmt . --no-cache ``` | Line | 說明 | | -------- | -------- | | 2 | 因為安裝環境問題,需要匯入環境變數| | 5 | 此種模式完全不保留原始 commit 結點的任何資訊,會連同資料夾中實體檔案內容都進行重置,也就是直接將工作區、暫緩區及 git 目錄都重置成目標Reset結點的資料內容。| | 12 |重新拉取jade-mgmt-framework| | 13 |清除jade-mgmt-framework打包的jade-mgmt-framework/build資料夾| | 16 |參考下面run_config.sh說明, mf為帶入參數, 參考line172| | 20 |npm run build 打包jade-mgmt-framework| | 24 |複製已打包jade-mgmt-framework的build資料夾到jade-node-order/server/資料夾| | 25 |打包jade-node-order專案| | 29 |zip node 的 output| | 30 |zip node_modules 的 output| | 32 |打包docker image frame.mgmt,[參考Dockerfile](https://hackmd.io/PoKcwvYgRcGyid3AddXPRQ?both#Dockerfile)| ## run_config.sh ```shell= #!/bin/sh #common portal_session_name=portal.sessionId mgmt_session_name=mgmt.sessionId # portal_framework portal_framework_port=8090 portal_framework_socket=3011 portal_framework_public_path="portal\/" # portal_order portal_order_port=8188 portal_order_socket=3012 portal_order_public_path="portal\/order\/" # mgmt_framework mgmt_framework_port=443 mgmt_framework_socket=3010 mgmt_framework_public_path="mgmt\/" # mgmt_order mgmt_order_port=8088 mgmt_order_socket=3013 mgmt_order_public_path="mgmt\/order\/" build_portal_framework () { /bin/cp -f /docker-files/frame/config.ts /docker-files/docker-portal-frame/jade-node-order/server/config/ sed -i 's/${SERVER_PORT}/'"$portal_framework_port"'/g' /docker-files/docker-portal-frame/jade-node-order/server/config/config.ts sed -i 's/${SOCKET_PORT}/'"$portal_framework_socket"'/g' /docker-files/docker-portal-frame/jade-node-order/server/config/config.ts sed -i 's/${SESSION_NAME}/'"$portal_session_name"'/g' /docker-files/docker-portal-frame/jade-node-order/server/config/config.ts sed -i 's/${PROJECT}/portal/g' /docker-files/docker-portal-frame/jade-node-order/server/config/config.ts sed -i 's/${PUBLIC_URL}/'"$portal_framework_public_path"'/g' /docker-files/docker-portal-frame/jade-node-order/server/config/config.ts /bin/cp -f /docker-files/docker-portal-frame/.env /docker-files/docker-portal-frame/jade-portal-framework/ sed -i 's/${MAIN_PORT}/'"$portal_framework_port"'/g' /docker-files/docker-portal-frame/jade-portal-framework/.env } build_portal_order () { # === Config Node=== /bin/cp -f /docker-files/order/config.ts /docker-files/docker-portal-order/jade-node-order/server/config/ sed -i 's/${SERVER_PORT}/'"$portal_order_port"'/g' /docker-files/docker-portal-order/jade-node-order/server/config/config.ts sed -i 's/${SOCKET_PORT}/'"$portal_order_socket"'/g' /docker-files/docker-portal-order/jade-node-order/server/config/config.ts sed -i 's/${SESSION_NAME}/'"$portal_session_name"'/g' /docker-files/docker-portal-order/jade-node-order/server/config/config.ts sed -i 's/${PROJECT}/portal/g' /docker-files/docker-portal-order/jade-node-order/server/config/config.ts sed -i 's/${PUBLIC_URL}/'"$portal_order_public_path"'/g' /docker-files/docker-portal-order/jade-node-order/server/config/config.ts # === Config React=== /bin/cp -f /docker-files/docker-portal-order/.env /docker-files/docker-portal-order/jade-portal-order sed -i 's/${MAIN_PORT}/'"$portal_order_port"'/g' /docker-files/docker-portal-order/jade-portal-order/.env } build_mgmt_framework () { /bin/cp -f /docker-files/frame/config.ts /docker-files/docker-mgmt-frame/jade-node-order/server/config/ sed -i 's/${SERVER_PORT}/'"$mgmt_framework_port"'/g' /docker-files/docker-mgmt-frame/jade-node-order/server/config/config.ts sed -i 's/${SESSION_NAME}/'"$mgmt_session_name"'/g' /docker-files/docker-mgmt-frame/jade-node-order/server/config/config.ts sed -i 's/${SOCKET_PORT}/3010/g' /docker-files/docker-mgmt-frame/jade-node-order/server/config/config.ts sed -i 's/${PROJECT}/mgmt/g' /docker-files/docker-mgmt-frame/jade-node-order/server/config/config.ts sed -i 's/${PUBLIC_URL}/'"$mgmt_framework_public_path"'/g' /docker-files/docker-mgmt-frame/jade-node-order/server/config/config.ts /bin/cp -f /docker-files/docker-mgmt-frame/.env /docker-files/docker-mgmt-frame/jade-mgmt-framework/ sed -i 's/${MAIN_PORT}/'"$mgmt_framework_port"'/g' /docker-files/docker-mgmt-frame/jade-mgmt-framework/.env } build_mgmt_order () { /bin/cp -f /docker-files/order/config.ts /docker-files/docker-mgmt-order/jade-node-order/server/config/ sed -i 's/${SERVER_PORT}/'"$mgmt_order_port"'/g' /docker-files/docker-mgmt-order/jade-node-order/server/config/config.ts sed -i 's/${SOCKET_PORT}/'"$mgmt_order_socket"'/g' /docker-files/docker-mgmt-order/jade-node-order/server/config/config.ts sed -i 's/${SESSION_NAME}/'"$mgmt_session_name"'/g' /docker-files/docker-mgmt-order/jade-node-order/server/config/config.ts sed -i 's/${PROJECT}/mgmt/g' /docker-files/docker-mgmt-order/jade-node-order/server/config/config.ts sed -i 's/${PUBLIC_URL}/'"$mgmt_order_public_path"'/g' /docker-files/docker-mgmt-order/jade-node-order/server/config/config.ts /bin/cp -f /docker-files/docker-mgmt-order/.env /docker-files/docker-mgmt-order/jade-mgmt-order/ sed -i 's/${MAIN_PORT}/'"$mgmt_order_port"'/g' /docker-files/docker-mgmt-order/jade-mgmt-order/.env } if [ "$1" = "pf" ] then build_portal_framework echo -e "\033[35m config portal framework Complete!! \033[0m" elif [ "$1" = "po" ] then build_portal_order echo -e "\033[35m config portal order Complete!! \033[0m" elif [ "$1" = "mf" ] then build_mgmt_framework echo -e "\033[35m config mgmt framework Complete!! \033[0m" elif [ "$1" = "mo" ] then build_mgmt_order echo -e "\033[35m config mgmt order Complete!! \033[0m" elif [ "$1" = "all" ] then build_portal_framework echo -e "\033[35m config portal framework Complete!! \033[0m" build_portal_order echo -e "\033[35m config portal order Complete!! \033[0m" build_mgmt_framework echo -e "\033[35m config mgmt framework Complete!! \033[0m" build_mgmt_order echo -e "\033[35m config mgmt order Complete!! \033[0m" else echo -e "\033[35m Have wrong params!! \033[0m" fi ``` * 因為node & react關係 node腳色:提供API給React串接,也是提供給react run的js server react腳色:負責UI  1. **Node config 有前後台的差別** (打包前就要設定) 這邊就使出了**替換檔案**大法, * step 1: 把所有會用到的變數整理到 config.ts 這支檔案 * step 2: 複製一支config.ts出來當作要替換的檔案 * step 3: 編輯 **"新config.ts"** * 把要替換的變數用 **${PUBLIC_URL}** 括起來 * 這邊會一起解決 Node env 不同環境的差異,使用環境變數 process.env.XXX * step 4: 每次打包前先把 **"舊config.ts"** 用 **"新config.ts"** 替換掉 * step 5: 寫另一支 script 把 config.ts 中有 **${...}** 的文字替換掉 (其實應該有帶入的方式 但我忘記怎麼寫了就直接用sed替換文字) | Line | 說明 |補充| | -------- | -------- | -------- | | 3 & 5|為了讓主應用與子應用共用session|cookie紀錄的session name | 18 |區分前後台service port|mgmt_framework_port | 19 |目前無使用|mgmt_framework_socket | 20 |config.ts public_url|mgmt_framework_public_path | 55 |參考替換檔案大法|參考/docker-files/frame/config.ts, * 例如 * project 打包 portal order 要填 portal * project 打包 mgmt order要 填 mgmt * publicUrl 打包 portal order 要填 portal/order * publicUrl 打包 mgmt order 要填 mgmt/order # Dockerfile ```dockerfile= FROM jade.node.server:latest MAINTAINER DCaS RUN mkdir /usr/local/nodejs/project/jade-node-order ADD jade-node-order/jade_order.zip /usr/local/nodejs/project/jade-node-order ADD jade-node-order/node_modules.zip /usr/local/nodejs/project/jade-node-order RUN unzip -q /usr/local/nodejs/project/jade-node-order/jade_order.zip -d /usr/local/nodejs/project/jade-node-order RUN unzip -q /usr/local/nodejs/project/jade-node-order/node_modules.zip -d /usr/local/nodejs/project/jade-node-order ADD start_pm2.sh /usr/local/nodejs/project/jade-node-order ADD makeConfig.sh /usr/local/nodejs/project/jade-node-order CMD bash /usr/local/nodejs/project/jade-node-order/start_pm2.sh ``` # makeConfig.sh container啟用時,將環境變數放入 windows.__env 屬性中 ```shell= #!/bin/bash echo "window.__env = { \"REACT_APP_COOKIE_DOMAIN\":\"$COOKIE_DOMAIN\", \"REACT_APP_MAIN_URL\":\"$ROOT_URL\", \"REACT_APP_API_URL\":\"$ROOT_URL\", \"REACT_APP_FIXO_WEB_URL\":\"$FIXO_WEB_URL\", \"REACT_APP_FIBO_URL\":\"http://fibo.dct-cloud.com:7480/swift/v1/cece8dcd33544c20aa5bbfca84412a85-order-system\", \"REACT_APP_ENTRY_ORDER\":\"$REACT_APP_ENTRY_ORDER\" } "> /usr/local/nodejs/project/jade-node-order/jade-web/build/mgmt/config.js ``` # start_pm2.sh container啟用時,進入點 ``` #!/bin/bash if [ -f "/usr/local/nodejs/project/jade-node-order/makeConfig.sh" ]; then /bin/bash /usr/local/nodejs/project/jade-node-order/makeConfig.sh rm -f /usr/local/nodejs/project/jade-node-order/makeConfig.sh fi pm2-runtime start /usr/local/nodejs/project/jade-node-order/jade-web/server.js /bin/bash ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up