Docker Compose¶
Services¶
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
| Service | Image / build | Purpose |
|---|---|---|
app (aima-app) |
aima-app:latest |
FastAPI + static |
| celery_worker | same | Celery worker |
| celery_beat | same | Celery Beat (backup, self-heal) |
redis (aima-redis) |
redis:7-alpine | Broker, cache |
postgres (aima-postgres) |
postgres | Prod DB |
mock_rag (aima-mock-rag) |
profile mock-rag |
Demo external RAG |
Files¶
| File | Purpose |
|---|---|
docker-compose.yml |
Local development / base |
docker-compose.prod.yml |
Production VPS overlay |
Dockerfile |
Multi-stage build |
Local run¶
cp .env.example .env
# Edit SECRET_KEY, AGE keys
docker compose up -d --build
docker compose logs -f app
Application: http://localhost:8001
Optional mock RAG:
docker compose --profile mock-rag up -d mock_rag
Production¶
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
Volumes and mounts¶
| Volume / mount | Path | Data |
|---|---|---|
aima-data / ./medinsight.db |
DB (SQLite path from .env.example) |
|
aima-postgres |
PostgreSQL data | |
aima-chroma |
Chroma RAG | |
./storage |
Documents, DICOM | |
./backups / aima-backups |
Archives | |
./site:/app/site:ro |
Built MkDocs documentation |
Warning
Do not remove volumes on docker compose down without a backup.
Compose variables¶
Passed via env_file: .env or environment: in the compose file.
Restart vs recreate
docker compose restart app does not pick up new .env keys.
Use docker compose up -d --force-recreate app celery_worker
or ./deploy.sh production.
Build¶
Dockerfile tuned for VPS:
PIP_DEFAULT_TIMEOUT=300PIP_RETRIES=5
Useful commands¶
docker compose build app
docker compose exec app bash
docker compose exec app bash -c 'python scripts/run_alembic_migrate.py'
./scripts/docker_cleanup.sh deploy
Healthcheck¶
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8001/health/ready"]
interval: 30s
timeout: 10s
retries: 3
Ports¶
| Service | Host:Container |
|---|---|
| app | 8001:8001 (APP_PORT) |
| redis | 6380:6379 (REDIS_HOST_PORT) |
| mock_rag | see compose profile |