Docker Compose¶
Сервисы¶
flowchart LR
App[app]
Worker[worker]
Beat[beat]
Redis[redis]
App --> Redis
Worker --> Redis
Beat --> Redis
App --> DB[(volume: db)]
App --> Storage[(volume: storage)]
Worker --> Storage
| Сервис | Образ / build | Назначение |
|---|---|---|
| app | Dockerfile | FastAPI + static |
| worker | Dockerfile | Celery worker |
| beat | Dockerfile | Celery Beat (бэкап, self-heal) |
| redis | redis:7-alpine | Брокер, кэш |
Файлы¶
| Файл | Назначение |
|---|---|
docker-compose.yml |
Локальная разработка |
docker-compose.prod.yml |
Продакшен VPS |
Dockerfile |
Multi-stage build |
Локальный запуск¶
cp .env.example .env
# Отредактируйте SECRET_KEY, AGE keys
docker compose up -d --build
docker compose logs -f app
Приложение: http://localhost:8000
Продакшен¶
docker compose -f docker-compose.prod.yml up -d --build
Volumes¶
| Volume | Путь | Данные |
|---|---|---|
./medinsight.db или named |
БД | |
./storage |
Документы, DICOM | |
./backups |
Архивы |
Warning
Не удаляйте volumes при docker compose down без бэкапа.
Переменные в compose¶
Передаются через env_file: .env или environment: в compose-файле.
Сборка¶
Dockerfile оптимизирован для VPS:
PIP_DEFAULT_TIMEOUT=300PIP_RETRIES=5
Полезные команды¶
# Пересборка одного сервиса
docker compose build app
# Shell в контейнере
docker compose exec app bash
# Миграции
docker compose exec app python -m app.db.migrate
# Очистка (без volumes)
./scripts/docker_cleanup.sh deploy
Healthcheck¶
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health/ready"]
interval: 30s
timeout: 10s
retries: 3
Порты¶
| Сервис | Host:Container |
|---|---|
| app | 8000:8000 |
| redis | 6379 (internal) |