Один фронтенд на все окружения

Настройки в env.js при старте контейнера вместо переменных, вшитых в сборку. Один образ на все клубы.

1 мин чтенияфронтендDockernginx

Vite подставляет import.meta.env при сборке. Удобно, пока окружение одно. Когда клубов восемнадцать, на каждый пришлось бы собирать свой образ.

Решение - читать настройки при запуске. Контейнер перед стартом nginx пишет маленький файл:

#!/bin/sh
# docker-entrypoint.sh: настройки клуба из переменных окружения контейнера
cat > /usr/share/nginx/html/env.js <<EOF
window.__ENV = {
  API_URL: "${API_URL}",
  TENANT: "${TENANT_ID}",
  THEME: "${THEME:-default}"
};
EOF
exec nginx -g 'daemon off;'

Страница подключает его раньше приложения:

<script src="/env.js"></script>
<script type="module" src="/assets/index.js"></script>

И главное - запретить кэш, иначе после смены настроек браузер будет помнить старые:

location = /env.js {
    add_header Cache-Control "no-store";
}

В коде - одна точка входа с запасным значением для локальной разработки:

export const env = (window as any).__ENV ?? { API_URL: 'http://localhost:8081' };
Esc

↑↓ выбор Enter открыть