我的 vuejs (带有 vite)与 kubernetes 部署在 3 个不同的环境(阶段、qa 和 prod)中具有相同的 docker 镜像,在这 3 个环境中我有相同的环境变量,具有 3 个不同的值,例如:在阶段 i有 VITE_APP_URL=test1,在 qa 中我有 VITE_APP_URL=test2,在产品中我有 VITE_APP_URL=test3。在我的代码中,我有这行来检索值:
import.meta.env.VITE_APP_URL
但是当我检查变量时它什么也没有返回..我想知道是否有一种方法可以检索服务器上我前面的环境变量.
这是我的 Dockerfile(如果有帮助的话):
FROM node:20.10 as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# étape de production
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY ./nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
选项1
环境变量被硬编码到
Dockerfile
中。这看起来并不理想。请参阅下面的选项 2。
FROM node:20.10 as build-stage
ENV VITE_APP_URL=test2
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
选项2
拥有一组环境文件,在构建时选择适当的文件。
例如:
🗎
.env-staging
VITE_APP_URL=test1
🗎
.env-qa
VITE_APP_URL=test2
🗎
.env-prod
VITE_APP_URL=test3
修改
Dockerfile
如下:
FROM node:20.10 as build-stage
ARG ENV_FILE
ENV ENV_FILE=${ENV_FILE}
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN cp ${ENV_FILE} .env && \
npm run build
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
现在,您可以使用以下适当的选项来指定适当的环境文件作为构建参数。
docker build --build-arg ENV_FILE=.env-staging -t vite-app .
docker build --build-arg ENV_FILE=.env-qa -t vite-app .
docker build --build-arg ENV_FILE=.env-prod -t vite-app .