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

Docker

Развёртывание AegisAI с помощью Docker Compose.

Предварительные требования

  • Docker 24+
  • Docker Compose v2+
  • 4 GB RAM (минимум)

Быстрый старт

cp .env.example .env
docker compose up --build

Сервисы

docker-compose.yml определяет пять сервисов:

postgres

image: postgres:15-alpine
ports: ["5432:5432"]
environment:
  POSTGRES_USER: aegisai
  POSTGRES_PASSWORD: aegisai_pass
  POSTGRES_DB: aegisai
volumes:
  - postgres_data:/var/lib/postgresql/data
healthcheck:
  test: ["CMD-SHELL", "pg_isready -U aegisai"]

redis

image: redis:7-alpine
ports: ["6379:6379"]
volumes:
  - redis_data:/data
healthcheck:
  test: ["CMD", "redis-cli", "ping"]

opa

image: openpolicyagent/opa:0.68.0
ports: ["8181:8181"]
command: ["run", "--server", "--addr", "0.0.0.0:8181"]

app (FastAPI)

build: .
ports: ["8000:8000"]
depends_on:
  postgres: {condition: service_healthy}
  redis: {condition: service_healthy}
  opa: {condition: service_started}
environment:
  DATABASE_URL: postgresql+asyncpg://aegisai:aegisai_pass@postgres:5432/aegisai
  REDIS_URL: redis://redis:6379/0
  OPA_URL: http://opa:8181
command: >
  sh -c "poetry run alembic upgrade head &&
         poetry run python scripts/init_super_admin.py &&
         poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload"

frontend (Vite)

build: {context: ./frontend}
ports: ["5173:5173"]
environment:
  VITE_PROXY_TARGET: http://app:8000
depends_on: [app]

Управление

docker compose up -d
docker compose down
docker compose up --build -d
docker compose logs -f app

Переменные окружения

Задайте в .env или в docker-compose.yml:

SECRET_KEY=your-production-secret
ADMIN_API_KEY=your-admin-key
WEBHOOK_SECRET=your-webhook-secret
SUPER_ADMIN_EMAIL=admin@company.com
SUPER_ADMIN_PASSWORD=SecurePassword123!
ENVIRONMENT=production
AUDIT_RETENTION_DAYS=365
ENABLE_GUARD=true
GUARD_MODEL_PATH=./models/guard/guard_model.pkl

Volumes

Volume Назначение
postgres_data Данные PostgreSQL
redis_data Данные Redis

Для персистентности ML-моделей и экспортов примонтируйте:

app:
  volumes:
    - ./models:/app/models
    - ./storage:/app/storage

Production Docker Compose

Для production уберите --reload и dev-volumes:

app:
  command: >
    sh -c "poetry run alembic upgrade head &&
           poetry run python scripts/init_super_admin.py &&
           poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4"
  restart: unless-stopped

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

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

Раздайте frontend/dist/ через Nginx или CDN.

Dockerfile

Основной Dockerfile в корне репозитория:

FROM python:3.11-slim
WORKDIR /app
RUN pip install poetry
COPY pyproject.toml poetry.lock ./
RUN poetry install --no-dev
COPY . .
EXPOSE 8000

Health Checks

# Все сервисы
docker compose ps

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

# PostgreSQL
docker compose exec postgres pg_isready -U aegisai

# Redis
docker compose exec redis redis-cli ping

Демо-данные

docker compose exec app poetry run python scripts/seed_data.py --reset

Первый запуск

При первом docker compose up автоматически выполняются миграции Alembic и создание суперадминистратора.