1. 程式人生 > >node.js&pm2搭建node生產環境

node.js&pm2搭建node生產環境

本文以 centos 6.5 x64 為例

node.js 下載地址 https://nodejs.org/en/download/stable/

img

建議採用穩定編譯過的版本,source code稍麻煩,編譯過的直接可用,安裝超級簡單,紅色的是centos X64可用地址。

https://nodejs.org/dist/v5.7.1/node-v5.7.1-linux-x64.tar.xz

1、下載安裝包

[[email protected] software]# wget http://nodejs.org/dist/v5.7.1/node-v5.7.1-linux-x64.tar.xz
--2016-03-06 14:17:04-- http://nodejs.org/dist/v5.7.1/node-v5.7.1-linux-x64.tar.xz Resolving nodejs.org... 104.20.22.46, 104.20.23.46 Connecting to nodejs.org|104.20.22.46|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 8374600 (8.0M) [application/x-xz] Saving to: “node-v5.7.1-linux-x64.tar.xz100
%[=====================================================================================================================================================>] 8,374,600 41.5K/s in 2m 22s 2016-03-06 14:19:37 (57.7 KB/s) - “node-v5.7.1-linux-x64.tar.xz” saved [8374600/8374600]

原始https連結容易下不下來,看網路情況,可以去掉s後下載快些。

2、解壓檔案tar.xz

因為是tar.xz結尾的檔案,要xz一下,再tar一下。

[root@localhost software]# xz -d node-v5.7.1-linux-x64.tar.xz 
[root@localhost software]# tar -xvf node-v5.7.1-linux-x64.tar 
ode-v5.7.1-linux-x64/
node-v5.7.1-linux-x64/bin/
node-v5.7.1-linux-x64/bin/npm
node-v5.7.1-linux-x64/bin/node
node-v5.7.1-linux-x64/share/
node-v5.7.1-linux-x64/share/man/
node-v5.7.1-linux-x64/share/man/man1/
node-v5.7.1-linux-x64/share/man/man1/node.1
node-v5.7.1-linux-x64/share/systemtap/
node-v5.7.1-linux-x64/share/systemtap/tapset/
node-v5.7.1-linux-x64/share/systemtap/tapset/node.stp
node-v5.7.1-linux-x64/share/doc/
node-v5.7.1-linux-x64/share/doc/node/
node-v5.7.1-linux-x64/share/doc/node/gdbinit
node-v5.7.1-linux-x64/LICENSE
node-v5.7.1-linux-x64/include/
node-v5.7.1-linux-x64/include/node/
node-v5.7.1-linux-x64/include/node/zconf.h
node-v5.7.1-linux-x64/include/node/uv-sunos.h

[root@localhost software]# cd node
[root@localhost node]# cd bin
[root@localhost bin]# ./node -v
v5.7.1

等待解壓完成,建議把解壓後的目錄改為node,或者其他有意義的名字,不然node升級太快在原有基礎上升級但是檔案目錄顯示的版本名又不匹配。

3、配置node全域性執行

export NODE_HOME=/file/software/node
export PATH=$NODE_HOME/bin:$PATH 
#找到下邊這一行新增進去,記得你自己的路徑搞對了。
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

重啟一下試試看,node,npm都可以全域性啟用。

推薦上面的全域性配置方式,當然配置軟連結也可以全域性命令列,這個不推薦。

[[email protected] bin]# ln -s /file/software/node/bin/node /usr/local/bin/node
[[email protected] bin]# ln -s
/file/software/node/bin/npm  /usr/local/bin/npm
[[email protected] bin]# cd /
[[email protected] /]# dir
bin  boot  cgroup  dev    etc  file  home  lib 
lib64  lost+found  media    mnt  opt  proc    root 
sbin  selinux  srv  sys  tmp  usr  var
[[email protected] /]# npm -v 3.6.0

之前基本的環境已經搭建完成,但是光有這個還不足夠。

4、pm2保駕護航

forever已經out了,嚴重推薦pm2方式執行nodejs,這是最好的,沒有之一。
內建負載均衡(使用 Node cluster 叢集模組)
後臺執行
0 秒停機過載,我理解大概意思是維護升級的時候不需要停機.
具有 Ubuntu 和 CentOS 的啟動指令碼
停止不穩定的程序(避免無限迴圈)
控制檯檢測
提供 HTTP API
遠端控制和實時的介面 API ( Nodejs 模組,允許和 PM2 程序管理器互動 )
pm2官網http://pm2.keymetrics.io/

[root@localhost /]# npm install -g pm2
開始下載安裝檔案
  │ └── minimist@0.0.8 
  ├── moment@2.11.2 
  ├─┬ nssocket@0.6.0 
  │ └── lazy@1.0.11 
  ├── pidusage@1.0.1 
  ├─┬ pm2-axon@2.0.9 
  │ ├── amp@0.3.1 
  │ ├── amp-message@0.1.2 
  │ ├── configurable@0.0.1 
  │ └── escape-regexp@0.0.1 
  ├─┬ pm2-axon-rpc@0.3.6 
  │ ├─┬ commander@1.0.5 
  │ │ └── keypress@0.1.0 
  │ └── json-stringify-safe@5.0.1 
  ├─┬ pm2-deploy@0.2.1 
  │ ├── async@1.4.2 
  │ └── tv4@1.0.18 
  ├─┬ pm2-multimeter@0.1.2 
  │ └── charm@0.1.2 
  ├── pmx@0.6.1 
  ├── semver@5.1.0 
  ├── shelljs@0.6.0 
  ├─┬ source-map-support@0.4.0 
  │ └─┬ source-map@0.1.32 
  │   └── amdefine@1.0.0 
  └─┬ vizion@0.2.12 
    └── async@0.9.0 

runTopLevelLifecycles     ▌ ╢████████████████████████████████████████████████████████████████████████████████
npm WARN optional Skipping failed optional dependency /pm2/chokidar/fsevents:
runTopLevelLifecycles     ▀ ╢████████████████████████████████████████████████████████████████████████████████
npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.0.8
runTopLevelLifecycles     ▐ ╢████████████████████████████████████████████████████████████████████████████████

成功。

5、測試個helloworld

helloworld.js

var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain'
}); res.end('Hello World\n'); 
}).listen(1337, "127.0.0.1"); 

pm2啟動試試看

img

是不是很神奇,接下來把pm2加入系統啟動中。

[[email protected] www]# pm2 startup centos
[PM2] Generating system init script in /etc/init.d/pm2-init.sh
[PM2] Making script booting at startup...
[PM2] /var/lock/subsys/pm2-init.sh lockfile has been added
[PM2] -centos- Using the command:
      su -c "chmod +x /etc/init.d/pm2-init.sh; chkconfig --add pm2-init.sh"

[PM2] Done.
[[email protected] www]# pm2 save
[PM2] Dumping processes
要儲存一下!

還有更厲害。
先去pm2官網上註冊個賬號,收費的更好些,我們看下free版本。

[[email protected] ~]# pm2 link key1 ke2 [62server]
[Keymetrics.io] Using (Public key: yklukcus7ugg7u6) (Private key: fhgynshuxtahahd)
[Keymetrics.io] [Agent created] Agent ACTIVE - Web Access: https://app.keymetrics.io/

key1和key2是註冊後官網給的。

img

系統提供監控的key

img

技術交流學習或者有任何問題歡迎加群:154514123

這裡寫圖片描述