【问题标题】:ENV variables within cloud run server are no accessible云运行服务器中的 ENV 变量不可访问
【发布时间】:2020-09-22 16:09:46
【问题描述】:

所以,

  1. 我正在使用 NUXT
  2. 我正在部署到谷歌云运行
  3. 我正在使用带有 .env 文件的 dotenv 包进行开发,它工作正常。

我在 Nuxt 上的开发服务器中使用命令 process.env.VARIABLE_NAME,它运行良好,我确保 .env 在 git ignore 中,这样它就不会被上传。

但是,我随后使用 google cloud run 部署我的应用程序...我确保转到环境选项卡并添加与 .env 文件中完全相同的变量。

但是,变量返回为“未定义”。

我已经尝试了各种方法来解决这个问题,但我唯一能做的就是将我的 .env 与项目一起上传——我不希望这样做,因为 NUXT 在客户端 js 中公开了这个文件。

有人遇到过这个问题并知道如何解决吗?

DOCKERFILE:

# base node image
FROM node:10

WORKDIR /user/src/app

ENV PORT 8080
ENV HOST 0.0.0.0

COPY package*.json ./

RUN npm install

# Copy local nuxt code to the container
COPY . .

# Build production app
RUN npm run build

# Start the service
CMD npm start

亲切的问候, 乔什

【问题讨论】:

  • 请附上您的Dockerfile 和一个最小示例,以便我们尝试重现。
  • 为你添加了我的 docker 文件!
  • 我想补充一点,我尝试过这样做:ENV PL_APP_SECRET=123 和 ENV PL_APP_SECRET 123 在 docker 内但仍然没有运气!
  • 你有什么东西可以加载 dotenv 文件并将值写入 env var 吗?如果是这样,这个过程是否清除了所有现有的 env var 是 dotenv 文件不存在?
  • 我的 nuxt 配置 .js 顶部有这个? const env = require('dotenv').config() 可以吗?

标签: node.js google-cloud-platform environment-variables nuxt.js google-cloud-run


【解决方案1】:

向环境变量插入值不需要在 Dockerfile 中进行。您可以在部署时通过命令行来完成。

例如这里是我使用的 Dockerfile。

FROM node:10

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm","start"]

这是 app.js 文件

    const express = require('express')
    const app = express()
    const port = 8080

    app.get('/',(req,res) => {
        const envtest = process.env.ENV_TEST;
        res.json({message: 'Hello world',
                  envtest});
    });

app.listen(port, () => console.log(`Example app listening on port ${port}`))

要部署,请使用如下脚本:

gcloud run deploy [SERVICE] --image gcr.io/[PROJECT-ID]/[IMAGE] --update-env-vars ENV_TEST=TESTVARIABLE

输出将如下所示:

{"message":"Hello world","envtest":"TESTVARIABLE"}

您可以在官方文档中查看更多详细信息: https://cloud.google.com/run/docs/configuring/environment-variables#command-line

【讨论】:

    【解决方案2】:

    终于找到了解决办法。

    我使用的是 Nuxt v1.11.x 从等于或大于 1.13 的版本开始,Nuxt 带有运行时配置,这就是您所需要的。

    在你的nuxt.config.js:

    export default {
        publicRuntimeConfig: {
           BASE_URL: 'some'
        },
        privateRuntimeConfig: {
           TOKEN: 'some'
        }
    }
    

    然后,您可以像这样访问:

    
    this.$config.BASE_URL || context.$config.TOKEN
    

    更多详情here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-12
      • 2013-03-22
      • 2019-01-29
      • 2021-07-02
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 2016-09-22
      相关资源
      最近更新 更多