Specifics,ES6/AuthBind…
Listening on port 80 w/o root
通常不将node作为root运行,然后只有root才可以绑定小于1024的端口。这是 authbind 所发挥作用的地方。Authbind允许非root用户绑定小于1024的端口。
$ sudo apt-get install authbind
$ sudo touch /etc/authbind/byport/80
$ sudo chown %user% /etc/authbind/byport/80
$ sudo chmod 755 /etc/authbind/byport/80
$ authbind --deep pm2 update
你现在可以使用pm2 启动应用,不需要root绑定到80端口。
建议在你的 .bashrc 文件中设置别名:
alias pm2='authbind --deep pm2'
Multiple PM2 on the same server
你可以启动多个pm2实例,通过改变 PM2_HOME 环境变量。
$ PM2_HOME='.pm2' pm2 start echo.js --name="echo-node-1"
$ PM2_HOME='.pm3' pm2 start echo.js --name="echo-node-2"
这个将会启动2个pm2实例。每个实例都会管理不同的进程列表:
$ PM2_HOME='.pm2' pm2 list
$ PM2_HOME='.pm3' pm2 list
Launch PM2 in no deamon - 没有虚拟光驱启动pm2
确保你可以杀死任何pm2实例,在没有虚拟光驱启动pm2之前 (pm2 kill)。
$ pm2 start app.js --no-daemon
Configuration file
你可以编辑 $HOME/.pm2/conf.js 来编辑pm2选项
PM2_LOG_FILE_PATH // PM2 log file path
PM2_PID_FILE_PATH // Pid file path
DUMP_FILE_PATH // Dump file path (for pm2 save && pm2 resurrect)
CONCURRENT_ACTIONS // Concurrent process actions
WEB_INTERFACE // Port of the PM2 web api
API health endpoint
$ pm2 web
Stateless apps
一般来说,生产环境的app应该是无状态的。每一个data, states, websocket session, session data, 必须通过数据库或 PUB/SUB system共享。
如果不是,你的app可以在同一个服务器并且跨多个服务器。
例如,你想使用 connect-redis共享session。
我们还建议你遵守12要素公约:http://12factor.net/
Setup pm2 on a server
Log and PID files
默认,log (error 和 output),pid文件,dumps, 和pm2 log 都被放在 ~/.pm2/:
.pm2/
├── dump.pm2
├── custom_options.sh
├── pm2.log
├── pm2.pid
├── logs
└── pids
Enabling Harmony ES6
–node-args 允许添加参数到node的解析器。启动harmony模式
harmony模式可以在node中启用es6
$ pm2 start my_app.js --node-args="--harmony"
或者json声明
[{
"name" : "ES6",
"script" : "es6.js",
"node_args" : "--harmony"
}]
CoffeeScript
$ pm2 start server.coffee --interpreter coffee
Piping JSON
Process title
你可以指定环境变量 PROCESS_FILE 当使用pm2启动app,它将设置一个process title。在尝试从process中获取指定数据时非常有用。例如你可以使用 ps -fC name
Transpilers
Refer to Using transpilers with PM2 tutorial.
User tips from issues
- Vagrant and pm2
- 用不同的端口启动同一个app
- Using ansible with pm2
- Cron string as argument
- 当内存达到一个指定临界值时重启app
- Sticky sessions and socket.io discussion
- EACCESS - understanding pm2 user/root rights
External resources and articles
可到官网查看