🚀 Деплой на прод (capital-prod)

Текущий деплой - rsync → build → миграция → up. Целевой (месяц 1) - GitHub Actions → GHCR → staging → prod (см. Архитектура Capital v1.0.md §8). Деплой идёт только из головного репозитория capital, одной рукой (правила параллельной работы - processes/03 - Параллельная разработка.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.

Связанное