简体   繁体   中英

ENV variables within cloud run server are no accessible

So,

  1. I am using NUXT
  2. I am deploying to google cloud run
  3. I am using dotenv package with a.env file on development and it works fine.

I use the command process.env.VARIABLE_NAME within my dev server on Nuxt and it works great, I make sure that the.env is in git ignore so that it doesnt get uploaded.

However, I then deploy my application using the google cloud run... I make sure I go to the Enviroments tab and add in exactly the same variables that are within the.env file.

在此处输入图像描述

However, the variables are coming back as "UNDEFINED".

I have tried all sorts of ways of fixing this, but the only way I can is to upload my.env with the project - which I do not wish to do as NUXT exposes this file in the client side js.

Anyone come across this issue and know how to sort it out?

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

Kind Regards, Josh

Finally I found a solution.

I was using Nuxt v1.11.x From version equal to or greater than 1.13, Nuxt comes with Runtime Configurations, and this is what you need.

in your nuxt.config.js :

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

then, you can access like:


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

More details here

To insert value to the environment variables is not required to do it in the Dockerfile. You can do it through the command line at the deployment time.

For example here is the Dockerfile that I used.

FROM node:10

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm","start"]

this is the app.js file

    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}`))

To deploy use a script like this:

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

And the output will be like the following:

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

You can check more detail on the official documentation: https://cloud.google.com/run/docs/configuring/environment-variables#command-line

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM