fix(infra): restore git.gendsgn.ru block in Caddyfile #221

Merged
lekss361 merged 1 commit from fix/caddyfile-add-git-block into main 2026-05-16 17:02:06 +00:00
Owner

🔴 Prod incident

git.gendsgn.ru returned TLS alert internal error 80 → users couldn't reach Forgejo. Hotfix уже применён вручную на VPS, этот PR делает его permanent.

Root cause

Forgejo migration 2026-05-16 добавил блок git.gendsgn.ru { reverse_proxy forgejo:3000 } вручную в /opt/gendesign/Caddyfile, но не закоммитил в repo. deploy.yml делает git reset --hard origin/main → при первом triggered deploy (#205 GlitchTip — изменил Caddyfile → попал в path-trigger Caddyfile) ручной блок был стёрт. Caddy reload → нет блока для git.gendsgn.ru → handshake fail.

Fix

Добавляет блок в repo Caddyfile (после errors.gendsgn.ru):

git.gendsgn.ru {
    encode zstd gzip
    reverse_proxy forgejo:3000

    log {
        output file /var/log/caddy/git.gendsgn.ru.log
    }
}
  • forgejo:3000 — контейнер из forgejo-migration/docker-compose.yml, network gendesign_default (shared)
  • Forgejo HTTP default port 3000
  • Logs в отдельный файл — consistency с errors.gendsgn.ru block

Test plan

  • Hotfix вручную добавлен на VPS + caddy reloadcurl -sI https://git.gendsgn.ru/ returns HTTP/2 200
  • Этот PR merged → next deploy → Caddyfile содержит блок → блок переживёт
  • (optional follow-up) Добавить smoke test для git.gendsgn.ru в qa-tester чтобы ловить regression

Why fast-track

Prod 500 (теперь восстановлен через hotfix), но без этого PR следующий любой push в Caddyfile/docker-compose снова уронит.

Closes: prod down incident 2026-05-16 ~16:30Z

## 🔴 Prod incident `git.gendsgn.ru` returned TLS alert internal error 80 → users couldn't reach Forgejo. Hotfix уже применён вручную на VPS, этот PR делает его permanent. ## Root cause Forgejo migration 2026-05-16 добавил блок `git.gendsgn.ru { reverse_proxy forgejo:3000 }` **вручную** в `/opt/gendesign/Caddyfile`, но не закоммитил в repo. `deploy.yml` делает `git reset --hard origin/main` → при первом triggered deploy (#205 GlitchTip — изменил Caddyfile → попал в path-trigger `Caddyfile`) ручной блок был **стёрт**. Caddy reload → нет блока для git.gendsgn.ru → handshake fail. ## Fix Добавляет блок в repo Caddyfile (после `errors.gendsgn.ru`): ```caddyfile git.gendsgn.ru { encode zstd gzip reverse_proxy forgejo:3000 log { output file /var/log/caddy/git.gendsgn.ru.log } } ``` - `forgejo:3000` — контейнер из `forgejo-migration/docker-compose.yml`, network `gendesign_default` (shared) - Forgejo HTTP default port 3000 - Logs в отдельный файл — consistency с `errors.gendsgn.ru` block ## Test plan - [x] Hotfix вручную добавлен на VPS + `caddy reload` → `curl -sI https://git.gendsgn.ru/` returns HTTP/2 200 ✅ - [ ] Этот PR merged → next deploy → Caddyfile содержит блок → блок переживёт - [ ] (optional follow-up) Добавить smoke test для git.gendsgn.ru в qa-tester чтобы ловить regression ## Why fast-track Prod 500 (теперь восстановлен через hotfix), но без этого PR следующий любой push в Caddyfile/docker-compose снова уронит. Closes: prod down incident 2026-05-16 ~16:30Z
lekss361 added 1 commit 2026-05-16 16:52:32 +00:00
Block был добавлен вручную при Forgejo migration (2026-05-16) но не
закоммичен в repo. Первый Caddyfile-touching deploy (#205 GlitchTip)
сделал git reset --hard origin/main на VPS → блок исчез → TLS handshake
internal error 80 на git.gendsgn.ru (prod down ~16:30).

Routes git.gendsgn.ru → forgejo:3000 (контейнер из forgejo-migration/
docker-compose.yml, shared gendesign_default network, Forgejo default
HTTP port).

VPS уже починен hotfix-ом руками; этот PR делает fix permanent — переживёт
любой git reset --hard от deploy.yml.
Author
Owner

Verdict: APPROVE

Hotfix корректен и соответствует state, что вручную применён на VPS. Восстанавливает permanent блок git.gendsgn.ru в Caddyfile, который был стёрт при auto-deploy PR #205 (deploy.yml делает git reset --hard origin/main).

Verified

  • Caddyfile syntax: блок валиден — encode zstd gzip, reverse_proxy forgejo:3000, log { output file ... }. Структура идентична соседнему errors.gendsgn.ru (после которого размещён — логично, оба external service-блока).
  • Container name: forgejo подтверждён в forgejo-migration/docker-compose.yml:4 (container_name: forgejo).
  • HTTP port 3000: default Forgejo, никаких FORGEJO__server__HTTP_PORT override в env (forgejo-migration/docker-compose.yml:6-23).
  • Network DNS resolution: caddy сидит на default сети main-compose. Project name /opt/gendesign → compose создаёт сеть gendesign_default. Forgejo-migration compose ссылается на неё как external: true, name: gendesign_default (forgejo-migration/docker-compose.yml:31-34). Это та же сеть → caddy резолвит forgejo по DNS. Подтверждено working hotfix-ом на VPS (HTTP/2 200).
  • Log file path: /var/log/caddy/git.gendsgn.ru.log — consistent с уже работающим errors.gendsgn.ru.log (тот же volume mount в caddy container, log writes уже подтверждены работой errors-блока).
  • Security: нет secrets, нет exposed ports, proxy target — internal container на shared docker network. SSH port (2222→22) уже корректно exposed только через forgejo-migration compose, в Caddyfile не трогается.

Delta vs VPS hotfix

PR добавляет log { output file ... } блок, которого, по информации в задании, не было в ручном hotfix-е на VPS. После deploy появится запись в /var/log/caddy/git.gendsgn.ru.log — это улучшение (debug/audit trail), volume уже writeable (доказано работой errors-лога). Не блокирует merge.

Notes (non-blocking)

  • Комментарий "Был добавлен вручную при migration, потерян при первом auto-deploy после изменения Caddyfile (deploy.yml делает git reset --hard)" — отличная документация root cause прямо в файле, помогает next-engineer-у не повторить.
  • Хорошо бы добавить health-check для forgejo container в forgejo-migration/docker-compose.yml, но это вне scope этого hotfix-а.

Action

Blocked for auto-merge per .claude/rules/git-pr.md scope policy (touches Caddyfile). Human merge required to make hotfix permanent — после merge deploy.yml применит git reset, и блок останется в repo state.

NB: после merge нужно подтвердить curl -sI https://git.gendsgn.ru/ всё ещё возвращает HTTP/2 200 после re-deploy (caddy reload).

<!-- gendesign-review-bot: sha=8293189 verdict=approve --> ## Verdict: APPROVE Hotfix корректен и соответствует state, что вручную применён на VPS. Восстанавливает permanent блок `git.gendsgn.ru` в Caddyfile, который был стёрт при auto-deploy PR #205 (deploy.yml делает `git reset --hard origin/main`). ### Verified - **Caddyfile syntax**: блок валиден — `encode zstd gzip`, `reverse_proxy forgejo:3000`, `log { output file ... }`. Структура идентична соседнему `errors.gendsgn.ru` (после которого размещён — логично, оба external service-блока). - **Container name**: `forgejo` подтверждён в `forgejo-migration/docker-compose.yml:4` (`container_name: forgejo`). - **HTTP port 3000**: default Forgejo, никаких `FORGEJO__server__HTTP_PORT` override в env (`forgejo-migration/docker-compose.yml:6-23`). - **Network DNS resolution**: caddy сидит на `default` сети main-compose. Project name `/opt/gendesign` → compose создаёт сеть `gendesign_default`. Forgejo-migration compose ссылается на неё как `external: true, name: gendesign_default` (`forgejo-migration/docker-compose.yml:31-34`). Это та же сеть → caddy резолвит `forgejo` по DNS. Подтверждено working hotfix-ом на VPS (HTTP/2 200). - **Log file path**: `/var/log/caddy/git.gendsgn.ru.log` — consistent с уже работающим `errors.gendsgn.ru.log` (тот же volume mount в caddy container, log writes уже подтверждены работой errors-блока). - **Security**: нет secrets, нет exposed ports, proxy target — internal container на shared docker network. SSH port (2222→22) уже корректно exposed только через forgejo-migration compose, в Caddyfile не трогается. ### Delta vs VPS hotfix PR добавляет `log { output file ... }` блок, которого, по информации в задании, не было в ручном hotfix-е на VPS. После deploy появится запись в `/var/log/caddy/git.gendsgn.ru.log` — это улучшение (debug/audit trail), volume уже writeable (доказано работой errors-лога). Не блокирует merge. ### Notes (non-blocking) - Комментарий "Был добавлен вручную при migration, потерян при первом auto-deploy после изменения Caddyfile (deploy.yml делает git reset --hard)" — отличная документация root cause прямо в файле, помогает next-engineer-у не повторить. - Хорошо бы добавить health-check для forgejo container в `forgejo-migration/docker-compose.yml`, но это вне scope этого hotfix-а. ### Action Blocked for auto-merge per `.claude/rules/git-pr.md` scope policy (touches `Caddyfile`). Human merge required to make hotfix permanent — после merge deploy.yml применит git reset, и блок останется в repo state. NB: после merge нужно подтвердить `curl -sI https://git.gendsgn.ru/` всё ещё возвращает HTTP/2 200 после re-deploy (caddy reload).
lekss361 merged commit 572d235d70 into main 2026-05-16 17:02:06 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#221
No description provided.