services: db: image: ${POSTGRES_IMAGE:-postgres:16-alpine} restart: unless-stopped environment: POSTGRES_DB: ss_tools POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - "${POSTGRES_HOST_PORT:-5432}:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d ss_tools"] interval: 10s timeout: 5s retries: 10 backend: build: context: . dockerfile: docker/backend.Dockerfile restart: unless-stopped env_file: - ./backend/.env depends_on: db: condition: service_healthy environment: POSTGRES_URL: postgresql+psycopg2://postgres:postgres@db:5432/ss_tools DATABASE_URL: postgresql+psycopg2://postgres:postgres@db:5432/ss_tools TASKS_DATABASE_URL: postgresql+psycopg2://postgres:postgres@db:5432/ss_tools AUTH_DATABASE_URL: postgresql+psycopg2://postgres:postgres@db:5432/ss_tools BACKEND_PORT: 8000 INITIAL_ADMIN_CREATE: ${INITIAL_ADMIN_CREATE:-false} INITIAL_ADMIN_USERNAME: ${INITIAL_ADMIN_USERNAME:-admin} INITIAL_ADMIN_PASSWORD: ${INITIAL_ADMIN_PASSWORD:-} FEATURES__DATASET_REVIEW: ${FEATURES__DATASET_REVIEW:-true} FEATURES__HEALTH_MONITOR: ${FEATURES__HEALTH_MONITOR:-true} LLM_CA_CERT_URLS: ${LLM_CA_CERT_URLS:-} LLM_SSL_VERIFY: ${LLM_SSL_VERIFY:-true} ports: - "${BACKEND_HOST_PORT:-8001}:8000" volumes: - ./storage:/app/storage agent: build: context: . dockerfile: docker/Dockerfile.agent restart: unless-stopped depends_on: db: condition: service_healthy backend: condition: service_started environment: LLM_API_KEY: ${LLM_API_KEY:-} LLM_BASE_URL: ${LLM_BASE_URL:-https://api.openai.com/v1} LLM_MODEL: ${LLM_MODEL:-gpt-4o} FASTAPI_URL: http://backend:8000 AUTH_SECRET_KEY: ${AUTH_SECRET_KEY:?Set AUTH_SECRET_KEY in .env} SERVICE_JWT: ${SERVICE_JWT:-agent-service-secret} DATABASE_URL: postgresql+psycopg2://postgres:postgres@db:5432/ss_tools GRADIO_SERVER_PORT: 7860 ports: - "7860" # internal only, proxied through nginx frontend: build: context: . dockerfile: docker/frontend.Dockerfile restart: unless-stopped depends_on: - backend ports: - "${FRONTEND_HOST_PORT:-8000}:80" volumes: postgres_data: