Деплой (администратор)¶
Руководство для DevOps и системных администраторов.
Варианты деплоя¶
| Способ | Когда использовать |
|---|---|
| GitHub Actions | Продакшен (рекомендуется) |
| deploy.sh | Ручной деплой на VPS |
| Docker Compose | Локально / staging |
Быстрый прод-деплой (GitHub Actions)¶
- Настройте Secrets в репозитории
valera7623/AI-medical-assistant: VPS_HOST,VPS_USER,VPS_SSH_KEYSECRET_KEY,APP_PORT,CORS_ORIGINS- Push в ветку
mainзапускает.github/workflows/deploy.yml. - Pipeline: test → deploy (SSH на VPS).
gh run list --workflow=deploy.yml --limit 1
gh run watch --exit-status
Ручной деплой на VPS¶
ssh aima-vps
cd ~/AI_medical_assistant
git fetch origin && git reset --hard origin/main
./deploy.sh production
Скрипт deploy.sh:
- подтягивает код (
git fetch/ merge); - в production собирает
DATABASE_URLизPOSTGRES_PASSWORD(не затирает пароль volume PostgreSQL); - делает
compose down+build+up -d(контейнеры пересоздаются с актуальным.env); - применяет SQL-миграции из
app/db/migrations/(или Alembic); - вызывает
scripts/docker_cleanup.sh deploy.
Переменные окружения на VPS¶
# Добавить ключи из .env.example, сохранив секреты
python scripts/sync_env_from_example.py
# Проверить, что контейнер видит настройку (пример: MFA)
docker compose exec app python -c "from app.config import settings; print(settings.MFA_ENFORCED)"
Если меняли .env вручную без полного деплоя — пересоздайте app/worker:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --force-recreate app celery_worker
Проверка после деплоя¶
curl -s http://localhost:8001/health/ready
# {"status":"ready","database":"ok","redis":"ok"}
Структура на VPS¶
~/AI_medical_assistant/
├── .env # секреты (не в git)
├── docker-compose.prod.yml
├── site/ # MkDocs (монтируется :ro)
├── storage/ # зашифрованные файлы + DICOM
├── backups/ # age-архивы
└── deploy.sh
Порты¶
| Сервис | Порт (по умолчанию) |
|---|---|
| FastAPI (app) | 8001 |
| Redis (host) | 6380 → 6379 в контейнере |
Nginx/Caddy/Traefik на VPS проксирует HTTPS → localhost:8001.