我应该如何使环境变量可用于我的网络应用程序?

How should I make environment variables available to my web app?

OS:Ubuntu 20.04 LTS

我正在尝试使用 Keter 部署 Web 应用程序,该应用程序依赖于几个我似乎很难提供的环境变量。

作为参考,我一直在使用 Ubuntu 社区的 this 资源来尝试解决问题。

我将环境变量添加到/etc/environment,文件如下所示:

PATH=...
MY_VAR="something"
MY_VAR2="something-else"

运行 echo $MY_VAR 正确打印 something.

我在上述资源中读到,使用 sudo 时环境变量是“未绑定”的。使用 top 时,我可以看到 keter 进程以 root 运行,所以我认为这可能是问题所在,所以我按照使用 sudo visudo 的说明更改 /etc/sudoers.我在文件底部添加了行 Defaults env_keep += "MY_VAR MY_VAR2"

我重新启动了服务器以确保所有内容都被重新读取并且可以确认 echo $MY_VARsudo echo $MY_VAR 都产生了正确的结果。

不幸的是,这似乎对网络应用程序没有影响,因为日志仍然显示以下错误: my-app: MY_VAR: getEnv: does not exist (no environment variable).

在我项目的 keter.yml 文件中,我的节中有以下几行:

forward-env:
  - MY_VAR
  - MY_VAR2

任何关于如何使这项工作的建议将不胜感激!

看起来 Keter 的 env: YAML 设置的文档记录很差,无法为应用程序提供环境变量设置,因此与其转发它们,不如尝试设置它们。在 keter.yml 中,输入:

env:
  MY_VAR: "something"
  MY_VAR2: "something-else"

并完全摆脱 forward-env: 设置。

或者,这可以放在全局 /opt/keter/etc/keter-config.yaml 文件中,它将指定要传递给所有应用程序的环境变量。