使用node開發web項目如果直接用node框架部署(小項目或者開發測試階段)如何使部署進程穩定而且多個進程同時運行,使用pm2很方便實現。本篇博文詳細介紹pm2的使用技巧。
文章目錄
1.pm2簡介
PM2是一個帶有負載均衡功能的Node應用的進程管理器。PM2可以利用服務器上的所有CPU,並保證進程永遠都活着,0秒的重載,部署管理多個Node項目。PM2是Node線上部署完美的管理工具。
-
日誌管理:應用程序日誌保存在服務器的硬盤中~/.pm2/logs/
-
負載均衡:PM2可以通過創建共享同一服務器端口的多個子進程來擴展您的應用程序。這樣做還允許您以零秒停機時間重新啓動應用程序。
-
終端監控:可以在終端中監控您的應用程序並檢查應用程序運行狀況(CPU使用率,使用的內存,請求/分鐘等)。
-
SSH部署:自動部署,避免逐個在所有服務器中進行ssh。
-
靜態服務:支持靜態服務器功能
-
多平臺支持:適用於Linux(穩定)和macOS(穩定)和Windows(穩定)
2.安裝pm2
npm install pm2 -g
yarn global add pm2
3.pm2使用
1.啓動項目
cd到對應項目啓動的app.js目錄下
pm2 start app.js --nodeTest
此時瀏覽器打開對應項目的端口號即可驗證頁面
http://localhost:3000/
2.停止服務
pm2 stop all //停止所有應用
pm2 stop [AppName] //根據應用名停止指定應用
pm2 stop [ID] //根據應用id停止指定應用
2.停止服務
pm2 delete all //關閉並刪除應用
pm2 delete [AppName] //根據應用名關閉並刪除應用
pm2 delete [ID] //根據應用ID關閉並刪除應用
3.創建開機自啓動
pm2 startup
4.更新PM2
pm2 updatePM2
pm2 update
5.監聽模式
pm2 start app.js --watch //當文件發生變化,自動重啓
6.靜態服務器
pm2 serve ./dist 8090 //將目錄dist作爲靜態服務器根目錄,端口爲8090
7.啓用羣集模式(自動負載均衡)
//max 表示PM2將自動檢測可用CPU的數量並運行儘可能多的進程
//max可以自定義,如果是4核CPU,設置爲2者佔用2個
pm2 start app.js -i max
8.重新啓動
pm2 restart app.js //同時殺死並重啓所有進程。短時間內服務不可用。生成環境推薦使用reload
9. 0秒停機重新加載
pm2 reload app.js //重新啓動所有進程,始終保持至少一個進程在運行
pm2 gracefulReload all //優雅地以羣集模式重新加載所有應用程序
10.查看啓動列表
pm2 list
11.查看每個應用程序佔用情況
pm2 monit
12.顯示應用程序所有信息
pm2 show [Name] //根據name查看
pm2 show [ID] //根據id查看
13.日誌查看
pm2 logs //查看所有應用日誌
pm2 logs [Name] //根據指定應用名查看應用日誌
pm2 logs [ID] //根據指定應用ID查看應用日誌
14.保存並恢復PM2進程
pm2 update
4. PM2配置文件
1.生成示例配置文件
pm2 ecosystem //生成一個示例JSON配置文件
pm2 init
2.示例文件解讀
module.exports = {
apps : [{
name : 'app1', //應用名
script : 'app.js', //應用文件位置
env: {
PM2_SERVE_PATH: ".", //靜態服務路徑
PM2_SERVE_PORT: 8080, //靜態服務器訪問端口
NODE_ENV: 'development' //啓動默認模式
},
env_production : {
NODE_ENV: 'production' //使用production模式 pm2 start ecosystem.config.js --env production
},
instances:"max", //將應用程序分佈在所有CPU核心上,可以是整數或負數
watch:true, //監聽模式
output: './out.log', //指定日誌標準輸出文件及位置
error: './error.log', //錯誤輸出日誌文件及位置,pm2 install pm2-logrotate進行日誌文件拆分
merge_logs: true, //集羣情況下,可以合併日誌
log_type:"json", //日誌類型
log_date_format: "DD-MM-YYYY", //日誌日期記錄格式
}],
deploy : {
production : {
user : 'node', //ssh 用戶
host : '212.83.163.1', //ssh 地址
ref : 'origin/master', //GIT遠程/分支
repo : '[email protected]:repo.git', //git地址
path : '/var/www/production', //服務器文件路徑
post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production' //部署後的動作
}
}
};