Пред/во время/после выкатки: предусловия (.env/issuer/сертификаты/бэкап-таймер), тесты+миграции перед релизом, бэкап, деплой через CI, smoke после (health/ready, логин, ключевые потоки, permission 403, rate-limit 429), откат, прод. Ссылается на secrets.md / backup-restore.md / openiddict-keys.md / stage-setup.md. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.2 KiB
4.2 KiB
Чек-лист релиза food-market
Практический список перед/во время/после выкатки. Деплой автоматизирован
(push в main → GitHub Actions: CI → образы → deploy stage; см. stage-setup.md).
Прод — после подтверждения на stage.
0. Предусловия (один раз на окружение)
deploy/.envзаполнен изdeploy/.env.example, права600(см. secrets.md).POSTGRES_PASSWORD— не дефолтный.OPENIDDICT_ISSUER= публичный URL админки (за прокси обязателен).- OpenIddict-сертификаты на месте или генерируются self-signed (см. openiddict-keys.md).
- Таймер бэкапа установлен и активен:
systemctl list-timers food-market-backup.timer(см. backup-restore.md). - HTTPS на nginx-проксе настроен (вне этого репо).
1. Перед релизом (на ветке/в PR)
dotnet buildзелёный (api + зависимости; POS на Linux не собирается — это норма).- Юнит-тесты зелёные:
dotnet test tests/food-market.UnitTests. - Интеграционные тесты зелёные:
dotnet test tests/food-market.IntegrationTests(нужен Docker для Testcontainers). - Релевантные e2e-сценарии зелёные (
tests/e2e/run.sh <name>). - Новые EF-миграции просмотрены: идемпотентны, без потери данных, при ручном написании —
[Migration("ID")]+[DbContext](иначеMigrate()не подхватит). - Изменения секретов/конфигов отражены в
.env.exampleиsecrets.md. - CHANGELOG/release notes обновлены (если ведутся).
2. Бэкап перед выкаткой
- Свежий бэкап БД:
sudo systemctl start food-market-backup.service→ проверить файл вFM_BACKUP_DIR. - Проверить, что дамп валиден:
pg_restore --list(см. backup-restore.md).
3. Релиз
- Смёрджить в
main(или прогнатьdeploy-stage.yml). CI соберёт образы и задеплоит на stage. - Дождаться Telegram-уведомления «Deploy stage OK».
- Миграции применяются автоматически на старте API (
Migrate()), отдельный шаг не нужен.
4. После выкатки (smoke)
curl -fsS https://<host>/health/ready→200 Healthy(БД + миграции).curl https://<host>/health/live→200.- Логин: получить токен на
/connect/token,/api/me→200с ожидаемыми claim'ами иorg_id. - Ключевые потоки: создать товар, провести приёмку, провести розничную продажу — без ошибок.
- Permission-гейт работает: пользователь без права получает
403(не500/200). - Антибрутфорс: >5 логинов/мин с одного IP →
429. - Логи без необработанных исключений:
docker logs food-market-api | tail.
5. Откат (если что-то не так)
- Откатить теги образов: задать прежние
API_TAG/WEB_TAGв.env,docker compose up -d. - Если миграция повредила данные — восстановить БД из бэкапа п.2 (см. backup-restore.md), затем откатить образ.
- Сообщить в Telegram-канал статус.
6. Прод (после OK на stage)
- Повторить пп. 2–5 на прод-окружении.
- Мониторить первые ~30 мин:
/health/ready, логи, диск (df -h).