diff --git a/Caddyfile b/Caddyfile index a43e8e9d..f5208996 100644 --- a/Caddyfile +++ b/Caddyfile @@ -504,3 +504,19 @@ git.gendsgn.ru { } } # Test deploy flow 2026-05-15T21:43:32Z + +# ───────────────────────────────────────────────────────────────────────────── +# Локальные site-блоки, которых не может быть в git. +# +# Мотив: garmin.gendsgn.ru (личный remote MCP на этом же VPS). Апстрим-сервер +# аутентификации не имеет вовсе, а claude.ai custom connector ходит на голый URL +# без кастомных заголовков — единственный доступный рубеж это секрет в пути. +# Секрет в git класть нельзя, а блок, вписанный руками прямо сюда, сносится +# первым же деплоем (`git reset --hard origin/main`; 2026-08-16 так и вышло — +# контейнер остался жив, но хост пропал вместе со своим сертификатом). +# +# Поэтому: сам блок лежит на VPS как untracked `caddy/local/*.caddy` (reset +# --hard untracked не трогает), а в репозитории живёт только этот import. +# Пустой glob для Caddy не ошибка — `caddy validate` проходит, на машинах без +# локальных блоков строка просто ничего не делает. +import caddy/local/*.caddy diff --git a/caddy/local/.gitignore b/caddy/local/.gitignore new file mode 100644 index 00000000..f4e427bf --- /dev/null +++ b/caddy/local/.gitignore @@ -0,0 +1,4 @@ +# Локальные site-блоки Caddy с секретами (см. import в конце Caddyfile). +# Кладутся руками на VPS и намеренно не версионируются — в git только каталог. +* +!.gitignore diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 8ee650cb..ed8408d2 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -423,6 +423,10 @@ services: volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - ./caddy/users.caddy.snippet:/etc/caddy/caddy/users.caddy.snippet:ro + # Untracked локальные site-блоки (см. import в конце Caddyfile). Каталог + # держится в git через caddy/local/.gitignore — иначе docker создал бы + # отсутствующий bind-source сам, root-owned пустышкой. + - ./caddy/local:/etc/caddy/caddy/local:ro - ./preview:/srv/preview:ro - caddy_data:/data - caddy_config:/config