![](/img/trans.png)
[英]How to access PM2 logs when I run my Node.Js app image using AWS ECS
[英]Using PM2, how can I deploy my node.js app to multiple environments and ports on the same server?
我有一個使用PM2部署的節點應用程序的ecosystem.json文件。
我已經嘗試過一些不同的方式配置它,但沒有運氣實現我的目標是:
無論我首先運行哪個部署命令都會發生什么。
因此,如果我執行pm2 deploy production
然后pm2 deploy staging
,則只有生產應用程序/端口組合在服務器上運行,反之亦然,如果我切換訂單。
編輯:如果我使用下面的conf,將有2個應用程序在pm2 status
運行,但如果我做netstat
,我只看到第一個端口。 (centos 6)
我覺得我必須遺漏一些明顯的東西。 這是我的ecosystem.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
}
}
}
}
在這里回答我自己的問題。 雖然不是一個完美的解決方案,但我完成這個(現在)的方法是使用2個獨立的ecosystem.json文件,每個環境一個。 我有用於staging和ecosystem-prod.json設置的ecosystem.json設置用於生產。
所以現在要部署到分段我做一個標准: pm2 deploy staging
和生產我做了一個更多的羅嗦: pm2 deploy ecosystem-prod.json production
顯然不理想,但除非有人告訴我,否則可能是在不同端口的同一個盒子上進行此操作的唯一方法。
你的nodejs版本是什么?
我可以看到你在群集模式下使用1個實例運行pm2。
集群模式下的Pm2使用nodejs的custer模塊,直到版本0.12.x才開發得非常有效。
如果是這種情況,您的節點版本<0.12.x,那么這是一個已知問題。
升級您的節點版本,問題將得到解決。
您可以使用shell環境變量,然后在pm2配置文件中使用javascript。 例如,如果您的配置文件有......
"apps": [
{
"script": "app/server.js",
"PORT" : process.env.NODE_ENV == "development" ? 8888 : 9999,
"name": "MemsharpWeb-" + process.env.NODE_ENV,
你從命令行運行pm2就像這樣
NODE_ENV=production pm2 start config.json
端口號將設置為9999。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.