我有一个用于我使用PM2部署的节点应用程序的生态系统.json 文件。
我尝试了很多不同的方式来配置它,但没有运气实现我的目标,即:
- 能够部署到生产或登台环境(目前都在同一台服务器上)。
- 当部署到一个时,另一个也应该保持运行。
- 2 个不同的环境应该在不同的端口上(prod = 8000,staging = 3000)
发生的事情是我首先运行的部署命令获胜。
因此,如果我这样做pm2 deploy production
,则pm2 deploy staging
只有生产应用程序/端口组合在服务器上运行,反之亦然,如果我切换顺序。
编辑:如果我使用下面的 conf ,将会有 2 个应用程序在运行pm2 status
,但如果我做 a netstat
,我只会看到第一个的端口。(分 6)
我觉得我一定遗漏了一些明显的东西。这是我的生态系统.json 文件,我已经尝试过在顶部有和没有多个应用程序声明。
{
/**
* Here we declare the apps that must be managed by PM2
* All options are listed here:
* https://github.com/Unitech/PM2/blob/master/ADVANCED_README.md#json-app-declaration
*
*/
apps : [
{
"name" : "myapp-staging",
"script" : "app.js",
"instances" : "1",
"error_file" : "/var/log/nodejs/myapp.mydomain.com-staging-err.log",
"out_file" : "/var/log/nodejs/myapp.mydomain.com-staging-out.log",
"pid_file" : "/home/node/myapp.mydomain.com-staging.pid",
"exec_mode" : "cluster_mode",
"env_staging" : {
"NODE_ENV": "staging", "PORT": 3000
},
"env_production" : {
"NODE_ENV": "production", "PORT": 8000
}
},
{
"name" : "myapp-production",
"script" : "app.js",
"instances" : "1",
"error_file" : "/var/log/nodejs/myapp.mydomain.com-staging-err.log",
"out_file" : "/var/log/nodejs/myapp.mydomain.com-staging-out.log",
"pid_file" : "/home/node/myapp.mydomain.com-staging.pid",
"exec_mode" : "cluster_mode",
"env_production" : {
"NODE_ENV": "production", "PORT": 8000
}
}
],
/**
* PM2 help you to deploy apps over your servers
* For more help go to :
* https://github.com/Unitech/PM2/blob/master/ADVANCED_README.md#deployment-pm2--090
*/
deploy : {
production : {
user : "node",
host : "node01.mydomain.com",
ref : "origin/master",
repo : "git@bitbucket.org:mydomain/mydomain-myapp.git",
path : "/var/production/myapp.mydomain.com-production/",
"post-deploy" : "npm prune && npm install -l && pm2 startOrGracefulReload ecosystem.json --env production",
env : {
NODE_ENV: "production",
PORT: 8000
}
},
staging : {
user : "node",
host : "node01.mydomain.com",
ref : "origin/master",
repo : "git@bitbucket.org:mydomain/mydomain-myapp.git",
path : "/var/production/myapp.mydomain.com-staging/",
"post-deploy" : "npm prune && npm install -l && pm2 startOrGracefulReload ecosystem.json --env staging",
env : {
NODE_ENV: "staging",
PORT: 3000
}
}
}
}