feat(deploy): prod OOM swap cushion + edge maintenance page #170
Reference in New Issue
Block a user
Delete Branch "feature/prod-hardening"
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?
Что
Две меры укрепления прод-деплоя (по твоему запросу; алерты не трогаю — они уже throttled).
1. Swap-подушка от OOM (ansible
common,swap_size=1G,vm.swappiness=10). Per-container кэпы (проверено: compose v2 применяетdeploy.limits→ cgroup) не дают одному сервису съесть весь RAM, но сумма кэпов (~2.8 GiB) оверкоммитит хост 1.9 GiB — при одновременном спайке возможен kernel-OOM (жертва может быть postgres). Swap впитывает перегруз. Идемпотентно, builtin-only. Применяется твоим прогономansible-playbook(не деплоем).2. Maintenance-гейт в caddy.
prod-deploy.shподнимает флаг на время перекатки/миграции → edge caddy отдаёт статичную 503 «технические работы» (deploy/caddy/maintenance.html) на user-facing путях;/_gm(Grafana) остаётся доступен. Флаг снимается trap-ом на любом выходе (успех / health-fail+откат / ошибка) — залипнуть не может. 503 несётRetry-After+ маркерX-Scrabble-Maintenance: 1(для будущего оверлея в SPA). Не zero-downtime (одиночный stateful backend всё равно блипает), но окно грациозное.Проверено (evidence)
caddy validate: Valid. Сырой nc-запрос при флаге ON: 503 + страница (1858 б) + Retry-After:120 + X-Scrabble-Maintenance:1; все non-/_gm пути (вкл. Connect/gRPC edge/scrabble.edge.v1.Gateway/*) → 503;/_gm→ 200 (минует); тоггл флага без релоуда (per-request stat).ansible-playbook --syntax-check(core 2.19.4) прошёл;docker compose config(base+prod) VALID,/srv/maintсмонтирован ro.Дальше
ansible-playbookпрогон.New commits pushed, approval review dismissed automatically according to repository settings