PM2 + Meteor 环境设置

9
我正在尝试设置Meteor使用pm2 (https://github.com/Unitech/pm2) 作为node进程监视器,而不是forever。我一直没有成功地让pm2进程看到Meteor应用程序所需的环境变量。
以下是我的过程:
export MONGO_URL="mongodb://localhost:27017/meteor"
export PORT=4000
export ROOT_URL="https://beta.example.com/"
pm2 start main.js --name MyMeteorApp

从 pm2 的错误日志中,我看到我的 Meteor 应用程序抱怨找不到 MONGO_URL

我需要按照特定的方式进行导出才能与 pm2 协同工作吗?

5个回答

9
您可以创建一个process.json(PM2舰队配置文件)文件,您可以在其中指定环境变量。
例如:
{
  "apps": [
    {
      "name": "MyMeteorApp",
      "script": "./main.js",
      "log_date_format": "YYYY-MM-DD",
      "exec_mode": "fork_mode",
      "env": {
        "PORT": 4000,
        "MONGO_URL": "mongodb://localhost:27017/meteor",
        "ROOT_URL": "https://beta.example.com/"
      }
    }
  ]
}

for start: pm2 start processes.json


1
有没有办法将 meteor --settings 添加到这里? - Johhan Santana
@JohhanSantana 是的,像这样在其他环境变量中插入一个环境变量: "METEOR_SETTINGS": { 'private': { ... }, 'public': { ... } } - Harry Adel

2

请前往查看pm2-meteor。它可以帮助您生成pm2-env.json。

$ npm i -g pm2-meteor
$ cd myMeteorProject
$ pm2-meteor --settings meteor-settings.json

2

截至2018年

我曾经遇到过这样的大问题,但现在一切都已经解决了。

当您使用PM2对Meteor应用程序进行自定义生产时,只需将文件process.json放置在bundle目录中,并运行以下命令:

pm2 start process.json

以下是我想在生产环境中传递为 METEOR_SETTINGS 的文件 process.json 的参数。
{
  "apps": [
    {
      "name": "My APP",
      "script": "./main.js",
      "log_date_format": "YYYY-MM-DD",
      "exec_mode": "fork_mode",
      "env": {
        "PORT": 3000,
        "MONGO_URL": "mongodb://username:password@127.0.0.1:27017/dbname",
        "ROOT_URL": "http://hostname/",
        "METEOR_SETTINGS": {
            "MAIL_URL": "smtps://<your username>:<your password>@smtp.gmail.com:465",
            "AUTHKEY": "185938A0asmD231231231231e4992",
            "HOSTNAME": "some example",
            "public": {
                "COMPANY_NAME": "Some Company Name"
            }
        }
      }
    }
  ]
}

因此,在上面的代码中,您可以看到我如何设置METEOR_SETTINGS


能否从项目文件settings.json的根目录中检索设置并使用PM2加载它们?是否需要在process.json中定义Meteor设置? - Yajairo87
@yajairo:你可以试试,我也没有试过。 - Ankur Soni
嗨@AnkurSoni - 你需要修复你的METEOR_SETTINGS - 你把它放在了名为public的部分,但忘记把其他内容放在名为private的部分。干杯 - Andy Lorenz

1

使用pm2有点奇怪。但是像这样的内容可以起作用。

pm2 kill
MONGO_URL="mongodb://localhost:27017/meteor" PORT=4000 ROOT_URL="https://beta.example.com/" pm2 start app.js --name MyMeteorApp

这是因为pm2将所有内容包装成一个新的进程,无法看到原始环境变量。我认为也有一种方法可以将环境变量放入JSON文件中,但我不确定具体方法,因为文档有点空洞。

-3

经过一番搜索,我找到了正确的答案。在pm2中,任何你放置在JSON任务定义中且不是保留关键字的内容都会被导出为环境变量,供你在pm2内运行的进程中使用。


什么变量名? - Joaquín L. Robles
请提供一个示例,说明将JSON文件放置在任务定义中的情况。否则,我不会撤销对此答案的负面评价。 - Yajairo87

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接