PM2
1. pm2 是開源的基于Nodejs的進(jìn)程管理器场仲,包括守護(hù)進(jìn)程贫橙、監(jiān)控、日志的一整套完整的功能客冈;
2. pm2 基本是node應(yīng)用程序不二的守護(hù)進(jìn)程選擇锐秦;
3. 事實(shí)上,pm2并不僅僅可以啟動(dòng)node程序梯捕,對(duì)于一般的腳本程序同樣可以勝任;
4. pm2 帶有負(fù)載均衡功能纳鼎,可以保持node應(yīng)用進(jìn)程永遠(yuǎn)運(yùn)行在后臺(tái);
5. pm2 還有個(gè)非常強(qiáng)大的deploy功能裳凸,可以從本地直接部署線上網(wǎng)站贱鄙。
node與PM2
1. 對(duì)于線上項(xiàng)目,如果直接通過 node app 來啟動(dòng)姨谷,如果報(bào)錯(cuò)了可能直接停止導(dǎo)致整個(gè)服務(wù)崩潰逗宁;
2. 一般監(jiān)控 node 的幾種進(jìn)程管理方案:
1. supervisor: 一般用作開發(fā)環(huán)境的使用;
2. forever: 管理多個(gè)站點(diǎn)菠秒,一般每個(gè)站點(diǎn)的訪問量不大的情況疙剑,不需要監(jiān)控;
3. PM2: 網(wǎng)站的訪問量比較大践叠,需要完整的監(jiān)控頁(yè)面言缤。
3. pm2的特性:
1. 內(nèi)建負(fù)載均衡(使用 Node cluster 集群模塊);
2. 后臺(tái)運(yùn)行禁灼;
3. 0 秒停機(jī)重載管挟,維護(hù)升級(jí)時(shí)不需要停機(jī);
4. 具有 Ubuntu 和 CentOS 的啟動(dòng)腳本弄捕;
5. 停止不穩(wěn)定的進(jìn)程(避免無限循環(huán))僻孝;
6. 控制臺(tái)檢測(cè);
7. 提供 HTTP API守谓;
8. 遠(yuǎn)程控制和實(shí)時(shí)的接口 API ( Nodejs 模塊穿铆,允許和 PM2 進(jìn)程管理器交互 )。
4. 全局安裝:npm install -g pm2
PM2命令
1. 啟動(dòng)命令
1. pm2 start app.js:?jiǎn)?dòng)nodeJs應(yīng)用斋荞,進(jìn)程的默認(rèn)名稱為文件名app
2. pm2 start app.js --name mynode:?jiǎn)?dòng)node荞雏,并指定進(jìn)程名稱為mynode
3. pm2 start app.js -i max:根據(jù)有效CPU數(shù)目啟動(dòng)最大進(jìn)程數(shù)目
4. pm2 start app.js -i 3:?jiǎn)?dòng)3個(gè)進(jìn)程
5. pm2 start app.js --watch:實(shí)時(shí)監(jiān)控的方式啟動(dòng),app.js文件有變動(dòng)時(shí)平酿,pm2會(huì)自動(dòng)reload
6. pm2 start app.js -x:用fork模式啟動(dòng) app.js 而不是使用 cluster
7. pm2 start app.js -x -- -a 23:用fork模式啟動(dòng) app.js 并且傳遞參數(shù)(-a 23)
8. pm2 start app.json:?jiǎn)?dòng)進(jìn)程, 在 app.json里設(shè)置選項(xiàng)
9. pm2 start app.js -i max -- -a 23:在 -- 之后給 app.js 傳遞參數(shù)
10. pm2 start app.js -i max -e err.log -o out.log:?jiǎn)?dòng)并生成一個(gè)配置文件
2. 查看與監(jiān)視進(jìn)程
1. pm2 list:顯示所有進(jìn)程凤优;
2. pm2 show 0,pm2 info 0:查看進(jìn)程id為 0 的詳細(xì)信息蜈彼;
3. pm2 monit:進(jìn)入監(jiān)視頁(yè)面筑辨,監(jiān)視每個(gè)node進(jìn)程的CPU和內(nèi)存的使用情況。
3. 停止幸逆、刪除進(jìn)程
1. pm2 stop/delete 0:停止/刪除id為 0 的進(jìn)程棍辕;
2. pm2 stop/delete all:停止/刪除所有進(jìn)程暮现。
4. 重啟、重載
1. pm2 restart 0:重啟id為 0 的進(jìn)程痢毒;
2. pm2 restart all:重啟所有進(jìn)程送矩;
3. pm2 reload 0:0秒停機(jī)重載id為 0 進(jìn)程(用于 NETWORKED 進(jìn)程);
4. pm2 reload all:重載所有進(jìn)程哪替。
5. 日志操作
1. pm2 logs:顯示所有進(jìn)程的日志;
2. pm2 logs 0:顯示進(jìn)程id為 0 的日志菇怀;
3. pm2 flush:清空所有日志文件凭舶;
4. pm2 reloadLogs:重載所有日志。
6. pm2 startup:產(chǎn)生 init 腳本爱沟,保持進(jìn)程活著帅霜。
- 配置文件的方式啟動(dòng):
process.yml
啟動(dòng):apps: - script: app.js instances: 2 watch: true env: NODE_ENV: production
pm2 start process.yml
- json格式的配置文件:
pm2.json
啟動(dòng):"name": "node-app", "script": "app.js", "log_date_format": "YYYY-MM-DD HH:mm Z", "out_file": "log/node-app.stdout.log", "watch": true, "instances": "max", "exec_mode": "cluster"
pm2 start pm2.json
pm2 的日志并不專業(yè),還是建議用log4js
- json格式的配置文件:
-
pm2 kill
殺死PM2
進(jìn)程呼伸。
PM2啟動(dòng)nuxt
1. 打包nuxt項(xiàng)目:npm run build
2. pm2啟動(dòng)(Linux):
1. pm2 start npm --name mynuxt -- start
2. pm2 start npm --name "my-nuxt" -- run start
3. 默認(rèn)情況下身冀,用公網(wǎng)無法直接訪問nuxt,必須配置nginx轉(zhuǎn)發(fā)括享,才能訪問
1. nuxt應(yīng)用端口號(hào)為3000
2. nginx監(jiān)聽80端口搂根,轉(zhuǎn)發(fā)給3000端口,用公網(wǎng)訪問80端口
4. 配置nuxt的package.json铃辖,直接通過公網(wǎng)訪問nuxt應(yīng)用
1. 在package.json中添加一個(gè)新的節(jié)點(diǎn)剩愧,與"dependencies"同級(jí)
"config": {
"nuxt": {
"host": "0.0.0.0",
"port": 3000
}
}
2. 服務(wù)器打開nuxt監(jiān)聽的端口3000,即可訪問
ncc
ncc
:類似于 gcc
的 Node.js
一鍵編譯打包工具娇斩,一個(gè)簡(jiǎn)單的 CLI 工具仁卷,可以一鍵把一個(gè) Node.js
項(xiàng)目編譯打包成單個(gè) JS 文件
npm i -g @zeit/ncc
ncc build app.js
:開始打包,所有文件和引用都被打包編譯到一個(gè)文件中犬第,dist/index.js
ncc
受啟發(fā)于 Go 語(yǔ)言的 build 功能(導(dǎo)出一個(gè)靜態(tài) ELF 可執(zhí)行文件)锦积,目的也是輸出一個(gè) 包含了所有依賴的獨(dú)立可執(zhí)行腳本。
ncc 本身基于webpack
開發(fā)歉嗓,項(xiàng)目也是由ZEIT丰介、webpack 作者( Tobias Koppers )、rollup 作者( Guy Bedford )
合作貢獻(xiàn)而成遥椿。
keymetrics
keymetrics 一個(gè) PM2可視化在線監(jiān)控平臺(tái)