使用loopback框架可以很方便的構(gòu)建一套基于nodeJS的api服務(wù)。在完成了 coding 后, 需要部署到服務(wù)器, StrongLoop 公司給出了一套解決方案, 采用StrongLoop Process Manager進(jìn)行進(jìn)程和環(huán)境的管理昧碉。這個(gè)工具有很多功能, 今天只講如何利用它來(lái)部署。
本地調(diào)試
啟動(dòng)pm服務(wù)
啟動(dòng)本地的臨時(shí)pm服務(wù), 這種啟動(dòng)方式不會(huì)自動(dòng)重啟搪锣。
slc pm
打包項(xiàng)目
-
用git的形式打包
這種方式會(huì)在本地建立
deploy
分支, 然后可以將該分支的代碼提交到pm服務(wù)。slc build
-
用tar的形式打包
這種方式會(huì)在上級(jí)目錄中生成一個(gè)以項(xiàng)目名為開頭的tar文件, 然后可以將該文件提交到pm服務(wù)彩掐。
slc build --pack
-
用script的形式打包(推薦)
這種方式會(huì)完整安裝npm組件, 并完整編譯, 以避免部署時(shí)的編譯過(guò)程, 縮短部署時(shí)間构舟。
slc build --install --scripts
幾種方式的不同點(diǎn):
- 打包時(shí)間不同
- git方式的速度最快, 它會(huì)將本地用于production的npm組件一同打包。
- tar方式的速度中等, 它會(huì)將本地的所有npm組件一同打包堵幽。
- script方式的速度最慢, 它會(huì)將本地的所有npm組件編譯后打包狗超。
- 清理插件
- git方式會(huì)執(zhí)行
npm prune
, 會(huì)清理package.json下devDependencies
的所有插件。 - tar方式和script方式不會(huì)清理開發(fā)所有的npm組件朴下。
- git方式會(huì)執(zhí)行
- 部署時(shí)間
- script方式的速度最快, 但是它要求打包和部署在同一種工作平臺(tái), 編譯后可以直接運(yùn)行努咐。
- git方式和tar方式差距不大。
部署項(xiàng)目
默認(rèn)部署項(xiàng)目到本地pm
slc deploy
slc deploy http:// ../appname-appversion.tgz
部署后可能發(fā)現(xiàn)server不能運(yùn)行, 是因?yàn)閟erver在執(zhí)行npm install
和編譯工作, 在這兩項(xiàng)工作完成前是無(wú)法運(yùn)行的殴胧。
具體可以通過(guò)遠(yuǎn)程命令sudo service strong-pm status
中的當(dāng)前線程來(lái)判斷和debug渗稍。
我在項(xiàng)目中就遇到了某個(gè)npm組件在Ubuntu下安裝不成功的問(wèn)題, 卡了很久。
設(shè)置環(huán)境參數(shù)
-
配置環(huán)境參數(shù)
NODE_ENV
slc ctl env-set <service_name> NODE_ENV=production
-
設(shè)置
cluster size
slc ctl set-size <service_name> <number>
啟動(dòng)項(xiàng)目
一般會(huì)打開arc工具, 方便得進(jìn)行可視化管理溃肪。
git項(xiàng)目:https://github.com/strongloop/strong-arc
- 運(yùn)行arc服務(wù)
slc arc
- 打開GUI界面
http://localhost:{自動(dòng)生成的端口號(hào)}/#/process-manager
- 在自動(dòng)打開的管理頁(yè)面上選擇
Process Manager
選項(xiàng) - 在
Hosts
處和Port
處填入應(yīng)對(duì)的參數(shù)免胃。 - 點(diǎn)擊
App Status
處的鏈接按鈕, 連接arc工具到對(duì)應(yīng)的pm服務(wù)上, 就可以看到當(dāng)前server的情況和操作方法了。
使用slc來(lái)管理項(xiàng)目
-
啟動(dòng)
slc ctl start <server_name>
-
關(guān)閉
slc ctl stop <service_name>
-
查看log
slc ctl log-dump <service_name> --follow
-
遠(yuǎn)程命令
slc ctl -C http://remote_dir:port/ <cmd>
遠(yuǎn)程部署
安裝, 運(yùn)行pm服務(wù)
不同平臺(tái)下安裝pm服務(wù)的方法不同, 具體安裝方法參考下面的文檔惫撰。
Setting up a production host - Documentation
本機(jī)遠(yuǎn)程部署
- 使用tar的方式打包, 以避免自動(dòng)清掉開發(fā)使用的npm組件羔沙。
- 部署到遠(yuǎn)程
slc deploy --service=<your-service-name> http://your-pm-instance:port
這種方法會(huì)將無(wú)用的開發(fā)npm組件也部署到項(xiàng)目上, 比較浪費(fèi)時(shí)間和資源。
遠(yuǎn)程登錄后的部署方案(推薦)
- 在本機(jī)上遠(yuǎn)程登錄服務(wù)器厨钻。
- 使用
git pull
獲取最新的代碼扼雏。 - 在遠(yuǎn)程使用script打包。
- 部署到對(duì)應(yīng)的服務(wù)器夯膀。
在開發(fā)服務(wù)器上打包, 保證了和生產(chǎn)環(huán)境使用相同的工作平臺(tái), 可以使用script打包, 實(shí)現(xiàn)快速部署诗充。普通的部署方式會(huì)執(zhí)行一個(gè)較長(zhǎng)編譯過(guò)程, 部署期間服務(wù)是不可訪問(wèn)的, 所以這種方法有效的縮短了不可訪問(wèn)時(shí)間。