Nuxt3:如何在 docker build 之后通过 process.env 设置运行时环境变量

问题描述 投票:0回答:1

如果我使用 docker-compose 和环境变量在本地构建和运行它,我的 nuxt3 应用程序运行良好。

但是当我将构建的 docker 镜像推送到我的远程生产环境时,我无法在 runtimeConfig 中应用生产环境变量。可能是因为 process.env["SECRET_KEY"] 在构建阶段被替换为“真正的密钥”。

如果我将环境变量命名为 NUXT_PUBLIC_XXXX / NUXT_XXXX,即使在构建映像后我也可以更新 runtimeConfig。

但是当我使用 PaaS 服务进行生产部署时,我无法控制变量命名。因此,我无法为我的远程环境动态提供正确的运行时配置 -> 我总是以在本地机器上的构建阶段设置的本地值结束。(请参见下面示例中的 clientID)

有没有一种方法可以通过 process.env["custom env name"] 设置运行时配置,即使在构建图像之后? 或者您有任何其他想法如何动态提供运行时配置? (我想避免为每个环境构建单独的容器

非常感谢您的投入。非常感谢任何帮助!

#nuxt.config.ts
...
runtimeConfig: {

#in production ENVs are accessible under the key "VCAP_SERVICES", if key is not present the local development env is applied
clientId: process.env["VCAP_SERVICES"] ? process.env["VCAP_SERVICES"]["clientId"] : process.env["UAA_CLIENT_ID"],
secretKey: process.env["NUXT_SECRET_KEY"]

  public: {
    backendApi: 'http://127.0.0.1:5000',  // will be overridden by NUXT_PUBLIC_BACKEND_API environment variable
    environment: "production", // will be overridden by NUXT_PUBLIC_ENVIRONMENT environment variable
        }
    },
node.js docker vue.js environment-variables nuxt.js
1个回答
0
投票

可以在运行时提供环境变量(在构建 docker 镜像之后),但前提是遵守以下要求(参见 Nuxt Docs

运行时配置值在运行时自动替换为匹配的环境变量。有两个关键要求。

  1. 你想要的变量必须在你的 nuxt.config 中定义。这可确保任意环境变量不会暴露给您的应用程序代码。
  2. 只有特别命名的环境变量才能覆盖运行时配置属性。也就是说,一个以 NUXT_ 开头的大写环境变量,它使用 _ 来分隔键和大小写变化..
© www.soinside.com 2019 - 2024. All rights reserved.