Node.js PM2:正式環境的最佳程序管理器與自動化維運
在正式環境中,你絕對不能直接使用 node app.js 來啟動服務。一旦發生未預期的報錯(如資料庫連線超時),程式會直接終止,導致網站掛掉。PM2 (Process Manager 2) 是 Node.js 生態系中最受歡迎的進階程序管理器,它能確保你的服務 24/7 永不中斷。
PM2 的核心價值
- 守護行程 (Daemon):程式崩潰時自動重啟。
- 叢集模式 (Cluster Mode):充分利用多核心 CPU 的效能。
- 日誌管理:自動收集與美化日誌。
- 零停機部署 (Zero-downtime):讓使用者在更新期間完全感覺不到服務中斷。
基礎指令速查
安裝:npm install pm2 -g。
- 啟動並命名:
pm2 start app.js --name "web-api" - 查看狀態:
pm2 list(或pm2 status) - 即時監控:
pm2 monit(查看 CPU/記憶體使用率) - 查看日誌:
pm2 logs - 停止/重啟:
pm2 stop web-api/pm2 restart web-api
進階:Cluster 模式(壓榨 CPU 效能)
Node.js 是單執行緒的,預設只能用到 CPU 的一個核心。PM2 的 Cluster 模式能根據核心數啟動多個實例,這在生產環境是必開的功能。
# 啟動與核心數相同的實例數量
pm2 start app.js -i max
專業配置:Ecosystem File
與其每次手動輸入參數,不如撰寫 ecosystem.config.js 定義檔,這對版本控制與團隊協作非常有幫助。
module.exports = {
apps: [
{
name: 'my-app',
script: './app.js',
instances: 'max', // 使用 Cluster 模式
exec_mode: 'cluster',
watch: false, // 正式環境建議關閉監聽檔案變動
max_memory_restart: '1G', // 記憶體超過 1GB 自動重開,防止漏水
env: {
NODE_ENV: 'development',
},
env_production: {
NODE_ENV: 'production',
PORT: 80,
},
},
],
};
一鍵啟動:pm2 start ecosystem.config.js --env production
運維必備:開機自啟動與 Reload
- 開機自啟動:執行
pm2 startup並照著螢幕輸出的指令複製貼上。完成後執行pm2 save凍結當前列表。 - 零停機重啟 (Reload):
pm2 reload all。[!NOTE]
restart會中斷所有連線再重開;reload會逐一替換實例,確保任何時刻都有 Worker 在提供服務。
總結
- PM2 是 Node.js 應用程式在正式環境中的「保護傘」。
- 善用 Cluster 模式 能讓你的伺服器吞吐量瞬間提升數倍。
- 始終使用 Ecosystem 文件 管理配置,這是專業開發者的基本修養。