Получить переменную сервера с помощью vite vuejs в докере

У меня есть один и тот же образ докера с моим vuejs (с vite), развернутым в трех разных средах (этап, qa и prod) с kubernetes, в этих трех средах у меня есть одна и та же переменная среды с тремя разными значениями, например: на этапе у меня есть VITE_APP_URL=test1, в qa у меня VITE_APP_URL=test2, а в prod 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;"]

В документации говорится: «Vite предоставляет переменные env в специальном объекте import.meta.env, которые статически заменяются во время сборки». Таким образом, они получают значения, которые у них есть во время сборки. Вы не можете установить их во время выполнения.

Hans Kilian 15.05.2024 20:02
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
1
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Опция 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 .

Спасибо, я использовал вариант 2, и он отлично работает!

martin genot 16.05.2024 21:14

Другие вопросы по теме