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