fix(tradein/deploy): подключить selectel-оверрайд — иначе после переезда бот умрёт молча (#3093)
All checks were successful
Deploy Trade-In / changes (push) Successful in 12s
Deploy Trade-In / build-frontend (push) Successful in 2m42s
Deploy Trade-In / build-browser (push) Successful in 3m16s
Deploy Trade-In / deploy (push) Successful in 3m15s
Deploy Trade-In / deploy-status (push) Successful in 1s
Deploy Trade-In / perimeter-smoke (push) Successful in 9s
Deploy Trade-In / test (push) Successful in 3m52s
Deploy Trade-In / build-backend (push) Successful in 34s
All checks were successful
Deploy Trade-In / changes (push) Successful in 12s
Deploy Trade-In / build-frontend (push) Successful in 2m42s
Deploy Trade-In / build-browser (push) Successful in 3m16s
Deploy Trade-In / deploy (push) Successful in 3m15s
Deploy Trade-In / deploy-status (push) Successful in 1s
Deploy Trade-In / perimeter-smoke (push) Successful in 9s
Deploy Trade-In / test (push) Successful in 3m52s
Deploy Trade-In / build-backend (push) Successful in 34s
This commit is contained in:
parent
d409e31f00
commit
729e9acc52
2 changed files with 68 additions and 19 deletions
|
|
@ -828,8 +828,47 @@ jobs:
|
||||||
# Re-login to GHCR (PAT может быть rotated)
|
# Re-login to GHCR (PAT может быть rotated)
|
||||||
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
||||||
|
|
||||||
|
# ── Набор compose-файлов (#3059) ──────────────────────────────────
|
||||||
|
# docker-compose.selectel.yml закрепляет рабочий IP api.telegram.org
|
||||||
|
# через extra_hosts у backend и tgbot. Файл существовал с 23.08, но НИ
|
||||||
|
# ОДИН вызов ниже его не подключал — то есть первый же деплой на новом
|
||||||
|
# хосте поднял бы МЕРУ без закрепления, и бот с пересылкой алертов
|
||||||
|
# умерли бы молча: у api.telegram.org семь адресов, а с Selectel
|
||||||
|
# отвечает РОВНО ОДИН (149.154.167.220), и штатный резолвер отдаёт
|
||||||
|
# мёртвый.
|
||||||
|
#
|
||||||
|
# Подключается БЕЗУСЛОВНО, на обоих хостах. Замер 25.08 с Beget:
|
||||||
|
# 149.154.167.220 -> 302 за 0.18 с
|
||||||
|
# реальный Bot API /getMe -> {"ok":false,"error_code":401} — то есть
|
||||||
|
# отвечает именно Telegram, а не заглушка
|
||||||
|
# Условная логика «оверрайд только на Selectel» была бы лишней машинерией
|
||||||
|
# ради хоста, который через переезд перестанет быть продовым.
|
||||||
|
#
|
||||||
|
# NB: файл — оверрайд стека МЕРЫ (проект gendesign-tradein). Подмешивать
|
||||||
|
# его к стеку ПТИЦЫ нельзя: там нет сервиса tgbot, и compose отвергает
|
||||||
|
# весь проект ("has neither an image nor a build context"), а сервис
|
||||||
|
# backend есть в обоих — закрепление молча легло бы на бэкенд Птицы.
|
||||||
|
COMPOSE_FILES="-f docker-compose.prod.yml"
|
||||||
|
if [ -f docker-compose.selectel.yml ]; then
|
||||||
|
COMPOSE_FILES="$COMPOSE_FILES -f docker-compose.selectel.yml"
|
||||||
|
echo "→ compose-оверрайд: docker-compose.selectel.yml подключён (пин api.telegram.org)"
|
||||||
|
else
|
||||||
|
# ПАДАЕМ, а не предупреждаем. Файл git-tracked, а шагом выше сделан
|
||||||
|
# `git reset --hard origin/main` — значит его отсутствие означает не
|
||||||
|
# штатный сценарий, а поломку (удалили/переименовали, не поправив
|
||||||
|
# это место). Предупреждение в зелёном логе здесь было бы ровно тем
|
||||||
|
# классом тихого отказа, от которого защищает сама правка: деплой
|
||||||
|
# «успешен», а бот и пересылка алертов мертвы. Тот же принцип, что у
|
||||||
|
# health-check'ов #2214 ниже по файлу.
|
||||||
|
echo "ERROR: docker-compose.selectel.yml не найден в $(pwd)."
|
||||||
|
echo "ERROR: без него api.telegram.org не закреплён → tgbot и пересылка"
|
||||||
|
echo "ERROR: алертов умрут МОЛЧА (с Selectel отвечает 1 адрес из 7)."
|
||||||
|
echo "ERROR: если файл убран намеренно — снять и эту проверку тем же PR."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
export IMAGE_TAG="$IMAGE_TAG"
|
export IMAGE_TAG="$IMAGE_TAG"
|
||||||
docker compose -p gendesign-tradein -f docker-compose.prod.yml pull
|
docker compose -p gendesign-tradein $COMPOSE_FILES pull
|
||||||
|
|
||||||
# ── Порядок деплоя (issue #2216): МИГРАЦИИ ДО НОВОГО app-кода ──────────
|
# ── Порядок деплоя (issue #2216): МИГРАЦИИ ДО НОВОГО app-кода ──────────
|
||||||
# Раньше backend/frontend/scraper поднимались ПЕРЕД миграциями: при сбое
|
# Раньше backend/frontend/scraper поднимались ПЕРЕД миграциями: при сбое
|
||||||
|
|
@ -842,7 +881,7 @@ jobs:
|
||||||
# код на старой схеме». Откат = просто ничего не поднимали.
|
# код на старой схеме». Откат = просто ничего не поднимали.
|
||||||
|
|
||||||
# (1) Только БД — чтобы прогнать миграции до нового app-кода.
|
# (1) Только БД — чтобы прогнать миграции до нового app-кода.
|
||||||
docker compose -p gendesign-tradein -f docker-compose.prod.yml up -d --no-deps postgres
|
docker compose -p gendesign-tradein $COMPOSE_FILES up -d --no-deps postgres
|
||||||
|
|
||||||
# (2) Ждём готовности postgres (pg_isready в цикле, НЕ тупой sleep).
|
# (2) Ждём готовности postgres (pg_isready в цикле, НЕ тупой sleep).
|
||||||
#
|
#
|
||||||
|
|
@ -1159,7 +1198,7 @@ jobs:
|
||||||
echo "→ scraper checkpoint ts (DB clock): ${SCRAPER_STOP_TS:-unknown}"
|
echo "→ scraper checkpoint ts (DB clock): ${SCRAPER_STOP_TS:-unknown}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
docker compose -p gendesign-tradein -f docker-compose.prod.yml up -d --no-deps $SERVICES
|
docker compose -p gendesign-tradein $COMPOSE_FILES up -d --no-deps $SERVICES
|
||||||
|
|
||||||
if [ -n "$scraper_stale" ] && [ -n "${SCRAPER_STOP_TS:-}" ]; then
|
if [ -n "$scraper_stale" ] && [ -n "${SCRAPER_STOP_TS:-}" ]; then
|
||||||
echo "→ Startup-reap (#1951): помечаем orphaned running-строки, замороженные recreate'ом"
|
echo "→ Startup-reap (#1951): помечаем orphaned running-строки, замороженные recreate'ом"
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,32 @@
|
||||||
# Selectel-only override: закрепляет рабочий IP api.telegram.org для tgbot.
|
# Override: закрепляет рабочий IP api.telegram.org для tgbot и backend.
|
||||||
#
|
#
|
||||||
# Применяется ТОЛЬКО на новом выделенном сервере (Selectel Poincare,
|
# ⚠️ ОБНОВЛЕНО 25.08 (#3059). Файл больше НЕ Selectel-only и подключается
|
||||||
# 188.246.224.93, переезд 30.08.2026), поверх обычного prod-стека:
|
# БЕЗУСЛОВНО — его подмешивает deploy-tradein.yml (переменная COMPOSE_FILES).
|
||||||
|
# Имя оставлено прежним, чтобы не ломать ссылки на него в раннбуке и задачах.
|
||||||
#
|
#
|
||||||
# docker compose -p gendesign \
|
# Что было не так: с 23.08 файл лежал в репозитории, но НИ ОДИН вызов compose в
|
||||||
# -f docker-compose.yml -f docker-compose.prod.yml -f docker-compose.selectel.yml up -d
|
# деплое его не подключал — везде было жёстко `-f docker-compose.prod.yml`.
|
||||||
|
# То есть первый же деплой на новом хосте поднял бы МЕРУ БЕЗ закрепления, и
|
||||||
|
# бот вместе с пересылкой алертов умерли бы молча. Написанный, но никем не
|
||||||
|
# подключённый оверрайд выглядит как решённая проблема, оставаясь нерешённой.
|
||||||
#
|
#
|
||||||
# На Beget этот файл НЕ подключается — там резолвер api.telegram.org отдаёт
|
# Почему безусловно, а не только на Selectel (замер 25.08 С BEGET):
|
||||||
# один из рабочих адресов и закрепление не нужно (см. замер ниже). Отдельный
|
# 149.154.167.220 -> 302 за 0.18 с
|
||||||
# override, а не правка docker-compose.prod.yml, потому что:
|
# реальный Bot API /getMe -> {"ok":false,"error_code":401}
|
||||||
# 1. Это host-specific обход, а не общее свойство сервиса — размазывать его
|
# то есть отвечает именно Telegram, а не заглушка
|
||||||
# по общему prod-файлу значит менять поведение действующего прода
|
# Закрепляемый адрес живой и на старом хосте, поэтому условная логика «оверрайд
|
||||||
# (Beget) ради проблемы хоста, который ещё не в проде.
|
# только на новом» была бы лишней машинерией ради хоста, который после 30.08
|
||||||
# 2. Нулевой риск для Beget: файл просто не передаётся в -f, никакого
|
# перестанет быть продовым. Цена решения — на Beget пропадает запасной путь
|
||||||
# shared-состояния между хостами через этот механизм нет.
|
# через резолвер (см. «ОДНА ТОЧКА ОТКАЗА» ниже); принято сознательно.
|
||||||
# 3. Если Selectel впоследствии станет единственным прод-хостом (после
|
#
|
||||||
# 30.08) и обход всё ещё нужен — тогда его можно будет слить в
|
# ⚠️ Это оверрайд стека МЕРЫ (проект gendesign-tradein). Подмешивать его к стеку
|
||||||
# docker-compose.prod.yml осознанно, а не молча "заодно".
|
# ПТИЦЫ НЕЛЬЗЯ: сервиса tgbot там нет, и compose отвергает весь проект —
|
||||||
|
# service "tgbot" has neither an image nor a build context specified
|
||||||
|
# а сервис backend есть в ОБОИХ стеках, так что закрепление молча легло бы на
|
||||||
|
# бэкенд Птицы. Правильный вызов — внутри проекта МЕРЫ:
|
||||||
|
#
|
||||||
|
# docker compose -p gendesign-tradein \
|
||||||
|
# -f docker-compose.prod.yml -f docker-compose.selectel.yml up -d
|
||||||
#
|
#
|
||||||
# ── Почему это вообще нужно (замер 2026-08-23, с нового хоста) ─────────────
|
# ── Почему это вообще нужно (замер 2026-08-23, с нового хоста) ─────────────
|
||||||
# У api.telegram.org семь публикуемых адресов. С Selectel отвечает РОВНО ОДИН:
|
# У api.telegram.org семь публикуемых адресов. С Selectel отвечает РОВНО ОДИН:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue