fix(tradein/deploy): подключить selectel-оверрайд — иначе после переезда бот умрёт молча #3093
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
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#3093
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/tradein-deploy-telegram-pin"
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?
Что было
tradein-mvp/docker-compose.selectel.ymlлежит в репозитории с 23.08 и закрепляет рабочий IPapi.telegram.orgчерезextra_hostsуbackendиtgbot. Но ни один вызов compose вdeploy-tradein.ymlего не подключал — везде жёстко-f docker-compose.prod.yml.Написанный, но никем не подключённый оверрайд выглядит как решённая проблема, оставаясь нерешённой. Первый же деплой на новом хосте поднял бы МЕРУ без закрепления, и телеграм-бот вместе с пересылкой алертов умерли бы молча: у
api.telegram.orgсемь публикуемых адресов, с Selectel отвечает ровно один (149.154.167.220), а штатный резолвер отдаёт мёртвый.Отказ скрывает сам себя — канал, которым мы узнали бы о беде, тот же самый Telegram.
Сейчас на Poincare спасает ручная запись в
/etc/hostsхоста (проверено: из контейнера имя резолвится в живой адрес, TLS отвечает за 0.08 с), но это файл вне git.Что стало
Вводится
COMPOSE_FILES, подставляется в три вызова, которые создают контейнеры:pull,up -d --no-deps postgres,up -d --no-deps $SERVICES. Остальные вызовы в файле —exec -Tпротив уже поднятых контейнеров, им набор-fне нужен.Подключается безусловно, на обоих хостах. Замер 25.08 с Beget:
То есть отвечает именно Telegram, а не заглушка. Условная логика «оверрайд только на Selectel» была бы лишней машинерией ради хоста, который после 30.08 перестанет быть продовым.
Цена решения: на Beget пропадает запасной путь через резолвер. Принято сознательно — в шапке файла это уже оговорено как единственная точка отказа, и на Poincare та же точка отказа существует независимо от этого PR (пин в
/etc/hosts).Пропажа файла валит деплой, а не печатает предупреждение. Файл git-tracked, а шагом выше рабочее дерево принудительно приводится к
origin/main— значит его отсутствие означает поломку, а не штатный сценарий. Зелёный лог с предупреждением был бы ровно тем классом тихого отказа, от которого защищает сам PR. Тот же принцип, что у health-check'ов #2214 ниже по файлу. (Замечание ревьюера, изначально былоWARNING.)Попутно: шапка
docker-compose.selectel.ymlФайл больше не Selectel-only, шапка переписана. Там же зафиксировано, почему его нельзя подмешивать к стеку ПТИЦЫ:
Сервиса
tgbotв стеке Птицы нет вовсе, поэтому compose отвергает весь проект. Тише вторая беда:backendесть в обоих стеках, и закрепление молча легло бы на бэкенд Птицы.Раннбук окна (
runbooks/cutover_beget_selectel_0830.md, шаг 5) предлагал именно такую команду — проверено, падает с кодом 1. Раннбук поправлен отдельно, см. #3057.Test plan
docker compose -p gendesign-tradein -f docker-compose.prod.yml -f docker-compose.selectel.yml config— код 0, шесть сервисов,extra_hosts: api.telegram.org=149.154.167.220доходит и доbackend, и доtgbotCOMPOSE_FILESопределяется в том же блокеscript: |раньше всех трёх использований, послеcd tradein-mvp— проверено ревьюером по номерам строкdown/stop/create/runв файле отсутствуютexit 1не сработаетdocker inspect tradein-tgbotпоказываетextra_hostsRefs #3059
docker-compose.selectel.yml лежит в репозитории с 23.08 и закрепляет рабочий IP api.telegram.org через extra_hosts у backend и tgbot. Но ни один вызов compose в deploy-tradein.yml его не подключал — везде было жёстко `-f docker-compose.prod.yml`. Написанный, но никем не подключённый оверрайд выглядит как решённая проблема, оставаясь нерешённой: первый же деплой на новом хосте поднял бы МЕРУ БЕЗ закрепления, и телеграм-бот вместе с пересылкой алертов умерли бы молча. У api.telegram.org семь публикуемых адресов, с Selectel отвечает РОВНО ОДИН (149.154.167.220), и штатный резолвер отдаёт мёртвый. Отказ скрывает сам себя: канал, которым мы узнали бы о беде, — тот же самый Telegram. Вводится COMPOSE_FILES, подставляется в три вызова, создающих контейнеры (pull, up -d postgres, up -d $SERVICES). Остальные вызовы в файле — exec -T против уже поднятых контейнеров, им набор -f не нужен. Подключается безусловно, на обоих хостах. Замер 25.08 с Beget: 149.154.167.220 -> 302 за 0.18 с реальный Bot API /getMe -> {"ok":false,"error_code":401} то есть отвечает именно Telegram. Условная логика «оверрайд только на Selectel» была бы лишней машинерией ради хоста, который после 30.08 перестанет быть продовым. Цена: на Beget пропадает запасной путь через резолвер — принято сознательно, в файле это оговорено как единственная точка отказа. Пропажа файла валит деплой, а не печатает предупреждение: файл git-tracked, а шагом выше рабочее дерево принудительно приводится к origin/main, поэтому его отсутствие означает поломку. Зелёный лог с предупреждением был бы ровно тем тихим отказом, от которого защищает правка. Шапка docker-compose.selectel.yml переписана: файл больше не Selectel-only. Там же зафиксировано, почему его нельзя подмешивать к стеку ПТИЦЫ — сервиса tgbot там нет, compose отвергает весь проект ("has neither an image nor a build context"), а сервис backend есть в обоих, и закрепление молча легло бы на бэкенд Птицы. Раннбук окна предлагал именно такую команду — проверено, падает. Refs #3059