Один фронтенд на все окружения
Настройки в env.js при старте контейнера вместо переменных, вшитых в сборку. Один образ на все клубы.
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' };