Skip to content

ref: перейти на встроенную шаблонизацию nginx (NGINX_ENVSUBST_FILTER) вместо ручного command #13

Description

@oshliaer

Задача

Убрать ручной 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).

Предлагаемая реализация

  1. Удалить строку command: из сервиса nginx.
  2. Добавить 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.)
  3. Проверить, что итоговый /etc/nginx/conf.d/default.conf идентичен текущему и $host/$upstream_site_2 не затираются.

Осторожно

Механизм обслуживает боевой DOMAIN_1 (cloud). Менять только после проверки на стенде/аккуратного деплоя — в PR #12 сознательно не трогали ради минимального диффа и безопасности живого cloud.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions