Docker Compose Setup
Complete guide to running Orange with Docker Compose for local development.
Prerequisites
- Docker Desktop or Docker Engine installed
- Windows/Mac: Install Docker Desktop
- Linux: Install Docker Engine
Overview
Docker Compose manages all service dependencies:
- PostgreSQL 16 - Main database
- Redis 7 - Cache and Celery message broker
- OpenTelemetry Collector - Metrics and trace collection
Initial Setup
1. Clone Repository
git clone https://github.com/equalcollective/santra-be.git
cd santra-be
2. Configure Environment
# Copy environment template
cp .env.example .env
Edit .env with required values:
# Generate a secure secret key
SECRET_KEY=your-secret-key-here-change-in-production
# Azure Blob Storage (required for file uploads)
AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...
AZURE_STORAGE_CONTAINER_NAME=report-uploads
# Create first admin user
FIRST_SUPERUSER_EMAIL=admin@example.com
FIRST_SUPERUSER_PASSWORD=changeme
# Optional: Disable telemetry for local dev
OTEL_ENABLED=false
See .env.example for complete documentation of all configuration options.
3. Start Services
# Automated start (recommended)
bash scripts/start_dev_compose.sh
This script:
- Starts all services in background
- Waits for PostgreSQL to be ready
- Shows you next steps
Manual start:
docker compose -f docker-compose.dev.yml up -d
4. Install Python Dependencies
# Create virtual environment and install dependencies
uv sync
5. Run Database Migrations
# Apply all migrations
uv run alembic upgrade head
6. Start the API Server
# Start with auto-reload
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
Or use the helper script:
bash scripts/run_dev.sh
7. Start Celery Worker (Optional)
For background tasks like async report processing:
# In a new terminal
bash scripts/start_celery_worker.sh
Or manually:
uv run celery -A app.celery_app worker --loglevel=info
Service Details
PostgreSQL
Connection String:
postgresql://orange_user:orange_password@localhost:5432/orange_db
Default Credentials:
- User:
orange_user - Password:
orange_password - Database:
orange_db
Access:
# Connect via psql
docker compose -f docker-compose.dev.yml exec postgres psql -U orange_user -d orange_db
# Check health
docker compose -f docker-compose.dev.yml exec postgres pg_isready
Redis
Connection String:
redis://localhost:6379/0
Access:
# Connect via redis-cli
docker exec -it santra-be-redis-1 redis-cli
# Test connection
docker exec -it santra-be-redis-1 redis-cli ping
# Should return: PONG
OpenTelemetry Collector
Ports:
4317- OTLP gRPC receiver4318- OTLP HTTP receiver
Configuration:
See otel-collector-config.yaml in project root.
Enable in production:
# .env
OTEL_ENABLED=true
OTEL_EXPORTER_OTLP_ENDPOINT=https://ingest.us.signoz.cloud:443
SIGNOZ_ACCESS_TOKEN=your-token-here
Managing Services
Check Status
docker compose -f docker-compose.dev.yml ps
View Logs
# All services
docker compose -f docker-compose.dev.yml logs -f
# Specific service
docker compose -f docker-compose.dev.yml logs -f postgres
docker compose -f docker-compose.dev.yml logs -f redis
Restart Services
# All services
docker compose -f docker-compose.dev.yml restart
# Specific service
docker compose -f docker-compose.dev.yml restart postgres
Stop Services
# Stop but keep data
docker compose -f docker-compose.dev.yml stop
# Stop and remove containers (keeps volumes)
docker compose -f docker-compose.dev.yml down
# Stop and remove everything including data
docker compose -f docker-compose.dev.yml down -v
Reset Everything
# Nuclear option: remove all containers, volumes, networks
docker compose -f docker-compose.dev.yml down -v
docker compose -f docker-compose.dev.yml up -d
uv run alembic upgrade head
Next Steps
- Development Commands - Common operations
- Observability - Set up monitoring