И мои продукты сочиняют:
аюсь создать контейнер для веб-приложения внешнего интерфейса, и у меня возникают проблемы с выяснением того, как передавать переменные среды. Приложение является угловым, поэтому оно на 100% на стороне клиента.
В типичном бэкэнд-сервисе передача переменных среды проста, поскольку все работает на одном хосте, поэтому бэкэнд-сервис может легко выбрать переменные среды. Однако в веб-приложении все иначе: приложение работает в браузере клиента.
Я хочу настроить свое приложение с помощью переменных среды, поскольку это значительно упрощает развертывание. Все настройки могут быть выполнены вdocker-compose.yml
и нет необходимости поддерживать несколько изображений, по одному для каждой возможной среды. Есть только одно неизменное изображение. Это следует философии применения 12-фактора, как можно найти наhttps://12factor.net/config.
Я создаю свой образ приложения следующим образом:
FROM node:alpine as builder
COPY package.json ./
RUN npm i && mkdir /app && cp -R ./node_modules ./app
WORKDIR /app
COPY . .
RUN $(npm bin)/ng build
FROM nginx:alpine
COPY nginx/default.conf /etc/nginx/conf.d/
RUN rm ,-rf /usr/share/nginx/html/*
COPY --from=builder /app/dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
Вapp/config.ts
, У меня есть:
export const config = {
REST_API_URL: 'http://default-url-to-my-backend-rest-api'
};
В идеале я хочу сделать что-то подобное в моемdocker-compose.yml
:
backend:
image: ...
frontend:
image: my-frontend-app
environment:
- REST_API_URL=http://backend:8080/api
Поэтому я считаю, что я должен изменить этоapp/config.ts
заменитьREST_API_URL
с переменной среды. Поскольку я предпочитаю неизменный образ Docker (поэтому я не хочу делать это вместо во время сборки), я совершенно озадачен тем, как здесь продвигаться. Я считаю, что я должен поддержать, чтобы изменитьapp/config.ts
во время выполнения до запуска прокси nginx. Однако тот факт, что этот файл минимизирован и упакован в веб-пакет, делает его более сложным.
Есть идеи, как справиться с этим?