Перейти к содержанию

Деплой (администратор)

Руководство для DevOps и системных администраторов.

Варианты деплоя

Способ Когда использовать
GitHub Actions Продакшен (рекомендуется)
deploy.sh Ручной деплой на VPS
Docker Compose Локально / staging

Быстрый прод-деплой (GitHub Actions)

  1. Настройте Secrets в репозитории valera7623/AI-medical-assistant:
  2. VPS_HOST, VPS_USER, VPS_SSH_KEY
  3. SECRET_KEY, APP_PORT, CORS_ORIGINS
  4. Push в ветку main запускает .github/workflows/deploy.yml.
  5. Pipeline: testdeploy (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.

Подробнее