Skip to content

Docker Deployment

Deploy Airbeeps with Docker Compose for production use. The stack includes all required services.

Services

ServiceImageDescription
airbeepsairbeeps/appMain application (FastAPI + bundled frontend)
celery-workerairbeeps/appBackground task worker (document ingestion)
celery-beatairbeeps/appScheduled tasks (cleanup, analytics)
postgrespostgres:16PostgreSQL database
redisredis:7-alpineCache + Celery broker
qdrantqdrant/qdrantVector store
miniominio/minioS3-compatible object storage

Quick start

bash
git clone https://github.com/airbeeps/airbeeps.git
cd airbeeps

Create a .env file with required secrets:

bash
# Required secrets
AIRBEEPS_SECRET_KEY=your-secret-key-here   # openssl rand -hex 32
POSTGRES_PASSWORD=your-postgres-password

# MinIO (S3)
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
MINIO_BUCKET=airbeeps

Start the stack:

bash
docker compose up -d

Open http://localhost:8080 and sign up. The first user becomes admin.

Environment variables

The Docker Compose file sets these automatically:

VariableDocker ValueDescription
AIRBEEPS_CONFIG_ENVdockerLoads settings.docker.yaml
AIRBEEPS_ENVIRONMENTproductionProduction mode
AIRBEEPS_DATABASE_URLpostgresql+asyncpg://...PostgreSQL connection
AIRBEEPS_FILE_STORAGE_BACKENDs3MinIO storage
AIRBEEPS_REDIS_ENABLEDtrueRedis caching
AIRBEEPS_CELERY_ENABLEDtrueBackground workers

LLM provider keys should be added to your .env:

bash
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...

Health checks

The airbeeps service includes a health check:

GET /api/v1/health/ready

The service is healthy when the API responds, database is connected, and core services are reachable. PostgreSQL and Redis also have their own health checks — the app waits for these before starting.

Volumes

All data is persisted via Docker volumes:

VolumeServiceData
airbeeps-dataairbeeps, celery-workerApplication data
postgres-datapostgresDatabase
redis-dataredisCache and queues
qdrant-dataqdrantVector store index
minio-dataminioUploaded files

Celery workers

The Docker stack includes two Celery containers:

Worker

Processes background tasks (document ingestion, memory compaction):

bash
celery -A airbeeps.tasks.celery_app worker --loglevel=info --concurrency=4

Resource limits: 2 CPUs, 2 GB RAM.

Beat scheduler

Runs periodic tasks (cleanup, analytics):

bash
celery -A airbeeps.tasks.celery_app beat --loglevel=info

Resource limits: 0.5 CPU, 256 MB RAM.

MinIO setup

The minio-init service automatically creates the storage bucket on first run. It:

  1. Waits for MinIO to be ready
  2. Creates the configured bucket
  3. Sets public download access for the bucket

Access the MinIO console at http://localhost:9001 (username and password from your .env).

Scaling

Horizontal scaling

You can scale Celery workers for faster ingestion:

bash
docker compose up -d --scale celery-worker=3

Resource tuning

Adjust deploy.resources in docker-compose.yml for your hardware.

Updating

bash
git pull
docker compose build
docker compose up -d

Migrations run automatically on startup.

Backup

Back up data volumes regularly:

bash
# Database
docker compose exec postgres pg_dump -U airbeeps airbeeps > backup.sql

# All volumes
docker run --rm -v airbeeps_postgres-data:/data -v $(pwd):/backup alpine tar czf /backup/postgres.tar.gz /data

MIT License