services: db: image: ${POSTGRES_IMAGE:?Set POSTGRES_IMAGE in .env.enterprise-clean} pull_policy: never container_name: ss_tools_db restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-ss_tools} POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env.enterprise-clean} ports: - "${POSTGRES_HOST_PORT:-5432}:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-ss_tools}"] interval: 10s timeout: 5s retries: 10 backend: image: ${BACKEND_IMAGE:?Set BACKEND_IMAGE in .env.enterprise-clean} pull_policy: never container_name: ss_tools_backend restart: unless-stopped depends_on: db: condition: service_healthy environment: DATABASE_URL: postgresql+psycopg2://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-ss_tools} TASKS_DATABASE_URL: postgresql+psycopg2://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-ss_tools} AUTH_DATABASE_URL: postgresql+psycopg2://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-ss_tools} BACKEND_PORT: 8000 ENABLE_BELIEF_STATE_LOGGING: ${ENABLE_BELIEF_STATE_LOGGING:-true} TASK_LOG_LEVEL: ${TASK_LOG_LEVEL:-INFO} INITIAL_ADMIN_CREATE: ${INITIAL_ADMIN_CREATE:-false} INITIAL_ADMIN_USERNAME: ${INITIAL_ADMIN_USERNAME:-admin} INITIAL_ADMIN_PASSWORD: ${INITIAL_ADMIN_PASSWORD:-} INITIAL_ADMIN_EMAIL: ${INITIAL_ADMIN_EMAIL:-} OPENAI_API_KEY: ${OPENAI_API_KEY:-} ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-} ports: - "${BACKEND_HOST_PORT:-8001}:8000" volumes: - ./config.json:/app/config.json:ro - ./backups:/app/backups - ./backend/git_repos:/app/backend/git_repos - ${STORAGE_ROOT:-./storage}:/app/storage frontend: image: ${FRONTEND_IMAGE:?Set FRONTEND_IMAGE in .env.enterprise-clean} pull_policy: never container_name: ss_tools_frontend restart: unless-stopped depends_on: - backend ports: - "${FRONTEND_HOST_PORT:-8000}:80" volumes: postgres_data: