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

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

下載截圖


建議採用穩定編譯過的版本,source code稍麻煩,編譯過的直接可用,安裝超級簡單,紅色的是centos X64可用地址。
https://nodejs.org/dist/v5.7.1/node-v5.7.1-linux-x64.tar.xzphp

一、下載安裝包

[root@localhost 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.xz」 100%[=====================================================================================================================================================>] 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後下載快些。java

二、解壓文件tar.xz

由於是tar.xz結尾的文件,要xz一下,再tar一下。node

[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升級太快在原有基礎上升級可是文件目錄顯示的版本名又不匹配。linux

三、配置node全局運行

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

重啓一下試試看,node,npm均可以全局啓用。shell

推薦上面的全局配置方式,固然配置軟連接也能夠全局命令行,這個不推薦。npm

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

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

四、pm2保駕護航

forever已經out了,嚴重推薦pm2方式運行nodejs,這是最好的,沒有之一。
內建負載均衡(使用 Node cluster 集羣模塊)
後臺運行
0 秒停機重載,我理解大概意思是維護升級的時候不須要停機.
具備 Ubuntu 和 CentOS 的啓動腳本
中止不穩定的進程(避免無限循環)
控制檯檢測
提供 HTTP API
遠程控制和實時的接口 API ( Nodejs 模塊,容許和 PM2 進程管理器交互 )
pm2官網http://pm2.keymetrics.io/centos

[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 ▐ ╢████████████████████████████████████████████████████████████████████████████████ 

成功。ruby

五、測試個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"); console.log('Server running at http://127.0.0.1:1337/'); 

pm2啓動試試看

[root@localhost www]# pm2 start helloworld.js --name 'helloworld' [PM2] Spawning PM2 daemon [PM2] PM2 Successfully daemonized [PM2] Starting helloworld.js in fork_mode (1 instance) [PM2] Done. ┌────────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────────────┬──────────┐ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │ ├────────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────────────┼──────────┤ │ helloworld │ 0 │ fork │ 2251 │ online │ 0 │ 0s │ 14.715 MB │ disabled │ └────────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────────────┴──────────┘ Use `pm2 show <id|name>` to get more details about an app [root@localhost www]#pm2 monit 

 

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

[root@localhost 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. [root@localhost www]# pm2 save [PM2] Dumping processes 要保存一下! 

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

[root@localhost ~]# 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是註冊後官網給的。

系統提供監控的key

 

系統監控

六、補充問題,如何開放端口

[root@localhost ~]# /sbin/iptables -I INPUT -p tcp --dport 1337 -j ACCEPT [root@localhost ~]# /etc/rc.d/init.d/iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] [root@localhost ~]# /etc/init.d/iptables status Table: filter Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1337 
相關文章
相關標籤/搜索