1.在没有 root 的情况下监听 80 端口

一般规则是您不应以 root 身份运行 node。然而,只有 root 可以绑定到小于 1024 的端口。这就是 authbind 的用武之地。Authbind 允许非 root 用户绑定到小于 1024 的端口。替换%user%为将运行的用户pm2

  1. sudo apt-get install authbind
  2. sudo touch /etc/authbind/byport/80
  3. sudo chown %user% /etc/authbind/byport/80
  4. sudo chmod 755 /etc/authbind/byport/80

您还应该为运行pm2配置文件的用户添加一个别名,例如~/.bashrc~/.zshrc(注意您将需要运行source ~/.bashrcsource ~/.zshrc立即运行):

  1. +alias pm2='authbind --deep pm2'

最后确保pm2更新为authbind

  1. authbind --deep pm2 update

或者只是pm2 update将别名添加到用户的个人资料中。

现在您可以使用 PM2 启动应用程序,无需 root 即可绑定到端口 80!

2.同一台服务器上有多个 PM2

客户端和守护进程通过 $HOME/.pm2/pub.sock 和 $HOME/.pm2/rpc.sock 中可用的套接字文件进行通信。

您可以通过更改PM2_HOME环境变量来启动多个 PM2 实例。

  1. PM2_HOME='.pm2' pm2 start echo.js --name="echo-node-1"
  2. PM2_HOME='.pm3' pm2 start echo.js --name="echo-node-2"

这将启动两个不同的 PM2 实例。要列出每个不同实例管理的进程,请执行以下操作:

  1. PM2_HOME='.pm2' pm2 list
  2. PM2_HOME='.pm3' pm2 list

3.在 no deamon 中启动 PM2

确保在以非守护进程模式 ( pm2 kill)启动 PM2 之前杀死任何 PM2 实例。

启动 PM2 而不进行守护进程:

  1. pm2 start app.js --no-daemon

pm2-runtime在 PM2 安装时还默认安装了 CLI ,它是 Node.js 二进制文件的直接替代品。

4.无状态应用

您的生产应用程序应该是无状态的,这是一条通用规则。每个数据、状态、websocket 会话、会话数据都必须通过任何类型的数据库或 PUB/SUB 系统共享。

否则,您的应用程序将很难在同一台服务器上扩展并跨越多个服务器。

例如,您可以使用connect-redis来共享会话。

我们还建议您遵循 12 因子约定:http : //12factor.net/

5.在服务器上设置 pm2

如何使用 pm2 在 Ubuntu VPS 上设置 Node.js 生产环境。

6.日志和PID文件

默认情况下,日志(错误和输出)、pid 文件、转储和 PM2 日志位于~/.pm2/

  1. .pm2/
  2. ├── dump.pm2
  3. ├── custom_options.sh
  4. ├── pm2.log
  5. ├── pm2.pid
  6. ├── logs
  7. └── pids

7.启用 Harmony ES6

--node-args选项允许向节点解释器添加参数。要为进程启用和谐,请键入以下命令:

  1. pm2 start my_app.js --node-args="--harmony"

在 JSON 声明中:

  1. [{
  2. "name" : "ES6",
  3. "script" : "es6.js",
  4. "node_args" : "--harmony"
  5. }]

8.CoffeeScript

8.1.CoffeeScript v1

  1. pm2 install coffee-script
  2. pm2 start app.coffee

8.2.CoffeeScript v2

  1. pm2 install coffeescript
  2. pm2 start app.coffee

就这样!

9.管道 JSON

拉取请求:

read -d ‘’ myjson <<_EOF [{ “name” : “app1”, “script” : “/home/projects/pm2nodetest/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 - ```

10.流程标题

您可以在PROCESS_FILE使用 PM2 启动应用程序时指定 env 变量,它将设置一个进程标题。在尝试从流程中获取特定数据时,它非常有用,例如您可以使用ps -fC name.

11.转译器

请参阅在PM2 中使用转译器教程。

12.来自问题的用户提示

13.外部资源和文章