Skip to main content

Docker Compose Deployment

Deploy Aurora locally using Docker Compose for development, testing, or small-scale production use.

Prerequisites

  • Docker Engine 20.10 or newer
  • Docker Compose v2.0 or newer
  • 8GB RAM minimum (16GB recommended)
  • 20GB free disk space

Quick Start

1

Clone the repository

git clone https://github.com/Arvo-AI/aurora.git
cd aurora
2

Initialize environment

Run the initialization script to generate secure secrets:
make init
This creates a .env file from .env.example and generates:
  • POSTGRES_PASSWORD
  • FLASK_SECRET_KEY
  • AUTH_SECRET
  • SEARXNG_SECRET
3

Configure LLM API key

Edit .env and add at least one LLM API key:
# Required - choose at least one:
OPENROUTER_API_KEY=sk-or-v1-...
# OR
OPENAI_API_KEY=sk-...
# OR
ANTHROPIC_API_KEY=sk-ant-...
# OR
GOOGLE_AI_API_KEY=...
Get API keys from:
4

Start Aurora

For development:
make dev
For production-like deployment (prebuilt images):
make prod-prebuilt
Or build from source:
make prod-local
5

Access the UI

Wait 30-60 seconds for services to start, then open:Additional UIs:

Architecture

The Docker Compose stack includes:
ServiceDescriptionPort
frontendNext.js web UI3000
aurora-serverFlask REST API5080
chatbotWebSocket chatbot service5006
celery_workerBackground task workers-
celery_beatTask scheduler-
postgresPostgreSQL database5432
redisTask queue & cache6379
weaviateVector database8080
t2v-transformersML embeddings service-
vaultHashiCorp Vault secrets8200
seaweedfs-masterObject storage master9333
seaweedfs-volumeObject storage volume8081
seaweedfs-filerS3-compatible API8333, 8888
memgraphGraph database7687
memgraph-labGraph visualization3001
searxngWeb search engine8082

Configuration

Environment Variables

Key configuration options in .env:

Required

# Database
POSTGRES_USER=aurora
POSTGRES_PASSWORD=<generated-by-make-init>
POSTGRES_DB=aurora_db

# Security
FLASK_SECRET_KEY=<generated-by-make-init>
AUTH_SECRET=<generated-by-make-init>

# LLM API (at least one required)
OPENROUTER_API_KEY=sk-or-v1-...
LLM_PROVIDER_MODE=openrouter

URLs

FRONTEND_URL=http://localhost:3000
BACKEND_URL=http://aurora-server:5080
NEXT_PUBLIC_BACKEND_URL=http://localhost:5080
NEXT_PUBLIC_WEBSOCKET_URL=ws://localhost:5006

Object Storage

# Default: SeaweedFS (included in docker-compose)
STORAGE_BUCKET=aurora-storage
STORAGE_ENDPOINT_URL=http://seaweedfs-filer:8333
STORAGE_ACCESS_KEY=admin
STORAGE_SECRET_KEY=admin
STORAGE_REGION=us-east-1
STORAGE_USE_SSL=false
For production, use external S3-compatible storage:
# AWS S3
STORAGE_ENDPOINT_URL=https://s3.amazonaws.com
STORAGE_ACCESS_KEY=<your-aws-key>
STORAGE_SECRET_KEY=<your-aws-secret>
STORAGE_USE_SSL=true

Vault

VAULT_ADDR=http://vault:8200
VAULT_TOKEN=<generated-on-first-run>
VAULT_KV_MOUNT=aurora
On first startup, get the Vault token:
docker logs aurora-vault-init
Copy the root token and add it to .env.

Common Operations

View Logs

# All services
make logs

# Specific service
make logs aurora-server
make logs celery_worker

Restart Services

# Restart all
make restart

# Rebuild and restart specific service
make rebuild-server

Stop Services

make down

Clean Up

# Stop and remove volumes
make clean

# Full cleanup (containers, volumes, images)
make nuke

Fresh Rebuild

# Development
make dev-fresh

# Production
make prod-fresh

Development vs Production

Development Mode (make dev)

  • Uses docker-compose.yaml
  • Hot reload enabled for code changes
  • Source code mounted as volumes
  • Debug logging enabled
  • No build optimizations

Production Mode (make prod-local)

  • Uses docker-compose.prod-local.yml
  • Builds optimized production images
  • No source code mounts
  • Production logging
  • Automatic restarts
  • Health checks enabled

Prebuilt Images (make prod-prebuilt)

  • Pulls images from GitHub Container Registry
  • No build step required
  • Use VERSION=v1.2.3 to pin a specific release:
    VERSION=v1.2.3 make prod-prebuilt
    

Troubleshooting

Services Not Starting

Check if .env exists:
ls -la .env
If missing, run:
make init

Port Conflicts

If ports are already in use, edit .env to change:
FLASK_PORT=5080  # Backend API
# Frontend is always :3000 (edit docker-compose.yaml ports section)

Database Connection Errors

Check Postgres is healthy:
docker logs aurora-postgres
Reset database:
make clean
make dev

Vault Not Initialized

On first run, Vault auto-initializes. Get the token:
docker logs aurora-vault-init
Add to .env:
VAULT_TOKEN=hvs.xxx...
Restart services:
make restart

SeaweedFS Bucket Missing

The aurora-storage bucket is auto-created. If missing:
docker logs aurora-seaweedfs-init
Manually create:
docker exec -it aurora-seaweedfs-filer sh
weed shell
> s3.bucket.create -name aurora-storage

Out of Memory

Reduce resource usage by limiting services:
# In docker-compose.yaml, comment out optional services:
# - memgraph-lab
# - searxng
Or increase Docker memory limit (Docker Desktop: Settings → Resources).

Updating

Update to Latest

git pull origin main
make down
make dev  # or make prod-prebuilt

Update Single Service

# Pull latest image
docker compose pull aurora-server

# Restart
docker compose up -d aurora-server

Data Persistence

Data is stored in Docker volumes:
  • postgres-data - PostgreSQL database
  • weaviate_data - Vector embeddings
  • vault-data - Secrets storage
  • vault-init - Vault initialization state
  • seaweedfs_master_data - Object storage metadata
  • seaweedfs_volume_data - Object storage files
  • seaweedfs_filer_data - Object storage index
  • memgraph-data - Graph database
  • terraform-workdir - Terraform state files
Backup volumes:
docker run --rm -v aurora_postgres-data:/data -v $(pwd):/backup \
  alpine tar czf /backup/postgres-backup.tar.gz /data

Next Steps

Production Deployment

Best practices for production deployments

Kubernetes Deployment

Deploy Aurora on Kubernetes

Scaling

Scale Aurora for high availability

Configuration

Complete environment variable reference