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

Развёртывание на VPS

Руководство по развёртыванию AegisAI на выделенном VPS (Ubuntu 22.04+).

Вариант B — рядом с MedInsight

Если на VPS уже работает MedInsight + Traefik, используйте готовый сценарий: deploy/README.md
(docker-compose.prod.yml, общий Traefik, лимиты RAM, поддомен для AegisAI).

Требования к серверу

Ресурс Минимум Рекомендуется
CPU 2 vCPU 4 vCPU
RAM 4 GB 8 GB
Диск 40 GB SSD 100 GB SSD
ОС Ubuntu 22.04 LTS Ubuntu 24.04 LTS

Подготовка сервера

1. Обновление системы

sudo apt update && sudo apt upgrade -y
sudo apt install -y git curl ufw

2. Установка Docker

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

3. Firewall

sudo ufw allow 22/tcp    # SSH
sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS
sudo ufw enable

Не открывайте

Порты 5432 (PostgreSQL), 6379 (Redis), 8181 (OPA) должны быть доступны только внутри Docker-сети.

Развёртывание

1. Клонирование

cd /opt
sudo git clone https://github.com/valera7623/AegisAI.git
sudo chown -R $USER:$USER aegisai
cd aegisai

2. Конфигурация

cp .env.example .env
nano .env

Production .env:

DATABASE_URL=postgresql+asyncpg://aegisai:STRONG_PASSWORD@postgres:5432/aegisai
REDIS_URL=redis://redis:6379/0
SECRET_KEY=<generate-64-char-random>
ADMIN_API_KEY=<generate-random>
WEBHOOK_SECRET=<generate-random>
ENVIRONMENT=production
AUDIT_SIGNING_ENABLED=true
AUDIT_RETENTION_DAYS=365
SUPER_ADMIN_EMAIL=admin@yourcompany.com
SUPER_ADMIN_PASSWORD=<strong-password>
LOG_LEVEL=INFO
LOG_JSON_FORMAT=true

Генерация секретов:

python3 -c "import secrets; print(secrets.token_urlsafe(48))"

3. Запуск

Production (MedInsight + Traefik):

chmod +x deploy.sh
./deploy.sh

Или вручную:

docker compose -f docker-compose.prod.yml up --build -d
docker compose -f docker-compose.prod.yml exec app poetry run alembic upgrade head

SSO: укажите SSO_CALLBACK_URL в .env — см. SSO.

4. Проверка

curl http://localhost:8000/api/v1/health/ready

Nginx + TLS (Let's Encrypt)

Установка

sudo apt install -y nginx certbot python3-certbot-nginx

Конфигурация

# /etc/nginx/sites-available/aegisai
server {
    listen 80;
    server_name aegisai.yourcompany.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name aegisai.yourcompany.com;

    ssl_certificate     /etc/letsencrypt/live/aegisai.yourcompany.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/aegisai.yourcompany.com/privkey.pem;

    # API
    location /api/ {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # WebSocket
    location /api/v1/ws {
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }

    # Webhooks
    location /webhooks/ {
        proxy_pass http://127.0.0.1:8000;
        client_max_body_size 10m;
    }

    # Swagger (опционально, закройте в production)
    location /docs {
        proxy_pass http://127.0.0.1:8000;
    }

    # Frontend
    location / {
        root /opt/aegisai/frontend/dist;
        try_files $uri $uri/ /index.html;
    }
}
sudo ln -s /etc/nginx/sites-available/aegisai /etc/nginx/sites-enabled/
sudo certbot --nginx -d aegisai.yourcompany.com
sudo nginx -t && sudo systemctl reload nginx

Сборка фронтенда

cd /opt/aegisai/frontend
npm install
VITE_API_URL=https://aegisai.yourcompany.com npm run build

Systemd (автозапуск)

# /etc/systemd/system/aegisai.service
[Unit]
Description=AegisAI Platform
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/aegisai
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target
sudo systemctl enable aegisai
sudo systemctl start aegisai

Бэкапы (cron)

# /etc/cron.daily/aegisai-backup
#!/bin/bash
BACKUP_DIR=/backups/aegisai
mkdir -p $BACKUP_DIR
cd /opt/aegisai
docker compose exec -T postgres pg_dump -U aegisai -Fc aegisai \
  > "$BACKUP_DIR/aegisai_$(date +%Y%m%d).dump"
find $BACKUP_DIR -mtime +30 -delete

Обновление

cd /opt/aegisai

# Бэкап
docker compose exec -T postgres pg_dump -U aegisai -Fc aegisai > /backups/pre-update.dump

# Обновление
git pull origin main
docker compose up --build -d
docker compose exec app poetry run alembic upgrade head

# Пересборка фронтенда (если изменился)
cd frontend && npm run build

Мониторинг

# Ресурсы
docker stats --no-stream

# Логи
docker compose logs --tail=50 app

# Health
curl -s https://aegisai.yourcompany.com/api/v1/health/ready | jq

Подробнее: Мониторинг, Бэкапы.