PM2 部署配置
PM2 不仅仅是一个进程管理工具,它还为 Node.js 应用提供了完整的部署配置选项,帮助开发者自动化部署、管理环境变量以及优化生产环境的配置。通过配置 ecosystem.config.js 文件,开发者可以轻松地管理部署流程、执行自动化操作并确保应用的高可用性。
1. ecosystem.config.js 配置文件
ecosystem.config.js 文件是 PM2 用来管理应用部署和进程配置的核心文件。它包含了应用的启动脚本、环境变量、部署设置等信息。该文件使得部署和管理多个环境变得更加简便。
基本结构
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 部分来管理应用的自动化部署过程,包括代码拉取、依赖安装和应用重启。
部署配置示例
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 使得自动化部署变得简单。你可以使用以下命令来执行不同的部署步骤:
部署命令
初始化部署环境:
bashpm2 deploy ecosystem.config.js production setup该命令会在服务器上设置部署环境,克隆 Git 仓库到指定路径,并创建所需的目录结构。
更新应用代码:
bashpm2 deploy ecosystem.config.js production update该命令会拉取最新的代码更新并同步到目标服务器。
重启应用:
bashpm2 deploy ecosystem.config.js production restart该命令会在应用代码更新后重启应用,确保新的代码生效。
完整部署流程
- 使用
setup命令初始化服务器环境。 - 使用
update命令拉取最新代码并安装依赖。 - 使用
restart命令重启应用,确保应用使用最新的代码。
4. 配置服务器环境变量
在生产环境中,除了配置 NODE_ENV 之外,你可能还需要设置其他环境变量,如数据库连接信息、API 密钥等。可以在 ecosystem.config.js 文件中配置不同环境下的环境变量。
示例:生产环境环境变量配置
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 应用的部署和管理。