⚙️ Node.js + PM2
Node.js 應用程序管理與叢集模式
PM2 是 Node.js 應用的生產環境程序管理工具,支援零停機重啟(reload)、多核心叢集(cluster mode)、日誌輸出管理與系統啟動整合。
安裝
$ # 先安裝 Node.js(建議使用 nvm 或 NodeSource)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# 安裝 PM2
sudo npm install -g pm2
pm2 --version基本操作
$ pm2 start app.js --name myapp # 啟動應用
pm2 start app.js -i max # 叢集模式(使用所有 CPU)
pm2 list # 查看所有應用狀態
pm2 monit # 即時監控 CPU/記憶體
pm2 stop myapp # 停止
pm2 restart myapp # 重啟
pm2 reload myapp # 零停機重載(叢集模式)
pm2 delete myapp # 停止並移除
pm2 describe myapp # 查看詳細資訊Ecosystem 設定檔(ecosystem.config.js)
將應用程式設定集中管理,適合多服務或多環境部署:
module.exports = {
apps: [
{
name: 'api-server',
script: './src/server.js',
instances: 'max', // 或指定數字,如 4
exec_mode: 'cluster',
env: { // 開發環境變數
NODE_ENV: 'development',
PORT: 3000,
},
env_production: { // 生產環境變數
NODE_ENV: 'production',
PORT: 3000,
DB_HOST: 'localhost',
},
error_file: '/var/log/pm2/api-error.log',
out_file: '/var/log/pm2/api-out.log',
max_memory_restart: '512M', // 記憶體超過時自動重啟
}
]
};
$ pm2 start ecosystem.config.js --env production
pm2 reload ecosystem.config.js --env production # 更新設定並重載叢集模式說明
叢集模式讓 PM2 建立多個 Node.js 程序,充分利用多核 CPU:
$ pm2 start app.js -i max --name api # max = CPU 核心數
pm2 scale api +2 # 動態增加 2 個實例
pm2 scale api 4 # 調整為固定 4 個實例pm2 reload(而非 restart)在叢集模式下會逐一重啟每個實例,確保服務不中斷。
設定開機自動啟動
$ # 產生 systemd 設定(依提示執行輸出的 sudo 指令)
pm2 startup
# 儲存目前運行中的應用清單
pm2 save
# 之後重啟伺服器,PM2 會自動恢復所有應用日誌管理
$ pm2 logs # 查看所有應用的即時日誌
pm2 logs myapp # 查看特定應用的日誌
pm2 logs --lines 200 # 查看最後 200 行
pm2 flush # 清空所有日誌$ # 安裝 pm2-logrotate 自動輪替日誌
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 50M
pm2 set pm2-logrotate:retain 7