【開發筆記】Node.js 版本管理與 PM2 更新
因為專案套件依賴的關係,有時候我們會安裝多個不同版本的 Node.js 在開發機上。雖然說透過 nvm 可以輕易地安裝 Node.js 並且在不同的版本間切換。不過實際將應用部署到開發機之後,很多時候我們會忘記 pm2 也需要相應更新到對應的 Node.js 版本...
安裝 nvm 與 Node.js
nvm 與 Node.js 的安裝都相當的容易,幾行的命令就可以完成。時至目前最新 LTS 的 Node.js 是 22.14.0,至於 nvm 則是 0.40.1。以下是根據撰文當下的版本所編輯的安裝例子:
# 下載與安裝 nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
# 重啟 nvm shell
\. "$HOME/.nvm/nvm.sh"
# 下載與安裝 Node.js:
nvm install 22
# 核對 Node.js 的版本:
node -v # 應該顯示 "v22.14.0".
nvm current # 應該顯示 "v22.14.0".
Node.js 切換後更新 pm2
因為 pm2 save 的作用是將執行中的 node application 存一份快照。所以一但執行環境的 node 版本有所更動時,pm2 最好也更新一遍。
# 首先取消開機自動重啟
pm2 unstartup
# 更新 pm2
npm install pm2@latest -g
# pm2 更新記憶體中常駐的執行序
pm2 update
# 儲存預設啟動的程序並更新 startup script
pm2 save && pm2 startup
pm2 管理程序的幾個細節
首先 pm2 可以偵測或設定 CPU 的數量,根據負載的能力來啟動程序。
# -i 後面接指定啟動 instance 的數量, 0 或 max 則自動偵測執行環境能夠啟動的最大值
pm2 start index.js -i max
# P.S. 如果程序是透過 ecosystem 啟動的話,叢集模式的設置同樣要在 ecosystem.config.js 的 exec_mode 指定。
# P.S. 另外要留意程序本身就支援叢集模式的情況,則啟動的方式要根據該程序的說明來指定。
另外跟 restart 不同, reload 如果是在叢集模式下,pm2 能夠依序關掉一個子程序再重啟一個新的子程序。實現零秒停機(0 second downtime)重啟。
pm2 reload _id_ (or _app_name_ )
最後,則是透過 --name 可以指定啟動程序的名稱。
pm2 start app.js --name _app_name_