node.js&pm2搭建node生产环境

Posted lclc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js&pm2搭建node生产环境相关的知识,希望对你有一定的参考价值。

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

技术分享图片
下载截图


建议采用稳定编译过的版本,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.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后下载快些。

2、解压文件tar.xz

因为是tar.xz结尾的文件,要xz一下,再tar一下。

[[email protected] software]# xz -d node-v5.7.1-linux-x64.tar.xz 
[[email protected] 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

[[email protected] software]# cd node
[[email protected] node]# cd bin
[[email protected] 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
[[email protected] /]# 

之前基本的环境已经搭建完成,但是光有这个还不足够。

4、pm2保驾护航

forever已经out了,严重推荐pm2方式运行nodejs,这是最好的,没有之一。
内建负载均衡(使用 Node cluster 集群模块)
后台运行
0 秒停机重载,我理解大概意思是维护升级的时候不需要停机.
具有 Ubuntu 和 CentOS 的启动脚本
停止不稳定的进程(避免无限循环)
控制台检测
提供 HTTP API
远程控制和实时的接口 API ( Nodejs 模块,允许和 PM2 进程管理器交互 )
pm2官网http://pm2.keymetrics.io/

[[email protected] /]# npm install -g pm2
开始下载安装文件
  │ └── [email protected]0.8 
  ├── [email protected]11.2 
  ├─┬ [email protected]6.0 
  │ └── [email protected]0.11 
  ├── [email protected]0.1 
  ├─┬ [email protected]0.9 
  │ ├── [email protected]3.1 
  │ ├── [email protected]1.2 
  │ ├── [email protected]0.1 
  │ └── [email protected]0.1 
  ├─┬ [email protected]3.6 
  │ ├─┬ [email protected]0.5 
  │ │ └── [email protected]1.0 
  │ └── [email protected]0.1 
  ├─┬ [email protected]2.1 
  │ ├── [email protected]4.2 
  │ └── [email protected]0.18 
  ├─┬ [email protected]1.2 
  │ └── [email protected]1.2 
  ├── [email protected]6.1 
  ├── [email protected]1.0 
  ├── [email protected]6.0 
  ├─┬ [email protected]4.0 
  │ └─┬ [email protected]1.32 
  │   └── [email protected]0.0 
  └─┬ [email protected]2.12 
    └── [email protected]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: [email protected]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"); 
console.log(‘Server running at http://127.0.0.1:1337/‘);

pm2启动试试看

[[email protected] 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

[[email protected] www]#pm2 monit
技术分享图片

 

是不是很神奇,接下来把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是注册后官网给的。

技术分享图片
系统提供监控的key

 

技术分享图片
系统监控

6、补充问题,如何开放端口

[[email protected] ~]# /sbin/iptables -I INPUT -p tcp --dport 1337 -j ACCEPT
[[email protected] ~]# /etc/rc.d/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[[email protected] ~]# /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 













以上是关于node.js&pm2搭建node生产环境的主要内容,如果未能解决你的问题,请参考以下文章

Docker快速搭建Node.js Express运行环境

Docker快速搭建Node.js Express运行环境

Docker快速搭建Node.js Express运行环境

Docker快速搭建Node.js Express运行环境

我们可以同时使用 NGINX 和 PM2 进行 node.js 生产部署吗?

linux环境安装node.js环境和pm2