🚀 Деплой на прод (capital-prod)
Текущий деплой - rsync → build → миграция → up. Целевой (месяц 1) - GitHub Actions → GHCR → staging → prod (см.
Архитектура Capital v1.0.md §8). Деплой идёт только из головного репозиторияcapital, одной рукой (правила параллельной работы -processes/03 - Параллельная разработка.md).
Где что
- capital-prod = Hetzner cpx32, tailnet
100.113.37.115,~/capital/(+~/capital-kyc/отдельной папкой, build context/root/capital-kyc). - Домены:
bo./app./kyc.algorys.ccчерез named Cloudflare Tunnel (публичных портов нет; сервисы слушают только127.0.0.1). - Секреты -
capital-prod:~/capital/.env(имена вОбзор платформы - единый пульт.md).
Стандартный деплой (по шагам)
# 1. Локально: тесты зелёные (bo + cabinet), ветки слиты в main головного.
# 2. rsync репо на prod (без .git/.venv/.env - их на сервере свои):
rsync -a --delete --exclude '.git' --exclude '.venv*' --exclude '.env' \
/mnt/secure/work/capital/ capital-prod:capital/
# 3. Собрать образы:
ssh capital-prod 'cd ~/capital && docker compose build'
# 4. Применить миграции ДО рестарта веб-сервисов (one-off, минуя сид - см. гоча):
ssh capital-prod 'cd ~/capital && docker compose run --rm --no-deps backoffice alembic upgrade head'
# 5. Поднять:
ssh capital-prod 'cd ~/capital && docker compose up -d'
# 6. Смоук:
ssh capital-prod 'curl -s 127.0.0.1:18200/health; curl -s 127.0.0.1:18101/health; curl -s 127.0.0.1:18099/health'
Порядок деплоя новой таблицы: build → run --rm alembic upgrade → up -d.
🐞 Гоча: сид-крашлуп при новой таблице
На stage/prod AUTO_CREATE_TABLES=false, а сид-функции на старте
(_seed_tariffs/_seed_fx_rates) запрашивают таблицы. Если добавил новую таблицу+сид
и попытаешься накатить миграцию через docker compose exec в уже-запущенном
контейнере - контейнер крашлупит (таблицы ещё нет). Решение: гнать миграцию
через one-off docker compose run --rm --no-deps backoffice alembic upgrade head
(запускает alembic вместо uvicorn, минуя сид), потом up -d backoffice.
🐞 Гоча: дрейф compose на проде
Compose на проде исторически дрейфовал (cards/rail env, no-new-privileges,
backoffice-порт 18200). Дрейф принят в репо коммитом - rsync больше его не
затирает. Если снова правишь compose на сервере руками - сразу отрази в репо,
иначе следующий rsync откатит.
🐞 Гоча: .env с <> ломает shell-сорсинг
Строка SMTP_FROM=Capital <no-reply@algorys.cc> ломает . ./.env (символы <>).
В ssh-скриптах НЕ сорсить весь .env - грепать нужные переменные.
Смоук авторизованным логином
После деплоя реально открыть затронутые страницы (не только healthcheck - зелёный
health ≠ страница рендерится, см. правило про модели ORM). Демо-логин кабинета -
в handoff-файлах проекта (в KB не хранится). Проверять минимум: /, /convert,
/accounts/open, /transfer, /statement, /cards = 200.
Владение демо-продом
app.algorys.cc закреплён за одной веткой (исторически cabinet-design). Другие
ветки тестируются на отдельном stage-контейнере (дважды 15.09 параллельные сессии
роняли демо). Правило параллельной работы - processes/03.
Связанное
- Миграции:
runbooks/MIGRATIONS.md. - Откат:
runbooks/rollback.md. - Бэкапы/restore:
runbooks/backup-restore.md. - pgBackRest/PITR:
deploy/pgbackrest/README.mdв головном репо.