pm2 - PM2:在单个服务器上部署多个环境?
问题描述
我正在使用 PM2 进行部署/流程管理,并且该应用程序处理大量 DNS 任务,因此如果我从远程服务器运行开发应用程序,并在保存时使用 Rsyncing 或 SFTPing(仍在整理),这是最简单的。
在这种情况下,开发应用程序与生产应用程序位于同一 VM 上是理想的情况。但是,PM2 部署配置文件 ( ecosystem.config.js
) 的结构似乎无法实现这一点,因为当我运行时pm2 deploy development
,开发版本超过了 VM 上的生产过程。
这是我所拥有的:
module.exports = {
apps: [
{
name: "APP NAME",
script: "app.js",
env_development: {
NODE_ENV: "development",
...
},
env_production: {
NODE_ENV: "production",
...
}
}
],
deploy: {
production: {
user: "user",
host: ["123.123.123.123"],
ref: "origin/master",
repo: "git@gitlab.com:me/repo.git",
path: "/var/www/app",
"post-deploy":
"npm install && pm2 reload ecosystem.config.js --env production"
},
development: {
user: "user",
host: ["123.123.123.123"],
ref: "origin/master",
repo: "git@gitlab.com:me/repo.git",
path: "/var/www/app-dev",
"post-deploy":
"npm install && pm2 reload ecosystem.config.js --env development"
}
}
};
对实现这一目标的最佳方法有什么想法吗?
解决方案
引用此PR后,我认为您应该能够将append_env_to_name: true
其作为属性添加到apps
数组中的对象中ecosystem.config.js
:
所以你更新的ecosystem.config.js
文件如下:
module.exports = {
apps: [
{
name: "APP NAME",
append_env_to_name: true // <===== add this line
script: "app.js",
env_development: {
NODE_ENV: "development",
...
},
env_production: {
NODE_ENV: "production",
...
}
}
],
deploy: {
production: {
user: "user",
host: ["123.123.123.123"],
ref: "origin/master",
repo: "git@gitlab.com:me/repo.git",
path: "/var/www/app",
"post-deploy":
"npm install && pm2 reload ecosystem.config.js --env production"
},
development: {
user: "user",
host: ["123.123.123.123"],
ref: "origin/master",
repo: "git@gitlab.com:me/repo.git",
path: "/var/www/app-dev",
"post-deploy":
"npm install && pm2 reload ecosystem.config.js --env development"
}
}
};