Деплой
CI/CD Workflows
| Workflow | Триггер | Назначение |
|---|---|---|
ci.yml | PR в main / push в main | Branch-naming guard + проверка форматирования |
deploy-dev.yml | Push в main / manual (ref) | Деплой инфраструктуры на dev |
release.yml | Manual (version) | Тег vX.Y.Z на HEAD main |
deploy-prod.yml | Manual (tag) | Guard (тег на main) + деплой инфраструктуры на prod |
Ветки — trunk-based
main — единственная долгоживущая ветка, ветки dev НЕТ. Фиче-ветки (feat/, fix/, hotfix/, chore/, docs/, ci/, …) идут PR-ом сразу в main. Prod НИКОГДА не деплоится из ветки — только из тега.
feat/* → PR → main (auto-deploy dev) → release.yml (тег vX.Y.Z) → deploy-prod (tag=vX.Y.Z)Автоматический деплой (Dev)
Каждый push в main запускает деплой на dev-сервер. Прогнать WIP-ветку без мержа:
bash
gh workflow run deploy-dev.yml -f ref=<ветка>Деплой в Prod (из тега)
bash
gh workflow run release.yml -f version=X.Y.Z # создаёт тег vX.Y.Z на main HEAD
gh workflow run deploy-prod.yml -f tag=vX.Y.Z # guard: тег должен быть ancestor mainФлаг -f only_deploy=true поднимает уже лежащие на сервере файлы без копирования.
Hotfix, когда в main лежит незарелизенный WIP: ветка от живого прод-тега (git checkout -b hotfix/x v1.4.0) → фикс → PR в main → новый тег → deploy-prod.
GitHub Secrets
Для работы CI/CD необходимы следующие секреты:
SSH доступ
| Секрет | Описание |
|---|---|
| DEV_INTEG_HOST | IP dev-сервера |
| DEV_INTEG_USER | SSH пользователь dev |
| DEV_INTEG_KEY | SSH приватный ключ dev |
| PROD_INTEG_HOST | IP prod-сервера |
| PROD_INTEG_USER | SSH пользователь prod |
| PROD_INTEG_KEY | SSH приватный ключ prod |
Doppler
| Секрет | Описание |
|---|---|
| DEV_DOPPLER_TOKEN | Doppler токен dev |
| PROD_DOPPLER_TOKEN | Doppler токен prod |
Cloudflare (для документации)
| Секрет | Описание |
|---|---|
| CLOUDFLARE_PAGES_API_TOKEN | API токен Cloudflare Pages |
| CLOUDFLARE_ACCOUNT_ID | ID аккаунта Cloudflare |
Процесс деплоя
- Checkout — получение кода
- SSH Connect — подключение к серверу
- Create Directory — создание
/opt/integ/ - Copy Files — копирование docker-compose.yml
- Generate .env — получение секретов из Doppler
- Docker Compose Up — запуск сервисов
- Health Check — проверка работоспособности
Локальный запуск
bash
# Установка зависимостей
npm install
# Генерация .env
./scripts/generate-env.sh dev
# Проверка форматирования
npm run format:check
# Форматирование кода
npm run formatHealth Check
Скрипт scripts/health-check.sh проверяет:
- Доступность Traefik
- Ответ от API
- Ответ от Admin
- Статус PostgreSQL (только dev)