fix(deploy): force-recreate caddy для подхвата новых compose mounts #269
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#269
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/deploy-caddy-force-recreate"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Раньше
deploy.ymlпослеdocker compose up -dделалdocker compose exec caddy caddy reload— это reload Caddyfile из running container, но НЕ пересоздаёт container.Когда в
docker-compose.prod.ymlдобавляется новый volume mount (например./preview:/srv/preview:roв PR #268), он не появляется в running container до manualdocker compose up -d --force-recreate caddyчерез SSH.Теперь deploy всегда вызывает
up -d --force-recreate --no-deps caddyпосле общего pull/up.Причина выявлена
PR #268 (preview mockups) деплой 2026-05-17 08:19 UTC:
handle_path /preview/*✅docker-compose.prod.ymlполучил./preview:/srv/preview:romount ❌ (не применился)/srv/previewв container не существует/preview/*→ fallback наhandle { reverse_proxy frontend:3000 }→ Next.js 404Изменения
.forgejo/workflows/deploy.yml(line ~253):Trade-offs
Test plan
docker-compose.prod.yml caddy:секцию — он автоматически применитсяRelated
Merged via deep-code-reviewer — verdict APPROVE.
Проверено:
caddy reload || true→up -d --force-recreate --no-deps caddy--no-depsправильно изолирует caddy от других сервисов (postgres/redis/backend/worker/beat/frontend не задеваются)up -dи после блока force-recreate для backend/worker/beat (тот же паттерн уже применён для env_file changes — консистентно)|| true— корректное ужесточение: если caddy не стартует — deploy red вместо silent failinfra/Forgejo_Migration_BotServer_To_Beget_2026-05-16.mdnuance #3) как канонический fix для bind-mount inode-trapVerify после next deploy:
ssh gendesign 'docker compose -p gendesign ps caddy --format "{{.Name}} {{.RunningFor}}"'— container должен быть свежимcurl -I https://gendsgn.ru/preview/test-mockup-1/— PR #268 preview должен работать без manual SSHFuture improvement (отдельным PR, не блокирующее):
docker compose -f docker-compose.prod.yml exec -T caddy caddy validate --config /etc/caddy/CaddyfileПЕРЕД force-recreate — если Caddyfile broken, deploy red на validation step вместо запуска broken caddy (force-recreate stop старого → start нового с broken config = production 502 до manual fix). Сейчас защиты нет.