【发布时间】:2017-06-14 04:00:03
【问题描述】:
在本地机器上为 App Engine Flex 环境开发 nodejs 时,设置环境变量的最佳方法是什么?如果它们是在 app.yaml 中设置的,那么它们不会在本地开发过程中设置。有没有办法强制这样做,或者我应该使用 dotenv 之类的东西并在 2 个地方跟踪相同的环境变量?
【问题讨论】:
在本地机器上为 App Engine Flex 环境开发 nodejs 时,设置环境变量的最佳方法是什么?如果它们是在 app.yaml 中设置的,那么它们不会在本地开发过程中设置。有没有办法强制这样做,或者我应该使用 dotenv 之类的东西并在 2 个地方跟踪相同的环境变量?
【问题讨论】:
艾丹的建议很好。
由于 GAE 和本地的配置应该不同,我建议选项 2 最好 - 一个单独的 .ENV 用于本地,.YAML 用于 GAE 环境。
不过有一点。我建议添加一个.gcloudignore 文件,如下所示:
.gcloudignore
.git
.gitignore
.env
staging.yaml
node_modules/
【讨论】:
不应将敏感数据(例如 API 密钥)提交到源代码。
我绕过的方法是将.env 文件存储在 Google 存储中。然后您可以使用@google-cloud/storage 在生产环境中下载它(使用prestart 挂钩)和dotenv 将变量加载到内存中。
您可以在此处找到完整指南:http://gunargessner.com/gcloud-env-vars/
PS:我会选择 Aidan 的答案来存储任何不敏感的数据。我自己过去使用过dotenv 令人满意。
与此类似,还有nconf,即gcloud 本身uses for examples 的包。很整洁!
【讨论】:
const dsKey = ds.key(['ENV_VAR', 'production']) 上详细声明环境变量 production,而是使用 NODE_ENV 变量。所以该行现在看起来像这样const dsKey = ds.key(['ENV_VAR', process.env.NODE_ENV]) 这样您就可以通过两个键(开发和生产)将所有配置文件放在那里。
选项 1:
require('dotenv').config({path: '/custom/project/root/app.yaml'})
选项 2:
维护 .env 文件和 .yaml 文件,它们的键相同但值不同(分别为本地和 GAE)。在 app.yaml 中,我确保不通过添加以下行来部署我的 .env 文件:
skip_files : .env
然后,您需要在 ('dotenv').config() 上添加检查,以确保在未检测到 .env 文件时它不会出错或覆盖您的流程变量。
【讨论】: