Чеклист production cutover¶
AgentBI на общем VPS (Traefik HTTPS). Живой пример: https://agentbi.online.
Предварительные условия¶
- DNS — A-запись для
AGENTBI_DOMAIN→ публичный IP VPS (см. deploy/DNS.md). - Secrets на VPS — в
/home/smdg/agentbi:bash cp .env.production.example .env # Обязательно: POSTGRES_PASSWORD, REDIS_PASSWORD, SECRET_KEY, ADMIN_PASSWORD # Обязательно: AGENTBI_DOMAIN, CORS_ORIGINS=https://$AGENTBI_DOMAIN # Рекомендуется: ADMIN_API_KEY (bootstrap platform tenant) # SSO (Google): GOOGLE_SSO_ENABLED=true, GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET # SSO_PUBLIC_BASE_URL / SSO_FRONTEND_URL = https://$AGENTBI_DOMAIN # Billing: BILLING_ENABLED=true, YOOKASSA_SHOP_ID, YOOKASSA_SECRET_KEY # BILLING_SUCCESS_URL / BILLING_CANCEL_URL → …/settings.html?billing=success|cancel # Observability: SENTRY_DSN, LOG_JSON=true, JWT_EXPIRE_MINUTES=480 chmod 600 .env - Google OAuth — redirect URI:
https://$AGENTBI_DOMAIN/api/v1/auth/sso/callback - ЮKassa — webhook:
https://$AGENTBI_DOMAIN/api/v1/billing/webhooks/yookassa
События:payment.succeeded,payment.canceled
Развёртывание¶
- Новый пароль БД — если volume Postgres использовал слабый пароль, выполните
ALTER USERили один раз очистите volumes (потеря данных). - Deploy — push в
main(CI → Deploy) или:bash COMPOSE_FILE=docker-compose.prod.yml ./deploy.shDeploy собирает SHA-тегированные образы, делает бэкап БД перед migrate, запускает Alembic, записываетVERSION. - Проверка
curl -sf https://$AGENTBI_DOMAIN/api/v1/health/readycurl -sf https://$AGENTBI_DOMAIN/api/v1/version→ совпадает с SHA деплоя- Откройте UI, войдите;
/docsдолжен возвращать 404 в production - SSO: кнопка Google; сначала сопоставьте email-домены (Users → Organizations)
- Изоляция cross-tenant ingest (
bt_keys) - Settings → Billing / годовой checkout ЮKassa
- Settings → Domain (опциональный vanity host — только БД)
Tenant + SSO mapping¶
Предпочтительно через UI: Users → Organizations → SSO email domains (через запятую, уникально между tenants).
bash
curl -X POST https://$AGENTBI_DOMAIN/api/v1/tenants \
-H "X-Admin-Key: $ADMIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Acme Corp","allowed_email_domains":["acme.com"]}'
Пользователи SSO @acme.com автоматически создаются в этом tenant. Неизвестные домены отклоняются. Роли IdP ограничены admin (никогда super_admin).
Ops¶
- Бэкапы — cron
./scripts/backup_postgres.sh+ pre-migrate dumps изdeploy.sh; копируйте off-host. - Docker prune —
./scripts/vps/install_vps_ops.sh(ежедневный safe prune). - Swap —
sudo /home/smdg/bin/setup-swapfileодин раз (2G, низкий swappiness). - Ротация — смените bootstrap admin password в приложении.
- Мониторинг — алерты Sentry + uptime на
/api/v1/health/readyв течение 48ч после cutover.
Откат¶
```bash ./scripts/rollback.sh --sha "$(cat VERSION.prev)"
опционально: --restore backups/backup_….dump.gz¶
```
Или повторный деплой предыдущего git SHA через Actions (workflow_dispatch / prior commit).