Docker Compose¶
Сервисы¶
flowchart LR
App[aima-app]
Worker[aima-celery-worker]
Beat[aima-celery-beat]
Redis[aima-redis]
PG[aima-postgres]
Chroma[aima-chroma volume]
App --> Redis
Worker --> Redis
Beat --> Redis
App --> PG
App --> Chroma
App --> Storage[(aima-data / storage)]
Worker --> Storage
| Сервис | Образ / build | Назначение |
|---|---|---|
app (aima-app) |
aima-app:latest |
FastAPI + static |
| celery_worker | same | Celery worker |
| celery_beat | same | Celery Beat (бэкап, self-heal) |
redis (aima-redis) |
redis:7-alpine | Брокер, кэш |
postgres (aima-postgres) |
postgres | Prod DB |
mock_rag (aima-mock-rag) |
profile mock-rag |
Демо внешний RAG |
Файлы¶
| Файл | Назначение |
|---|---|
docker-compose.yml |
Локальная разработка / база |
docker-compose.prod.yml |
Продакшен VPS overlay |
Dockerfile |
Multi-stage build |
Локальный запуск¶
cp .env.example .env
# Отредактируйте SECRET_KEY, AGE keys
docker compose up -d --build
docker compose logs -f app
Приложение: http://localhost:8001
Опционально mock RAG:
docker compose --profile mock-rag up -d mock_rag
Продакшен¶
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
Volumes и mounts¶
| Volume / mount | Путь | Данные |
|---|---|---|
aima-data / ./medinsight.db |
БД (SQLite path из .env.example) |
|
aima-postgres |
PostgreSQL data | |
aima-chroma |
Chroma RAG | |
./storage |
Документы, DICOM | |
./backups / aima-backups |
Архивы | |
./site:/app/site:ro |
Собранная MkDocs-документация |
Warning
Не удаляйте volumes при docker compose down без бэкапа.
Переменные в compose¶
Передаются через env_file: .env или environment: в compose-файле.
Перезапуск vs пересоздание
docker compose restart app не подхватывает новые ключи из .env.
Используйте docker compose up -d --force-recreate app celery_worker
или ./deploy.sh production.
Сборка¶
Dockerfile оптимизирован для VPS:
PIP_DEFAULT_TIMEOUT=300PIP_RETRIES=5
Полезные команды¶
# Пересборка одного сервиса
docker compose build app
# Shell в контейнере
docker compose exec app bash
# Миграции (legacy или Alembic)
docker compose exec app bash -c 'python scripts/run_alembic_migrate.py' # если ALEMBIC_ENABLED=true
# иначе deploy.sh / lifespan применяют create_all + app/db/migrations
# Очистка (без volumes)
./scripts/docker_cleanup.sh deploy
Healthcheck¶
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8001/health/ready"]
interval: 30s
timeout: 10s
retries: 3
Порты¶
| Сервис | Host:Container |
|---|---|
| app | 8001:8001 (APP_PORT) |
| redis | 6380:6379 (REDIS_HOST_PORT) |
| mock_rag | см. compose profile |