查看pm2管理
pm2 list
┌────┬──────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ? │ status │ cpu │ mem │ user │ watching │
├────┼──────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ app │ default │ N/A │ fork │ N/A │ 8h │ 0 │ online │ 0% │ 0b │ root │ disabled │
│ 1 │ steak-api │ default │ N/A │ fork │ N/A │ 8h │ 0 │ online │ 0% │ 0b │ root │ disabled │
1.進入后端路徑
cd /usr/share/nginx/html/server
2.使用 PM2 啟動應用
pm2 start app.js --name "NewsSystem-api"
此項目的 Express 應用需要使用?
bin/www
?文件來啟動,而不是?app.js
pm2 start ./bin/www --name NewsSystem-api
pm2 start ./bin/www --name NewsSystem-api
[PM2] Starting /usr/share/nginx/html/server/bin/www in fork_mode (1 instance)
[PM2] Done.
┌────┬───────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ? │ status │ cpu │ mem │ user │ watching │
├────┼───────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 4 │ NewsSystem-api │ default │ 0.0.0 │ fork │ 113151 │ 0s │ 0 │ online │ 0% │ 0b │ root │ disabled │
│ 0 │ app │ default │ N/A │ fork │ N/A │ 8h │ 0 │ online │ 0% │ 0b │ root │ disabled │
│ 1 │ steak-api │ default │ N/A │ fork │ N/A │ 8h │ 0 │ online │ 0% │ 0b │ root │ disabled │
3.讓 PM2 開機自啟
1.pm2 startup
pm2 startup systemd
2.pm2 save
[root@VM-4-8-centos server]# pm2 save
[PM2] Saving current process list...
[PM2] Successfully saved in /root/.pm2/dump.pm2
4.驗證整個流程是否成功
1. 重啟整個服務器
sudo reboot
2.讓 PM2 恢復所有保存的應用
pm2 resurrect
這個命令模擬了系統啟動時?
pm2-root.service
?所做的工作。執行后,檢查你的應用?my-api
?的狀態是否從?stopped
?變成了?online
,并且網站接口也恢復了。如果?
resurrect
?命令成功,那就證明你的開機自啟配置完全正確。
總結:以后更新代碼后的完整工作流
現在的生產環境部署流程應該是這樣的:
部署新代碼?(例如通過?
git pull
)安裝新增依賴?(如果有的話)
重啟 PM2 進程以使新代碼生效
pm2 restart my-api
(可選) 再次保存進程列表?(通常不需要,除非你新增或刪除了進程)
pm2 save
至此,已經擁有了一個完全體的生產環境 Node.js 服務,它具備了:
后臺運行
崩潰自動重啟
服務器開機自動啟動
便捷的日志查看?(
pm2 logs
)便捷的狀態管理?(
pm2 status
)
以后再也不需要手動輸入?npm start
?了。
應用生命周期管理
# 啟動一個應用并為其命名(推薦)
pm2 start app.js --name "my-api"# 啟動應用并監聽文件變化(用于開發環境,文件修改后自動重啟)
pm2 start app.js --name "my-api" --watch# 啟動應用并傳遞環境變量(NODE_ENV=production)
pm2 start app.js --name "my-api" --env production# 重啟指定應用(代碼更新后常用)
pm2 restart my-api# 優雅地重載應用(集群模式時逐個重啟,實現零停機更新)
pm2 reload my-api# 停止指定應用(停止但不從PM2列表中移除)
pm2 stop my-api# 刪除指定應用(從PM2列表中完全移除)
pm2 delete my-api# 停止并刪除所有應用
pm2 delete all
監控與信息查看
# 查看所有被PM2管理的應用狀態(最常用)
pm2 status
# 或者
pm2 list# 實時監控所有應用的CPU和內存使用情況(類似top命令)
pm2 monit# 查看指定應用的實時日志(-f 表示follow,持續輸出)
pm2 logs my-api
pm2 logs my-api --lines 100 # 查看最后100行日志# 查看所有應用的實時日志
pm2 logs# 清空指定應用的日志文件
pm2 flush my-api# 顯示指定應用的詳細信息(包括路徑、環境變量等)
pm2 show my-api# 顯示所有應用的詳細信息
pm2 show all
集群模式與性能
# 以集群模式啟動應用,自動利用所有CPU核心(用于提升性能)
pm2 start app.js -i max --name "my-api-cluster"# 啟動指定數量的實例(例如4個實例)
pm2 start app.js -i 4 --name "my-api-cluster"
啟動配置與持久化
# 生成一個示例的PM2配置文件(ecosystem.config.js)
pm2 init# 使用配置文件啟動應用(推薦用于復雜配置)
pm2 start ecosystem.config.js# 保存當前進程列表到磁盤,用于開機自啟(非常重要!)
pm2 save# 恢復上次保存的進程列表(模擬開機自啟過程)
pm2 resurrect
系統服務與自啟
# 配置PM2為系統服務,實現開機自啟(針對當前用戶)
pm2 startup# 移除開機自啟配置
pm2 unstartup# 如果pm2 startup提示需要以sudo運行,請使用:
pm2 startup systemd -u your_username --hp /home/your_username
維護與實用命令
# 平滑重啟PM2自身(不中斷當前管理的進程)
pm2 gracefulReload# 生成當前環境的啟動腳本(用于調試)
pm2 startup [platform] --help# 查看PM2的版本信息
pm2 --version# 強制PM2觸發一個快照并發送到PM2 Plus(如果使用的話)
pm2 update
配置文件示例 (ecosystem.config.js
)
對于生產環境,強烈推薦使用配置文件:
module.exports = {apps: [{name: "my-api", // 應用名稱script: "./app.js", // 入口文件instances: "max", // 集群實例數,max表示按CPU核心數exec_mode: "cluster", // 集群模式env: {NODE_ENV: "development", // 開發環境變量},env_production: {NODE_ENV: "production", // 生產環境變量(使用--env production啟用)},watch: false, // 是否監聽文件變化(生產環境應為false)max_memory_restart: "1G", // 內存超過1G自動重啟log_file: "logs/combined.log", // 合并日志文件out_file: "logs/out.log", // 標準輸出日志error_file: "logs/err.log", // 錯誤日志time: true // 日志中顯示時間戳}]
};
使用配置文件:
# 啟動所有在配置文件中定義的應用
pm2 start ecosystem.config.js# 使用生產環境變量啟動
pm2 start ecosystem.config.js --env production# 重啟配置文件中定義的應用
pm2 restart ecosystem.config.js
作為日常開發的速查手冊。pm2 status
、pm2 logs
、pm2 restart
?這幾個是最常用的。