使用PM2部署node项目

135 阅读3分钟

安装

npm install pm2@latest -g
# or
yarn global add pm2

启动应用程序

pm2 start app.js

或者启动任何其他应用程序:

pm2 start bashscript.sh
pm2 start python-app.py --watch
pm2 start binary-file -- --port 1520

您可以传递给CLI的一些选项:

# 指定服务名称
--name <app_name>

# 文件更改时观察并重新启动应用程序
--watch

# 设置应用程序重新加载的内存阈值
--max-memory-restart <200MB>

# 指定日志文件
--log <log_path>

# 向脚本传递额外参数
-- arg1 arg2 arg3

# 自动重启之间的延迟
--restart-delay <delay in ms>

# 在日志前添加时间
--time

# 不自动重启应用程序
--no-autorestart

# 指定强制重启的cron
--cron <cron_pattern>

# 附加到应用程序日志
--no-daemon

管理进程

pm2 restart app_name
pm2 reload app_name
pm2 stop app_name
pm2 delete app_name

代替app_name你可以通过:

  • all对所有流程进行操作
  • id对特定的进程id进行操作
# 列出由PM2管理的所有应用程序的状态
pm2 [list|ls|status]

# 要实时显示日志
pm2 logs

# 旧日志
pm2 logs --lines 200

# 仪表盘
pm2 monit

集群模式

对于Node.js应用程序,PM2包括一个自动负载平衡器,它将在每个衍生进程之间共享所有HTTP[s]/Websocket/TCP/UDP连接。

要以集群模式启动应用程序:

pm2 start app.js -i max

使用配置文件管理应用

创建文件

pm2 ecosystem

这将生成一个ecosystem.config.js文件:

module.exports = {
  apps: [
    {
      name: "app1", // 服务名称
      script: "./index1.js", // 启动文件路径
      cwd: "", // 要启动的应用程序的目录
      instances: 2, // 要启动实例的数量,负载均衡
      watch: true, //是否启动监听
      args: ['test'], // 进程参数
      env: { NODE_ENV: "development" }, // 将出现在您的应用程序中的 env 变量
      env_xxx: {
        NODE_ENV: "xxx", //使用pm2注入xxx变量进行切换
      },
      log_date_format: "YYYY-MM-DD HH:mm Z", //日志时间格式
      error_file: "./log/index-error.log", //错误文件路径
      out_file: "./log/index-out.log", //输出日志文件路径
      max_restarts: 10, //最大重启数
      restart_delay: 4000, //重启延迟时间ms
      autorestart: true, //是否自动重启
      cron_restart: "0 0 3 * * ?", //定时重启 使用cron表达式,每晚3点重启
    },
    {
      name: "app2",
      script: "./index2.js",
    },
  ],
};

启动:

pm2 start ecosystem.config.js

命令集合(官网)

# Fork mode
pm2 start app.js --name my-api # Name process

# Cluster mode
pm2 start app.js -i 0        # Will start maximum processes with LB depending on available CPUs
pm2 start app.js -i max      # Same as above, but deprecated.
pm2 scale app +3             # Scales `app` up by 3 workers
pm2 scale app 2              # Scales `app` up or down to 2 workers total

# Listing

pm2 list               # Display all processes status
pm2 jlist              # Print process list in raw JSON
pm2 prettylist         # Print process list in beautified JSON

pm2 describe 0         # Display all information about a specific process

pm2 monit              # Monitor all processes

# Logs

pm2 logs [--raw]       # Display all processes logs in streaming
pm2 flush              # Empty all log files
pm2 reloadLogs         # Reload all logs

# Actions

pm2 stop all           # Stop all processes
pm2 restart all        # Restart all processes

pm2 reload all         # Will 0s downtime reload (for NETWORKED apps)

pm2 stop 0             # Stop specific process id
pm2 restart 0          # Restart specific process id

pm2 delete 0           # Will remove process from pm2 list
pm2 delete all         # Will remove all processes from pm2 list

# Misc

pm2 reset <process>    # Reset meta data (restarted time...)
pm2 updatePM2          # Update in memory pm2
pm2 ping               # Ensure pm2 daemon has been launched
pm2 sendSignal SIGUSR2 my-app # Send system signal to script
pm2 start app.js --no-daemon
pm2 start app.js --no-vizion
pm2 start app.js --no-autorestart

更多ecosystem.config.js配置,请访问官网