C B*_*uer 4 ubuntu environment-variables amazon-ec2 node.js
我正在构建一个 nodejs api 并将dotenv
包设置为开发依赖项,以将变量加载到process.env
开发人员的本地机器上。
需要注意的是,当我登录我用sudo -i
的操作root
。
我的意图是在部署期间,环境变量将在我的 Ubuntu 主机中设置/etc/environment
,直接加载到进程中,然后应用程序将只针对该配置运行。
为此,我在开头有一行server.js
:
if(process.env.NODE_ENV === 'development') {
logger.info("Loading dotenv for development environment")
require('dotenv').config();
}
Run Code Online (Sandbox Code Playgroud)
并且将指示开发人员将环境变量添加到他们的系统中NODE_ENV
。
现在,在我的 Ubuntu EC2 实例中,我已经设置了/etc/environment
我想要的环境变量(注意这里的 NODE_ENV 是 'dev' 只是为了避免运行 dotenv):
PORT=MYPORT
NODE_ENV=dev
APP_SECRET_KEY='MYSECRET'
APP_DATABASE_LOGIN=MYLOGIN
APP_DATABASE_PASSWORD='MYPASS'
APP_DATABASE_HOST=MYHOST
APP_DATABASE_NAME=MYDB
APP_DATABASE_PORT=MYDBPORT
Run Code Online (Sandbox Code Playgroud)
当我重新启动并运行时,printenv
它们都按文件填充。
我已经设置pm2
为直接从server.js
没有任何额外配置的情况下运行我的应用程序,因为据我所知,它process.env
是从环境变量自动填充的。
但是,当我从 process.env 记录值时,我只会为所有内容获取 null:
logger.info({
connectionConfig: {
host: process.env.APP_DATABASE_HOST
, login: process.env.APP_DATABASE_LOGIN
, port: process.env.APP_DATABASE_PORT
, databaseName: process.env.APP_DATABASE_NAME
}
});
Run Code Online (Sandbox Code Playgroud)
这里的配置有问题吗?
注意:根据下面的答案,我在启动 pm2 后错误地设置了我的环境变量,因此 pm2 缓存丢失了它们
问题是pm2
缓存环境变量。
你必须要做:
# all apps
pm2 restart all --update-env
# specific app
pm2 restart {pid} --update-env
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因不起作用,记录的方式是:
pm2 reload ecosystem.json --update-env
Run Code Online (Sandbox Code Playgroud)
你可以在这里阅读更多:
小智 5
我遇到了同样的问题,这是因为 Visual Studio 和 Visual Studio 代码中的集成终端,除非您在管理模式下运行编辑器,否则它们似乎无法访问任何这些变量。所以要解决这个问题,您只需要在 Amin 模式下启动你的编辑器
归档时间: |
|
查看次数: |
6590 次 |
最近记录: |