node程序的部署神器pm2的基本使用
pm2是從nodejs衍生出來的服務器進程管理工具,可以做到開機就啟動nodejs。當然了,也可以用nohup來做這件事情的。
前言
眾所周知,Node.js運行在Chrome的JavaScript運行時平臺上,我們把該平臺優雅地稱之為V8引擎。不論是V8引擎,還是之後的Node.js,都是以單線程的方式運行的,因此,在多核心處理器的系統中並不能發揮其最大的性能。
Node.js的cluster模塊
幸運的是,Node.js給我們提供了cluster模塊,它可以生成多個工作線程來共享同一個TCP連接。
它是如何運作的呢?
首先,Cluster會創建一個master,然後根據你指定的數量復制出多個server app(也被稱之為工作線程)。它通過IPC通道與工作線程之間進行通信,並使用內置的負載均衡來更好地處理線程之間的壓力,該負載均衡使用了Round-robin算法(也被稱之為循環算法)。
當使用Round-robin調度策略時,master accepts()所有傳入的連接請求,然後將相應的TCP請求處理發送給選中的工作線程(該方式仍然通過IPC來進行通信)。
用PM2的方式
PM2內置的cluster功能,內部包含了所有上述的處理邏輯,因此你不必對代碼做任何修改。Cluster模塊的功能非常強大,使用PM2會使它變得更加容易。
把pm2加入開機啟動
一般來說,pm2 startup即可,會根據當前系統自動識別加入開機啟動項的方式。因為不同系統的情況下,開機啟動項的加載方式是不一樣的。當然,你也可以指定一下當前系統的類型。具體可以參考相關文檔。
想要PM2在服務器重啟後自動運行之前的應用,可以先通過pm2 start啟動你的應用,然後執行下面的命令:
pm2 save
這將在~/.pm2目錄下生成一個dump.pm2文件,裏面描述了當前PM2上運行著的所有應用。然後執行命令:
pm2 startup [platform]
註意有必要添加可選參數platform以明確告知pm2當前的系統環境。這樣,下次當服務器重啟時,PM2會自動運行之前保存的應用。
當然,這裏也可以指定startup的啟動用戶,例如:
pm2 startup -u sunan
這樣指定的話,pm2的啟動身份,就是sunan,而不是root了。
啟動任務
cd到對應目錄後,使用pm2 start命令啟動對應js,並保存。
pm2 start <js文件相對路徑>
pm2 start <json的任務描述文件相對路徑>
pm2 start server/app.js
pm2 start server/app.json
上面的命令,需要您根據實際情況任選一條。
pm2 save
pm2 start 這個命令是重點,整個部署的核心所在。再說一下pm2 start的幾種變形,常規上來說,一般跟的是js的文件路徑,或者是個json描述文件,甚至是個sh文件。
pm2 save的這個命令實際上會把當前pm2 start的情況寫入到配置文件中。
查看所有pm2任務及刪除pm2任務
pm2 list
pm2 delete <task name>
如下圖:
上述操作完成後,你如果再次重新啟動服務器的話,就會發現,你的nodejs網站已經自動為你啟動完成了。
node程序的部署神器pm2的基本使用