Node服务一键离线部署
背景說明
項目測試通過,到了上線部署階段。部署的機器安全限制比較嚴格,不允許訪問外網。此外,沒有對外網開放ssh服務,無法通過ssh遠程操作。
針對上面提到的兩條限制條件,通過下面方式解決:
- 無法訪問外部網絡:將依賴的環境本地下載,打包上傳,離線安裝;
- 無法ssh遠程操作:將安裝/初始化步驟腳本化,安裝包交給運維人員,一鍵部署;
安裝包說明
讓運維同學將安裝包置于/data/my_install下。安裝包大致如容如下。其中install_scripts目錄中,存放的是部署相關的腳本。
[root@localhost my_install]# tree -L 1 . ├── control # 各種服務控制腳本 ├── install_scripts # 安裝腳本 ├── node-v5.11.1-linux-x64 # node二進制包 ├── npm_modules_global_offline # 全局的npm模塊,比如 pm2 ├── express_svr # express應用 └── uninstall_scripts # 卸載腳本部署腳本說明
[root@localhost install_scripts]# tree -L 1 . ├── install_node.sh # 安裝nodejs ├── install_npm_moduels.sh # 安裝npm模塊 ├── install_run_service.sh # 啟動服務 ├── install_express_svr.sh # 部署express應用 └── install.sh # 部署總入口Node安裝
看下nodejs安裝腳本。為了安裝快些,這里我們采用的是編譯好的二進制文件。只需要將相關文件拷貝到指定路徑即可。
Node安裝包說明
以下是nodejs@v5.11.1的目錄。
[root@localhost node-v5.11.1-linux-x64]# tree -L 2 . ├── bin │ ├── node # node可執行文件 │ └── npm -> ../lib/node_modules/npm/bin/npm-cli.js # npm可執行文件,其實是個軟鏈接 ├── CHANGELOG.md ├── include # 各種包含文件 │ └── node ├── lib │ └── node_modules # npm模塊安裝目錄 ├── LICENSE ├── README.md └── share├── doc├── man # 說明文件└── systemtap拷貝路徑說明如下
| ./bin/node | /usr/local/bin/node | node可執行文件 |
| ./bin/npm | /usr/local/bin/node | npm可執行文件,軟鏈接,指向 /usr/local/lib/node_modules/npm/bin/npm-cli.js |
| ./lib/node_modules/ | /usr/local/lib/ | npm模塊安裝目錄 |
| ./include/node | /usr/local/include/ | 各種包含文件 |
| ./share/man/man1/node.1 | /usr/local/man/man1/ | 使用說明 |
安裝腳本
install_node.sh
[root@localhost install_scripts]# cat install_node.sh #!/bin/bash # 安裝nodejscd /data/my_install/ cd node-v5.11.1-linux-x64/cp -r ./lib/node_modules/ /usr/local/lib/ # copy the node modules folder to the /lib/ folder cp -r ./include/node /usr/local/include/ # copy the /include/node folder to /usr/local/include folder mkdir -p /usr/local/man/man1 # create the man folder cp ./share/man/man1/node.1 /usr/local/man/man1/ # copy the man file cp ./bin/node /usr/local/bin/ # copy node to the bin folder ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm ## making the symbolic link to npm全局npm模塊安裝
這里我們就用到了pm2,需要全局安裝。根據npm全局模塊的安裝方式,需要分兩步
- 將pm2模塊目錄拷貝到/usr/local/lib/node_modules下。
- 在/usr/local/bin/下,建立軟鏈接,指向/usr/local/lib/node_modules/pm2/bin/下的可執行文件。
pm2安裝說明
首先,把pm2包下載下來,這步略。我在這里放到了npm_modules_global_offline目錄下,以防以后還有其他全部模塊要一起安裝。
軟鏈接映射關系如下
| /usr/local/bin/pm2 | /usr/local/lib/node_modules/pm2/bin/pm2 |
| /usr/local/bin/pm2-dev | /usr/local/lib/node_modules/pm2/bin/pm2-dev |
安裝腳本
install_npm_moduels.sh
#!/bin/bash # 安裝全局npm模塊cd /data/my_install/ cd npm_modules_global_offline/cp -rf ./node_modules/* /usr/local/lib/node_modules/ ln -s /usr/local/lib/node_modules/pm2/bin/pm2 /usr/local/bin/pm2 ln -s /usr/local/lib/node_modules/pm2/bin/pm2-dev /usr/local/bin/pm2-devExpress應用安裝
express應用的安裝相對比較簡單,本地npm install后,連同node_modules目錄一起打包即可。
腳本如下,把express_svr拷貝到指定路徑即可。
install_express_svr.sh
#!/bin/bash # 安裝express應用cd /data/my_install/if [ ! -d "/data/web/express_svr" ]; thenmkdir /data/web/express_svr ficp -rf ./express_svr/* /data/express_svr/一鍵部署腳本
簡易版本
其實沒那么玄乎,無非就是再寫個腳本,統一調用下前面提到的腳本。奏是這么簡單。
install.sh:
./install_node.sh ./install_npm_moduels.sh ./install_otc_svr.sh ./install_run_service.sh運行:
./install.sh進一步完善
上面腳本的缺陷比較明顯,沒有進度提示,也沒有運行狀態提示。于是優化一下,雖然也不能算是完善,但相比之前的版本的確會好很多。
#!/bin/bashcommands=( ./install_node.sh "install nodejs" ./install_npm_moduels.sh "install npm modules" ./install_express_svr.sh "install express application" ./install_run_service.sh "start services" )commands_len=${#commands[@]}for (( i=0; i<$commands_len; i=i+2 )) dodesc_index=i+1desc=${commands[$desc_index]}echo -e $desc" - starts ..."${commands[$i]}if [ "$?" == "0" ]; thenecho -e $desc" - ok \n"elseecho -e $desc" - failed ! \n"fi done運行看下效果:
install nodejs - starts ... install nodejs - ok install npm modules - starts ... install npm modules - ok install express application - starts ... install express application - ok start services - starts ... # pm2啟動日志,一大坨,這里忽略 start services - ok一鍵卸載腳本
從上面的內容可以看到,離線部署的過程,主要包含了幾個操作
- 文件拷貝
- 建立軟連接
- 啟動服務
那么,卸載無非就是上面幾個步驟的反操作。腳本大致如下,跟前面的部署腳本其實是一一對應的。這里就不再贅述。
[root@localhost uninstall_scripts]# tree -L 1 . ├── uninstall_run_service.sh ├── uninstall_node.sh ├── uninstall_npm_modules.sh ├── uninstall_express_svr.sh └── uninstall.sh寫在后面
文中提及的node服務離線部署,應該已經可以涵蓋大部分的場景,舉一反三即可。當然更富在的場景還有,這里就不再展開。
總結
以上是生活随笔為你收集整理的Node服务一键离线部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 23种设计模式及具体例子 收
- 下一篇: go执行定时任务