Задача
Убрать ручной command с envsubst в docker-compose.yml (сервис nginx) и перейти на встроенную шаблонизацию официального образа nginx.
Контекст
Сейчас в docker-compose.yml:
command: /bin/sh -c "envsubst '$$DOMAIN_1 $$DOMAIN_2' < /etc/nginx/templates/default.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
Официальный образ nginx уже сам обрабатывает /etc/nginx/templates/*.template → /etc/nginx/conf.d/ через docker-entrypoint.d/20-envsubst-on-templates.sh. То есть при текущей конфигурации entrypoint делает лишнюю подстановку (по всем переменным, включая $host), а затем наш command перезатирает результат. Работает, но нестандартно и хрупко.
Предложено в ревью PR #12 (gemini-code-assist).
Предлагаемая реализация
- Удалить строку
command: из сервиса nginx.
- Добавить env-переменную, ограничивающую подстановку только нашими доменами, чтобы не повредить внутренние переменные nginx (
$host, $remote_addr, $upstream_site_2 и т.п.):
environment:
- DOMAIN_1
- DOMAIN_2
- NGINX_ENVSUBST_FILTER=^DOMAIN_
(NGINX_ENVSUBST_FILTER — POSIX-regex по именам переменных; ^DOMAIN_ матчит DOMAIN_1/DOMAIN_2.)
- Проверить, что итоговый
/etc/nginx/conf.d/default.conf идентичен текущему и $host/$upstream_site_2 не затираются.
Осторожно
Механизм обслуживает боевой DOMAIN_1 (cloud). Менять только после проверки на стенде/аккуратного деплоя — в PR #12 сознательно не трогали ради минимального диффа и безопасности живого cloud.
Задача
Убрать ручной
commandсenvsubstвdocker-compose.yml(сервисnginx) и перейти на встроенную шаблонизацию официального образа nginx.Контекст
Сейчас в
docker-compose.yml:Официальный образ nginx уже сам обрабатывает
/etc/nginx/templates/*.template→/etc/nginx/conf.d/черезdocker-entrypoint.d/20-envsubst-on-templates.sh. То есть при текущей конфигурации entrypoint делает лишнюю подстановку (по всем переменным, включая$host), а затем нашcommandперезатирает результат. Работает, но нестандартно и хрупко.Предложено в ревью PR #12 (gemini-code-assist).
Предлагаемая реализация
command:из сервисаnginx.$host,$remote_addr,$upstream_site_2и т.п.):NGINX_ENVSUBST_FILTER— POSIX-regex по именам переменных;^DOMAIN_матчитDOMAIN_1/DOMAIN_2.)/etc/nginx/conf.d/default.confидентичен текущему и$host/$upstream_site_2не затираются.Осторожно
Механизм обслуживает боевой
DOMAIN_1(cloud). Менять только после проверки на стенде/аккуратного деплоя — в PR #12 сознательно не трогали ради минимального диффа и безопасности живого cloud.