This repository has been archived by the owner on Feb 18, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d4aebdf
commit d54bef3
Showing
3 changed files
with
120 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
# 前言 | ||
|
||
當你把程式寫好遠端部署在VPS上,就會碰到一個問題:如何使程式永不中斷的運行?你會發現當你關掉vps的遠端連線後程式就掛了。 | ||
你需要pm2,不要再用forever。 | ||
|
||
# 安裝 pm2 | ||
|
||
安裝pm2 | ||
|
||
``` | ||
$ npm install pm2 -g | ||
``` | ||
|
||
# 永續執行一隻app | ||
|
||
``` | ||
$ pm2 start yourapp.js | ||
``` | ||
|
||
現在即使你關掉了遠端連線他也會持續運轉 | ||
|
||
* option | ||
|
||
如果你想要更新code後會自動restart的話,請使用 | ||
|
||
``` | ||
$ pm2 start yourapp.js --watch | ||
``` | ||
|
||
他會監看該程式底下的所有目錄,如果有更新會立即restart。 | ||
|
||
# 模擬多線程(實驗階段) | ||
|
||
javascript本身是單線程的,如果要多線程必須要寫code,聽起來就很麻煩,幸好pm2可以幫我們解決這個問題。 | ||
|
||
``` | ||
$ pm2 start yourapp.js -i 3 | ||
``` | ||
|
||
這樣就會直接啟動三個yourapp.js。 | ||
|
||
* 注意 | ||
|
||
因為是多線程,請保證你的session改用redis。 | ||
|
||
當然效果跟多開yourapp.js是相似的 | ||
|
||
# 部署 | ||
|
||
厭煩了每次都要遠端連上vps用git作部署?pm2可以給你十分良好的部署體驗。 | ||
|
||
在你的專案根目錄底下新增一個ecosystem.json | ||
|
||
```json | ||
{ | ||
"apps": [ | ||
{ | ||
"name": "scriptname",//pm2裡顯示的服務名稱 | ||
"script": "start.js"//實際要執行的js檔 | ||
} | ||
], | ||
"deploy": { | ||
"production": { | ||
"key": "yousshKey",//ssh key 給pm2遠端連線vps部署用 | ||
"user": "youraccount",//遠端登入的帳號 | ||
"host": "212.83.163.1",//遠端連線的IP | ||
"ref": "origin/master",//使用哪個git branch | ||
"repo": "git@github.com:repo.git",//git網址 | ||
"path": "/var/www/production",//部署目錄 | ||
"post-deploy": "sudo npm install && sudo pm2 startOrRestart ecosystem.json"//遠端需要執行的指令 | ||
} | ||
} | ||
} | ||
``` | ||
|
||
先下setup指令部署目錄 | ||
``` | ||
$ pm2 deploy ecosystem.json production setup | ||
``` | ||
|
||
之後再部署code | ||
|
||
``` | ||
$ pm2 deploy ecosystem.json production | ||
``` | ||
|
||
他就會自動安裝ndoe_module跟運行code,之後如果要更新code只需運行 | ||
|
||
``` | ||
$ pm2 deploy ecosystem.json production | ||
``` | ||
|
||
# 重開機 | ||
|
||
有的時候你需要將server重開,但是你不想要一個一個將pm2的程式start,你可以下以下指令: | ||
|
||
|
||
這會建立pm2的開機程式 | ||
|
||
``` | ||
$ pm2 startup | ||
``` | ||
|
||
這會儲存pm2現在運行了哪些程式,供下次開機執行 | ||
|
||
``` | ||
$ pm2 save | ||
``` | ||
|
||
你可以放心重開機了。 | ||
|
||
# 結語 | ||
|
||
pm2還有許多延伸,比如查看記憶體使用狀態,reload。有興趣的人可以參考官網研究一下。 | ||
|
||
# 參考資料 | ||
|
||
* pm2:<http://pm2.keymetrics.io> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters