PM2
1. pm2 是開源的基于Nodejs的程序管理器,包括守護程序、監控、日志的一整套完整的功能;
2. pm2 基本是node應用程式不二的守護程序選擇;
3. 事實上,pm2并不僅僅可以啟動node程式,對于一般的腳本程式同樣可以勝任;
4. pm2 帶有負載均衡功能,可以保持node應用程序永遠運作在背景;
5. pm2 還有個非常強大的deploy功能,可以從本地直接部署線上網站。
node與PM2
1. 對于線上項目,如果直接通過 node app 來啟動,如果報錯了可能直接停止導緻整個服務崩潰;
2. 一般監控 node 的幾種程序管理方案:
1. supervisor: 一般用作開發環境的使用;
2. forever: 管理多個站點,一般每個站點的通路量不大的情況,不需要監控;
3. PM2: 網站的通路量比較大,需要完整的監控頁面。
3. pm2的特性:
1. 内建負載均衡(使用 Node cluster 叢集子產品);
2. 背景運作;
3. 0 秒停機重載,維護更新時不需要停機;
4. 具有 Ubuntu 和 CentOS 的啟動腳本;
5. 停止不穩定的程序(避免無限循環);
6. 控制台檢測;
7. 提供 HTTP API;
8. 遠端控制和實時的接口 API ( Nodejs 子產品,允許和 PM2 程序管理器互動 )。
4. 全局安裝:npm install -g pm2
PM2指令
1. 啟動指令
1. pm2 start app.js:啟動nodeJs應用,程序的預設名稱為檔案名app
2. pm2 start app.js --name mynode:啟動node,并指定程序名稱為mynode
3. pm2 start app.js -i max:根據有效CPU數目啟動最大程序數目
4. pm2 start app.js -i 3:啟動3個程序
5. pm2 start app.js --watch:實時監控的方式啟動,app.js檔案有變動時,pm2會自動reload
6. pm2 start app.js -x:用fork模式啟動 app.js 而不是使用 cluster
7. pm2 start app.js -x -- -a 23:用fork模式啟動 app.js 并且傳遞參數(-a 23)
8. pm2 start app.json:啟動程序, 在 app.json裡設定選項
9. pm2 start app.js -i max -- -a 23:在 -- 之後給 app.js 傳遞參數
10. pm2 start app.js -i max -e err.log -o out.log:啟動并生成一個配置檔案
2. 檢視與監視程序
1. pm2 list:顯示所有程序;
2. pm2 show 0,pm2 info 0:檢視程序id為 0 的詳細資訊;
3. pm2 monit:進入監視頁面,監視每個node程序的CPU和記憶體的使用情況。
3. 停止、删除程序
1. pm2 stop/delete 0:停止/删除id為 0 的程序;
2. pm2 stop/delete all:停止/删除所有程序。
4. 重新開機、重載
1. pm2 restart 0:重新開機id為 0 的程序;
2. pm2 restart all:重新開機所有程序;
3. pm2 reload 0:0秒停機重載id為 0 程序(用于 NETWORKED 程序);
4. pm2 reload all:重載所有程序。
5. 日志操作
1. pm2 logs:顯示所有程序的日志;
2. pm2 logs 0:顯示程序id為 0 的日志;
3. pm2 flush:清空所有日志檔案;
4. pm2 reloadLogs:重載所有日志。
6. pm2 startup:産生 init 腳本,保持程序活着。
配置檔案的方式啟動:process.yml
apps:
- script: app.js
instances: 2
watch: true
env:
NODE_ENV: production
啟動:pm2 start process.yml
pm2 kill 殺死PM2程序。
PM2啟動nuxt
1. 打包nuxt項目:npm run build
2. pm2啟動(Linux):
1. pm2 start npm --name mynuxt -- start
2. pm2 start npm --name "my-nuxt" -- run start
3. 預設情況下,用公網無法直接通路nuxt,必須配置nginx轉發,才能通路
1. nuxt應用端口号為3000
2. nginx監聽80端口,轉發給3000端口,用公網通路80端口
4. 配置nuxt的package.json,直接通過公網通路nuxt應用
1. 在package.json中添加一個新的節點,與"dependencies"同級
"config": {
"nuxt": {
"host": "0.0.0.0",
"port": 3000
}
}
2. 伺服器打開nuxt監聽的端口3000,即可通路
ncc
ncc:類似于 gcc 的 Node.js 一鍵編譯打包工具,一個簡單的 CLI 工具,可以一鍵把一個 Node.js 項目編譯打包成單個 JS 檔案
npm i -g @zeit/ncc
ncc build app.js:開始打包,所有檔案和引用都被打包編譯到一個檔案中,dist/index.js
ncc 受啟發于 Go 語言的 build 功能(導出一個靜态 ELF 可執行檔案),目的也是輸出一個 包含了所有依賴的獨立可執行腳本。
ncc 本身基于 webpack 開發,項目也是由 ZEIT、webpack 作者( Tobias Koppers )、rollup 作者( Guy Bedford )合作貢獻而成。