【开发笔记】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_