Развёртывание на 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. Обновление системы¶
2. Установка 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. Конфигурация¶
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
Генерация секретов:
3. Запуск¶
Production (MedInsight + Traefik):
Или вручную:
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. Проверка¶
Nginx + TLS (Let's Encrypt)¶
Установка¶
Конфигурация¶
# /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
Сборка фронтенда¶
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
Бэкапы (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
Подробнее: Мониторинг, Бэкапы.