Merge pull request 'fix(caddy): ретрай подключения к фронту МЕРЫ — остаток окна подмены (#3274, часть 2a/3)' (#3446) from fix/3274-part2a-caddy-retry into main
All checks were successful
Deploy Infra Host / sync-infra-host (push) Successful in 5s
Deploy / changes (push) Successful in 7s
Deploy / deploy-caddy (push) Has been skipped
Deploy / build-backend (push) Successful in 38s
Deploy / build-worker (push) Successful in 41s
Deploy / build-frontend (push) Successful in 39s
Deploy / deploy (push) Successful in 1m30s
Deploy / deploy-status (push) Successful in 2s
Deploy / perimeter-smoke (push) Successful in 1m41s
All checks were successful
Deploy Infra Host / sync-infra-host (push) Successful in 5s
Deploy / changes (push) Successful in 7s
Deploy / deploy-caddy (push) Has been skipped
Deploy / build-backend (push) Successful in 38s
Deploy / build-worker (push) Successful in 41s
Deploy / build-frontend (push) Successful in 39s
Deploy / deploy (push) Successful in 1m30s
Deploy / deploy-status (push) Successful in 2s
Deploy / perimeter-smoke (push) Successful in 1m41s
This commit is contained in:
commit
84920e6cbd
1 changed files with 43 additions and 0 deletions
|
|
@ -42,6 +42,40 @@
|
||||||
# код.
|
# код.
|
||||||
# ═══════════════════════════════════════════════════════════════════════════
|
# ═══════════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
|
# ── (tradein_frontend_retry) — подмена контейнера фронта без 502 (#3274) ─────
|
||||||
|
#
|
||||||
|
# ЧТО ЭТО. Ретрай ПОДКЛЮЧЕНИЯ к tradein-frontend: пока идёт подмена
|
||||||
|
# контейнера, Caddy не отдаёт ошибку сразу, а до 2 с переспрашивает апстрим с
|
||||||
|
# шагом 100 мс. Импортируется ВНУТРЬ каждого `reverse_proxy tradein-frontend`
|
||||||
|
# в этом файле (9 блоков: gendsgn.ru/trade-in/* и все публичные пути
|
||||||
|
# meraocenka.ru).
|
||||||
|
#
|
||||||
|
# ПОЧЕМУ ЭТО НЕ ТО, ЧТО ОТВЕРГНУТО В #3274. Там `lb_try_duration` отвергнут
|
||||||
|
# для окна 30–90 с — держать посетителя минуту в ожидании хуже честной
|
||||||
|
# ошибки, инструмент рассчитан на разрыв в сотни миллисекунд. Правка в
|
||||||
|
# deploy-tradein.yml (frontend вынесен из общего `up -d`) СНАЧАЛА сводит окно
|
||||||
|
# к этим сотням миллисекунд, и только после этого ретрай становится
|
||||||
|
# применим. Числа, на которых это стоит (замеры 11.09):
|
||||||
|
# - прод, ОДИН сервис в `up -d`: контейнер создан 16:42:17.5 → запущен
|
||||||
|
# 16:42:18.0 — 0,5 с;
|
||||||
|
# - прод, ПАЧКА сервисов в одном `up -d`: создан 15:01:40 → запущен
|
||||||
|
# 15:02:10 — 30 с (фаза start ждёт готовности зависимостей, а старый
|
||||||
|
# контейнер снесён ещё в фазе create);
|
||||||
|
# - стенд (реальный образ фронта + Caddy 2), одиночная подмена: без ретрая
|
||||||
|
# 1 × 502, с ретраем 241/241 × 200, один запрос подождал 0,55 с.
|
||||||
|
#
|
||||||
|
# ПОТОЛОК. 2 с — это ЦЕНА ОЖИДАНИЯ при настоящей аварии: если фронт лежит
|
||||||
|
# долго, каждый запрос сначала висит 2 с и лишь потом получает 503-заглушку
|
||||||
|
# (../deploy-window.caddy.snippet). Поэтому не «побольше на всякий случай»:
|
||||||
|
# запас над измеренными 0,5 с четырёхкратный, дальше растёт только вред.
|
||||||
|
# Бэкенду (tradein-backend) этот приём НАМЕРЕННО не дан: его старт — единицы
|
||||||
|
# секунд (uvicorn + подключение к БД), там 2 с не хватит, а больше — уже тот
|
||||||
|
# самый вред. Его окно закрывается отдельно, не этой правкой.
|
||||||
|
(tradein_frontend_retry) {
|
||||||
|
lb_try_duration 2s
|
||||||
|
lb_try_interval 100ms
|
||||||
|
}
|
||||||
|
|
||||||
# Caddy config.
|
# Caddy config.
|
||||||
#
|
#
|
||||||
# - gendsgn.ru — main production site, auto-TLS via Let's Encrypt.
|
# - gendsgn.ru — main production site, auto-TLS via Let's Encrypt.
|
||||||
|
|
@ -137,6 +171,7 @@ gendsgn.ru {
|
||||||
@uipreview path /trade-in/ui-preview/* /trade-in/_next/static/*
|
@uipreview path /trade-in/ui-preview/* /trade-in/_next/static/*
|
||||||
handle @uipreview {
|
handle @uipreview {
|
||||||
reverse_proxy tradein-frontend:3000 {
|
reverse_proxy tradein-frontend:3000 {
|
||||||
|
import tradein_frontend_retry
|
||||||
# #2558 review: тот же периметр-scrub, что и у /trade-in/api/* и
|
# #2558 review: тот же периметр-scrub, что и у /trade-in/api/* и
|
||||||
# @tradein ниже — этот блок тоже теперь ДО basic_auth, клиент
|
# @tradein ниже — этот блок тоже теперь ДО basic_auth, клиент
|
||||||
# мог бы прислать свой X-Authenticated-User. Сейчас инертно
|
# мог бы прислать свой X-Authenticated-User. Сейчас инертно
|
||||||
|
|
@ -240,6 +275,7 @@ gendsgn.ru {
|
||||||
handle @tradein {
|
handle @tradein {
|
||||||
# Next.js basePath=/trade-in — фронт сам ждёт префикса в URL
|
# Next.js basePath=/trade-in — фронт сам ждёт префикса в URL
|
||||||
reverse_proxy tradein-frontend:3000 {
|
reverse_proxy tradein-frontend:3000 {
|
||||||
|
import tradein_frontend_retry
|
||||||
# См. комментарий над /trade-in/api/* выше — та же логика (явное
|
# См. комментарий над /trade-in/api/* выше — та же логика (явное
|
||||||
# удаление вместо Set с пустым {http.auth.user.id}), и по той же
|
# удаление вместо Set с пустым {http.auth.user.id}), и по той же
|
||||||
# причине здесь больше нет инжекта X-Internal-Auth-Secret
|
# причине здесь больше нет инжекта X-Internal-Auth-Secret
|
||||||
|
|
@ -355,6 +391,7 @@ meraocenka.ru {
|
||||||
handle / {
|
handle / {
|
||||||
rewrite * /trade-in/mera-public
|
rewrite * /trade-in/mera-public
|
||||||
reverse_proxy tradein-frontend:3000 {
|
reverse_proxy tradein-frontend:3000 {
|
||||||
|
import tradein_frontend_retry
|
||||||
# Тот же периметр-скраб, что у @uipreview (:87) и @tradein ниже.
|
# Тот же периметр-скраб, что у @uipreview (:87) и @tradein ниже.
|
||||||
# Этот блок вообще не под basic_auth, поэтому анонимный клиент
|
# Этот блок вообще не под basic_auth, поэтому анонимный клиент
|
||||||
# тем более может прислать свой X-Authenticated-User. Сейчас
|
# тем более может прислать свой X-Authenticated-User. Сейчас
|
||||||
|
|
@ -405,6 +442,7 @@ meraocenka.ru {
|
||||||
handle @meraPages {
|
handle @meraPages {
|
||||||
rewrite * /trade-in/mera-public{path}
|
rewrite * /trade-in/mera-public{path}
|
||||||
reverse_proxy tradein-frontend:3000 {
|
reverse_proxy tradein-frontend:3000 {
|
||||||
|
import tradein_frontend_retry
|
||||||
header_up -X-Authenticated-User
|
header_up -X-Authenticated-User
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -571,6 +609,7 @@ meraocenka.ru {
|
||||||
respond @foreignRouteChunk 404
|
respond @foreignRouteChunk 404
|
||||||
|
|
||||||
reverse_proxy tradein-frontend:3000 {
|
reverse_proxy tradein-frontend:3000 {
|
||||||
|
import tradein_frontend_retry
|
||||||
header_up -X-Authenticated-User
|
header_up -X-Authenticated-User
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -581,6 +620,7 @@ meraocenka.ru {
|
||||||
handle /favicon.ico {
|
handle /favicon.ico {
|
||||||
rewrite * /trade-in/favicon.ico
|
rewrite * /trade-in/favicon.ico
|
||||||
reverse_proxy tradein-frontend:3000 {
|
reverse_proxy tradein-frontend:3000 {
|
||||||
|
import tradein_frontend_retry
|
||||||
header_up -X-Authenticated-User
|
header_up -X-Authenticated-User
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -594,6 +634,7 @@ meraocenka.ru {
|
||||||
handle /robots.txt {
|
handle /robots.txt {
|
||||||
rewrite * /trade-in/robots.txt
|
rewrite * /trade-in/robots.txt
|
||||||
reverse_proxy tradein-frontend:3000 {
|
reverse_proxy tradein-frontend:3000 {
|
||||||
|
import tradein_frontend_retry
|
||||||
header_up -X-Authenticated-User
|
header_up -X-Authenticated-User
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -613,6 +654,7 @@ meraocenka.ru {
|
||||||
handle /og-mera.png {
|
handle /og-mera.png {
|
||||||
rewrite * /trade-in/og-mera.png
|
rewrite * /trade-in/og-mera.png
|
||||||
reverse_proxy tradein-frontend:3000 {
|
reverse_proxy tradein-frontend:3000 {
|
||||||
|
import tradein_frontend_retry
|
||||||
header_up -X-Authenticated-User
|
header_up -X-Authenticated-User
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -624,6 +666,7 @@ meraocenka.ru {
|
||||||
handle /logo-mera.png {
|
handle /logo-mera.png {
|
||||||
rewrite * /trade-in/logo-mera.png
|
rewrite * /trade-in/logo-mera.png
|
||||||
reverse_proxy tradein-frontend:3000 {
|
reverse_proxy tradein-frontend:3000 {
|
||||||
|
import tradein_frontend_retry
|
||||||
header_up -X-Authenticated-User
|
header_up -X-Authenticated-User
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue