# Glean Docker Compose Configuration (Lite Version) # This configuration excludes Milvus services for lighter deployments # # Usage: # Lite deployment: docker compose -f docker-compose.lite.yml up -d # # For full deployment with Milvus (Phase 3 features), use: # docker compose up -d # # Environment variables can be set in .env file: # - IMAGE_TAG: Docker image version (default: latest, e.g., v0.3.0-alpha.1) # - WEB_PORT: Web interface port (default: 80) # - ADMIN_PORT: Admin dashboard port (default: 3001) # - POSTGRES_DB/USER/PASSWORD: Database credentials # - SECRET_KEY: JWT signing key # - CREATE_ADMIN: Create admin account on startup (default: true) # - ADMIN_USERNAME/PASSWORD: Admin credentials (default: admin/Admin123!) # - DEBUG: Enable debug mode (default: false) services: postgres: image: postgres:16-alpine container_name: glean-postgres environment: POSTGRES_DB: ${POSTGRES_DB:-glean} POSTGRES_USER: ${POSTGRES_USER:-glean} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-glean} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-glean}"] interval: 10s timeout: 5s retries: 5 networks: - glean-network restart: unless-stopped redis: image: redis:8-alpine container_name: glean-redis command: redis-server --appendonly yes volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 networks: - glean-network restart: unless-stopped backend: image: ghcr.io/leslieleung/glean-backend:${IMAGE_TAG:-latest} container_name: glean-backend environment: DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-glean}:${POSTGRES_PASSWORD:-glean}@postgres:5432/${POSTGRES_DB:-glean} REDIS_URL: redis://redis:6379/0 SECRET_KEY: ${SECRET_KEY:-change-me-in-production-use-a-long-random-string} CORS_ORIGINS: '["http://localhost", "http://localhost:3000", "http://localhost:3001"]' DEBUG: ${DEBUG:-false} # Only backend runs migrations to avoid race conditions RUN_MIGRATIONS: "true" # Admin auto-creation (enabled by default, set to false to disable) CREATE_ADMIN: ${CREATE_ADMIN:-true} ADMIN_USERNAME: ${ADMIN_USERNAME:-admin} ADMIN_PASSWORD: ${ADMIN_PASSWORD:-Admin123!} ADMIN_ROLE: ${ADMIN_ROLE:-super_admin} # Logging configuration LOG_LEVEL: ${LOG_LEVEL:-INFO} LOG_FILE: ${LOG_FILE:-/app/logs/glean-api.log} LOG_ROTATION: ${LOG_ROTATION:-100 MB} LOG_RETENTION: ${LOG_RETENTION:-30 days} LOG_COMPRESSION: ${LOG_COMPRESSION:-gz} LOG_SERIALIZE: ${LOG_SERIALIZE:-false} volumes: - glean_logs:/app/logs depends_on: postgres: condition: service_healthy redis: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/api/health"] interval: 10s timeout: 5s retries: 5 start_period: 30s networks: - glean-network restart: unless-stopped command: ["uv", "run", "--no-sync", "uvicorn", "glean_api.main:app", "--host", "0.0.0.0", "--port", "8000"] worker: image: ghcr.io/leslieleung/glean-backend:${IMAGE_TAG:-latest} container_name: glean-worker environment: DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-glean}:${POSTGRES_PASSWORD:-glean}@postgres:5432/${POSTGRES_DB:-glean} REDIS_URL: redis://redis:6379/0 SECRET_KEY: ${SECRET_KEY:-change-me-in-production-use-a-long-random-string} # Logging configuration LOG_LEVEL: ${LOG_LEVEL:-INFO} LOG_FILE: ${LOG_FILE:-/app/logs/glean-worker.log} LOG_ROTATION: ${LOG_ROTATION:-100 MB} LOG_RETENTION: ${LOG_RETENTION:-30 days} LOG_COMPRESSION: ${LOG_COMPRESSION:-gz} LOG_SERIALIZE: ${LOG_SERIALIZE:-false} volumes: - glean_logs:/app/logs depends_on: postgres: condition: service_healthy redis: condition: service_healthy backend: condition: service_healthy networks: - glean-network restart: unless-stopped command: ["uv", "run", "--no-sync", "arq", "glean_worker.main.WorkerSettings"] web: image: ghcr.io/leslieleung/glean-web:${IMAGE_TAG:-latest} container_name: glean-web ports: - "${WEB_PORT:-80}:80" depends_on: - backend networks: - glean-network restart: unless-stopped admin: image: ghcr.io/leslieleung/glean-admin:${IMAGE_TAG:-latest} container_name: glean-admin ports: - "${ADMIN_PORT:-3001}:80" depends_on: - backend networks: - glean-network restart: unless-stopped volumes: postgres_data: redis_data: glean_logs: networks: glean-network: driver: bridge