nodejs部署方式-pm2

來源:互聯網
上載者:User

標籤:deb   運行   href   圖表   指令碼   top   pts   代碼      

目前Nodejs開發中有很多痛點,其中有一個是修改完代碼以後需要我們重啟服務才能看到效果。這樣一次次的殺進程、重啟,殺進程、重啟很讓人頭大。程式員是最痛恨重複工作的物種,之前有瞭解過的同學可能知道 forever 。 forever 可以幫我們解決上面的問題,通過對資源變化的檢測做到變化後自動重啟。開發階段我們使用 node file.js 來啟動另外由於Nodejs的單線程,任何異常都會導致整個服務中斷,這對於生產上長時間提供服務的程式來講是不可以的, forever 可以幫我們在異常後重啟,保證服務一直線上,我想這也就是它名字的由來吧。但我想說的是 forever 不夠“高!大!上!”。接下來我要介紹一個足夠高大上的神器– pm2 。

簡介

pm2 = P (rocess) M (anager)2,是可以用於生產環境的Nodejs的進程管理工具,並且它內建一個負載平衡。它不僅可以保證服務不會中斷一直線上,並且提供0秒reload功能,還有其他一系列進程管理、監控功能。並且使用起來非常簡單。下面我將把我的使用過程分享出來,Nodejs應用是一個基於Express 4.x的應用,名稱是 Wolverine 。

安裝

環境清單:

  • windows7 x64
  • node v5.0.0
  • npm 3.3.6

全域安裝 pm2 

$ npm install pm2 -g

更新

$ pm2 update
啟動

以前啟動 Wolverine 是利用package.json的 scripts 來實現的,只需要執行 npm run start 就可以啟動,配置如下:

"scripts": {    "start": "node ./bin/www",    "debug": "node debug ./bin/www"  },

使用 pm2 我們可以在start處配置成 pm2 ./bin/www ,命令後面支援加參數來實現watch、cluster多進程模式等功能。我不太喜歡一大串的命令,於是我使用了設定檔的方式。

在 Wolverine 的根目錄,我建立了一個 processes.json 設定檔,設定檔內容如下,注釋寫的也很清楚了

{  "apps" : [{    "name" : "Wolverine",  //名稱    "script": "./bin/www", //程式入庫    "cwd": "./",           //根目錄    "watch":["bin","common","configs","public","routes","views"],//需要監控的目錄    "error_file":"./logs/app-err.log",//錯誤輸出日誌    "out_file":"./logs/app-out.log",  //日誌    "log_date_format":"YYYY-MM-DD HH:mm Z" //日期格式    }]}

隨後,我在package.json中增加了一條

"pm2": "pm2 start processes.json"

在啟動就直接輸入如下命令就好:

$ npm run pm2

看到下面的介面,就啟動成功了,然後我們就可以關掉這個視窗了,服務不會因此停止,是不是高大上多了。

管理和監控

啟動成功的介面會展示App name和id,這兩個值很重要。當然這兩個值都可以在processes.json設定檔進行配置。

開啟命令列,在任何路徑下,輸入

$ pm2 list

就能看到啟動時的圖表介面,方便我們查看所有通過pm2管理的Nodejs服務。

輸入,下面命令配合id或者name可以查看某一個進程的詳細資料

$ pm2 show Wolverine 或者$ pm2 show 0

內容涉及重啟次數、已耗用時間、指令碼路徑、參數、日誌路徑、運行模式等等資訊

輸入

$ pm2 monit

停止、重啟等命令

$ pm2 stop [app-name|id]  #停止某一個進程,可以使用app-name或者id$ pm2 stop all            #停止所有進程$ pm2 restart all         #重啟所有的進程$ pm2 delete [app-name|id]#刪除並停止進程$ pm2 delete all          #刪除並停止所有進程

可以進一步查看每一個服務的cpu、記憶體動態佔用情況。

日誌監控

如果你一直使用 tail -f log_file.log log_error.log 來查看日誌,你可能會愛上下面的這個功能。

$ pm2 logs$ pm2 logs [app-name]

我們可以即時查看全部進程的日誌,或者只查看某一個。我們甚至可以使用json格式查看日誌。

$ pm2 logs --json
Web API

如果你不僅僅想監控被pm2管理的進程,還需要監控進程所啟動並執行機器的資訊,你可以使用下面這個API

$ pm2 web

pm2會啟動一個叫做pm2-http-interface的進程提供web服務。你開啟瀏覽器輸入http://127.0.0.1:9615,是不是被看到的結果驚豔到了。

pm2提供的web api通過json輸出了很多資訊。大致結構可以看:

拿出你的想象力,我們可以開發一個應用來調用此api,就可以開發出一個圖形介面的監視軟體了。。。

nodejs部署方式-pm2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.