fix(infra/caddy): site-блоки с секретами переживают деплой — import caddy/local/*.caddy
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 59s
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 59s
Деплой делает `git reset --hard origin/main`, поэтому любой site-блок, вписанный руками в /opt/gendesign/Caddyfile, живёт до первого пуша в main. 16.08 так и вышло с garmin.gendsgn.ru: контейнер остался healthy, а хост исчез из конфига — TLS-хендшейк стал падать `alert internal error`, потому что сертификат для него Caddy больше не держит. Класть такой блок в git нельзя: у него единственный рубеж аутентификации — секрет в пути URL (апстрим-MCP аутентификации не имеет, а claude.ai connector кастомные заголовки не шлёт). Развязка: в репозитории только `import caddy/local/*.caddy` и сам каталог (держится .gitignore'ом), файлы с секретами лежат на VPS untracked — reset --hard их не трогает. Пустой glob для Caddy не ошибка, `caddy validate` проходит, на машинах без локальных блоков import — no-op. Проверено `caddy validate` 2.11.4 на VPS: и с пустым каталогом, и с реальным блоком garmin — Valid configuration.
This commit is contained in:
parent
215b78a348
commit
f30820bb9a
3 changed files with 24 additions and 0 deletions
16
Caddyfile
16
Caddyfile
|
|
@ -504,3 +504,19 @@ git.gendsgn.ru {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# Test deploy flow 2026-05-15T21:43:32Z
|
# 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
|
||||||
|
|
|
||||||
4
caddy/local/.gitignore
vendored
Normal file
4
caddy/local/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
# Локальные site-блоки Caddy с секретами (см. import в конце Caddyfile).
|
||||||
|
# Кладутся руками на VPS и намеренно не версионируются — в git только каталог.
|
||||||
|
*
|
||||||
|
!.gitignore
|
||||||
|
|
@ -423,6 +423,10 @@ services:
|
||||||
volumes:
|
volumes:
|
||||||
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
||||||
- ./caddy/users.caddy.snippet:/etc/caddy/caddy/users.caddy.snippet: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
|
- ./preview:/srv/preview:ro
|
||||||
- caddy_data:/data
|
- caddy_data:/data
|
||||||
- caddy_config:/config
|
- caddy_config:/config
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue