diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index c8a3d0ef..b0c6e582 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -683,6 +683,20 @@ services: # Пустой дефолт = fail-open (backend не проверяет) → ничего не ломается до # провижининга. Значение задаётся руками в /opt/gendesign/.env на VPS. TRADEIN_INTERNAL_AUTH_SECRET: ${TRADEIN_INTERNAL_AUTH_SECRET:-} + # #3059: какие site-блоки импортирует Caddyfile (`import + # caddy/sites/{$CADDY_SITES:*}.caddy`). Плейсхолдер раскрывает САМ Caddy + # из окружения СВОЕГО контейнера, а не compose из файла окружения хоста — + # поэтому переменную обязательно пробрасывать сюда. Без этой строки + # значение с хоста до Caddy не доходит и всегда работает дефолт `*`, + # то есть оба файла сразу, а разделение хостов молча не срабатывает: + # после переезда (#3057) Caddy на продовом хосте начал бы выпускать + # сертификаты для obsidian/errors/git, чей DNS остаётся на + # инфраструктурном хосте — HTTP-01 падает, а Let's Encrypt считает + # неудачи (5 на домен в час). + # Дефолт `*` = сегодняшнее поведение бит в бит: пока переменная не задана + # ни на одном хосте, импортируются оба файла, как и до этой строки. + # В окне: на продовом хосте CADDY_SITES=apps, на инфраструктурном=infra. + CADDY_SITES: ${CADDY_SITES:-*} volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - ./caddy/users.caddy.snippet:/etc/caddy/caddy/users.caddy.snippet:ro