在没有 root 权限的情况下监听端口 80
通常情况下,您不应该以 root 用户身份运行 node。但是,只有 root 用户才能绑定到小于 1024 的端口。这就是 authbind 的用武之地。Authbind 允许非 root 用户绑定到小于 1024 的端口。将 %user%
替换为将运行 pm2
的用户。
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
您还应该为运行 pm2
的用户添加别名,例如 ~/.bashrc
或 ~/.zshrc
(请注意,您需要在之后立即运行 source ~/.bashrc
或 source ~/.zshrc
)
+alias pm2='authbind --deep pm2'
最后,确保使用 authbind
更新 pm2
authbind --deep pm2 update
或者,如果您已将别名添加到用户配置文件中,则只需执行 pm2 update
。
现在,您可以使用 PM2 启动可以绑定到端口 80 的应用程序,而无需 root 权限!
同一服务器上的多个 PM2
客户端和守护进程通过 $HOME/.pm2/pub.sock 和 $HOME/.pm2/rpc.sock 中可用的套接字文件进行通信。
您可以通过更改 PM2_HOME
环境变量来启动多个 PM2 实例。
PM2_HOME='.pm2' pm2 start echo.js --name="echo-node-1"
PM2_HOME='.pm3' pm2 start echo.js --name="echo-node-2"
这将启动两个不同的 PM2 实例。要列出每个不同实例管理的进程,请执行以下操作
PM2_HOME='.pm2' pm2 list
PM2_HOME='.pm3' pm2 list
在非守护进程模式下启动 PM2
在以非守护进程模式启动 PM2 之前,请确保终止所有 PM2 实例(pm2 kill
)。
启动 PM2 时不进行守护进程化
pm2 start app.js --no-daemon
默认情况下,在 PM2 安装时还会安装 CLI pm2-runtime
,它是 Node.js 二进制文件的替代品。
无状态应用
通常,您的生产应用程序应该是无状态的。所有数据、状态、WebSocket 会话、会话数据都必须通过任何类型的数据库或 PUB/SUB 系统共享。
否则,您的应用程序将难以在同一服务器和多台服务器上扩展。
例如,您可以使用 connect-redis 来共享会话。
我们还建议您遵循 12 要素约定:http://12factor.net/
在服务器上设置 pm2
如何在 Ubuntu VPS 上使用 pm2 设置 Node.js 生产环境.
日志和 PID 文件
默认情况下,日志(错误和输出)、pid 文件、转储文件和 PM2 日志位于 ~/.pm2/
中
.pm2/
├── dump.pm2
├── custom_options.sh
├── pm2.log
├── pm2.pid
├── logs
└── pids
启用 Harmony ES6
--node-args
选项允许向 node 解释器添加参数。要为进程启用 harmony,请键入以下命令
pm2 start my_app.js --node-args="--harmony"
在 JSON 声明中
[{
"name" : "ES6",
"script" : "es6.js",
"node_args" : "--harmony"
}]
CoffeeScript
CoffeeScript v1
pm2 install coffee-script
pm2 start app.coffee
CoffeeScript v2
pm2 install coffeescript
pm2 start app.coffee
就是这样!
管道 JSON
拉取请求
#!/bin/bash
read -d '' my_json <<_EOF_
[{
"name" : "app1",
"script" : "/home/projects/pm2_nodetest/app.js",
"instances" : "4",
"error_file" : "./logz/child-err.log",
"out_file" : "./logz/child-out.log",
"pid_file" : "./logz/child.pid",
"exec_mode" : "cluster_mode",
"port" : 4200
}]
_EOF_
echo $my_json | pm2 start -
进程标题
您可以在使用 PM2 启动应用程序时指定环境变量 PROCESS_TITLE
,它将设置进程标题。当您尝试从进程中获取特定数据时,这非常有用,例如,您可以使用 ps -fC name
。
转译器
请参阅 将转译器与 PM2 一起使用 教程。
来自问题的用户提示
- Vagrant 和 pm2 #289
- 在不同端口上启动相同的应用程序 #322
- 将 ansible 与 pm2 一起使用
- Cron 字符串作为参数
- 当进程达到特定内存量时重启
- 粘性会话和 socket.io 讨论
- EACCESS - 了解 pm2 用户/root 权限
外部资源和文章
- PM2 - 实用程序概述和安装
- 如何在 Ubuntu 16.04 上设置 Node.js 生产环境
- 教程:在 AWS 上创建和管理 Node.js 服务器,第 2 部分
- 告别 node-forever,你好 pm2
- https://www.howtoforge.com/tutorial/how-to-deploy-nodejs-applications-with-pm2-and-nginx-on-ubuntu/
- https://serversforhackers.com/editions/2014/11/04/pm2/
- http://www.allaboutghost.com/keep-ghost-running-with-pm2/
- http://blog.ponyfoo.com/2013/09/19/deploying-node-apps-to-aws-using-grunt
- http://www.allaboutghost.com/keep-ghost-running-with-pm2/
- http://bioselemental.com/keeping-ghost-alive-with-pm2/
- http://blog.chyld.net/installing-ghost-on-ubuntu-13-10-aws-ec2-instance-with-pm2/
- http://blog.marvinroger.fr/gerer-ses-applications-node-en-production-pm2/
- https://www.codersgrid.com/2013/06/29/pm2-process-manager-for-node-js/
- http://www.z-car.com/blog/programming/how-to-rotate-logs-using-pm2-process-manager-for-node-js
- http://yosoftware.com/blog/7-tips-for-a-node-js/
- https://www.exponential.io/blog/nodeday-2014-moving-a-large-developer-workforce-to-nodejs
- http://blog.rapsli.ch/posts/2013/2013-10-17-node-monitor-pm2.html
- https://coderwall.com/p/igdqyw
- http://revdancatt.com/2013/09/17/node-day-1-getting-the-server-installing-node-and-pm2/
- https://medium.com/tech-talk/e7c0b0e5ce3c