在生产环境中使用PM2运行Node

PM2 is a production process manager for Node.js applications with a built-in load balancer. It allows you to keep applications alive forever, to reload them without downtime and to facilitate common system admin tasks.

Starting an application in production mode is as easy as:

1
$ pm2 start app.js

PM2 is constantly assailed by more than 1000 tests.

Official website: http://pm2.keymetrics.io/

Works on Linux (stable) & MacOSx (stable) & Windows (stable).

正文

默认情况下,node环境变量是空的,在线上环境运行,肯定需要把环境变量设为生产环境。一般情况下,在package.jsonscripts 中设置 cross-env NODE_ENV=production 就完成任务了,但是在pm2中却不灵了。

简短的使用pm2部署node生产环境的步骤:

1. 创建配置文件app.json

当前你也可以随便起其他名字,或者是一个数组,更高级的用法参考官网文档。

app.json:

1
2
3
4
5
6
7
8
9
10
11
{
...
"script": "bin/run",
"env": {
"NODE_ENV": "production"
},
"instances": 0,
"exec_mode": "cluster",
"autorestart": true,
...
}

说明:

  • env 指定node运行环境,默认空
  • instances 运行实例个数,设置为0则根据处理器情况,生成最大的实例数
  • exec_mode 默认为fork,指定了instances后则为集群模式
  • autorestart 默认false,自动启动
  • 其他参数可以参考pm2文档: http://pm2.keymetrics.io/

2. 在package.json中创建scripts item

package.json:

1
2
3
4
5
...
"scripts": {
"pm2": "pm2 start app.json"
},
...

3. 运行

start it easily:

1
$ npm run pm2
1
2
3
4
5
6
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ watching │
├──────────┼────┼─────────┼───────┼─────────┼─────────┼────────┼─────┼────────────┼──────────┤
│ run │ 0 │ cluster │ 15480 │ online │ 23 │ 45s │ 0% │ 117.5 MB │ disabled │
│ run │ 1 │ cluster │ 9208 │ online │ 20 │ 45s │ 0% │ 116.1 MB │ disabled │
│ run │ 2 │ cluster │ 13440 │ online │ 24 │ 45s │ 0% │ 121.2 MB │ disabled │
│ run │ 3 │ cluster │ 14228 │ online │ 23 │ 45s │ 0% │ 115.6 MB │ disabled │

参考