教程 pm2 tutorial

PM2 部署配置

PM2 不仅仅是一个进程管理工具,它还为 Node.js 应用提供了完整的部署配置选项,帮助开发者自动化部署、管理环境变量以及优化生产环境的配置。通过配置 ecosystem.config.js 文件,开发者可以轻松地管理部署流程、执行自动化操作并确保应用的高可用性。

1. ecosystem.config.js 配置文件

ecosystem.config.js 文件是 PM2 用来管理应用部署和进程配置的核心文件。它包含了应用的启动脚本、环境变量、部署设置等信息。该文件使得部署和管理多个环境变得更加简便。

基本结构

javascript
module.exports = {
  apps: [
    {
      name: 'my-app',            // 应用名称
      script: './app.js',        // 启动脚本
      instances: 1,              // 启动实例数,适用于单机模式
      exec_mode: 'cluster',      // 使用集群模式(支持负载均衡)
      env: {
        NODE_ENV: 'development', // 开发环境变量
      },
      env_production: {
        NODE_ENV: 'production',  // 生产环境变量
      },
      watch: true,               // 监控文件变动,自动重启应用
      autorestart: true,         // 启用应用崩溃自动重启
      max_memory_restart: '200M', // 当应用使用内存超过 200MB 时自动重启
    },
  ],
};

`

配置说明

  • name:应用的名称。
  • script:启动应用的文件路径。
  • instances:指定应用的实例数,适用于多核 CPU 环境。
  • exec_mode:指定应用的执行模式,cluster 模式适用于负载均衡,fork 模式适用于单实例。
  • env:开发环境的环境变量。
  • env_production:生产环境的环境变量,应用启动时根据环境变量切换。
  • watch:启用文件监控,文件变动时自动重启应用。
  • autorestart:启用应用崩溃自动重启功能。
  • max_memory_restart:内存使用超过指定值时,自动重启应用。

2. 配置部署设置

在 ecosystem.config.js 中,PM2 也支持应用的部署配置。你可以通过配置 deploy 部分来管理应用的自动化部署过程,包括代码拉取、依赖安装和应用重启。

部署配置示例

javascript
module.exports = {
  apps: [
    {
      name: 'my-app',
      script: './app.js',
      env_production: {
        NODE_ENV: 'production',
      },
    },
  ],
  deploy: {
    production: {
      user: 'deploy',               // 部署服务器的用户名
      host: ['your-server.com'],    // 目标服务器的 IP 地址或域名
      ref: 'origin/master',         // Git 仓库的分支
      repo: '[email protected]:yourusername/your-repo.git', // Git 仓库的地址
      path: '/var/www/my-app',      // 应用在服务器上的目标路径
      'pre-deploy': 'echo "Preparing for deployment..."', // 部署前执行的脚本
      'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env production', // 部署后执行的脚本
    },
  },
};

配置说明

  • user:指定在服务器上的用户(通常是 deploy 用户)。
  • host:列出目标服务器的 IP 地址或域名。
  • ref:指定 Git 分支,通常为 origin/master。
  • repo:Git 仓库的地址,PM2 会从这个仓库拉取代码。
  • path:应用部署到目标服务器上的路径。
  • pre-deploy:部署前需要执行的命令或脚本,可以用于初始化环境。
  • post-deploy:部署后执行的命令,通常用于安装依赖和重启应用。

3. 自动化部署流程

通过配置 deploy 部分,PM2 使得自动化部署变得简单。你可以使用以下命令来执行不同的部署步骤:

部署命令

  1. 初始化部署环境:
bash
   pm2 deploy ecosystem.config.js production setup

该命令会在服务器上设置部署环境,克隆 Git 仓库到指定路径,并创建所需的目录结构。

  1. 更新应用代码:
bash
   pm2 deploy ecosystem.config.js production update

该命令会拉取最新的代码更新并同步到目标服务器。

  1. 重启应用:
bash
   pm2 deploy ecosystem.config.js production restart

该命令会在应用代码更新后重启应用,确保新的代码生效。

完整部署流程

  1. 使用 setup 命令初始化服务器环境。
  2. 使用 update 命令拉取最新代码并安装依赖。
  3. 使用 restart 命令重启应用,确保应用使用最新的代码。

4. 配置服务器环境变量

在生产环境中,除了配置 NODE_ENV 之外,你可能还需要设置其他环境变量,如数据库连接信息、API 密钥等。可以在 ecosystem.config.js 文件中配置不同环境下的环境变量。

示例:生产环境环境变量配置

javascript
module.exports = {
  apps: [
    {
      name: 'my-app',
      script: './app.js',
      env_production: {
        NODE_ENV: 'production',
        DB_HOST: 'your-database-host',
        DB_USER: 'your-database-user',
        DB_PASSWORD: 'your-database-password',
      },
    },
  ],
};

在这个配置中,我们为生产环境添加了 DB_HOST、DB_USER 和 DB_PASSWORD 等环境变量,这些变量可以在应用中被访问并用于数据库连接。

5. 总结

PM2 的部署配置功能提供了强大的支持,能够帮助开发者轻松管理多个环境和部署流程。通过合理配置 ecosystem.config.js 文件,开发者可以在生产环境中管理环境变量、自动化部署、安装依赖和重启应用。PM2 还支持与 Git 集成,自动化拉取代码更新,并通过简单的命令实现完整的部署流程,极大简化了 Node.js 应用的部署和管理。