version: '3.9' services: sanctum-db: image: postgres:16-alpine container_name: sanctum-db environment: POSTGRES_DB: sanctum POSTGRES_USER: sanctum POSTGRES_PASSWORD: ${DB_PASSWORD:-password} volumes: - sanctum_data:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U sanctum -d sanctum"] interval: 10s timeout: 5s retries: 5 networks: - sanctum-net sanctum-agent: build: context: . dockerfile: Dockerfile container_name: sanctum-agent depends_on: sanctum-db: condition: service_healthy environment: APP_NAME: "Sanctum Chronicler" APP_ENV: ${APP_ENV:-development} DEBUG: ${DEBUG:-false} ADMIN_API_KEY: ${ADMIN_API_KEY:-} DATABASE_URL: postgresql+asyncpg://sanctum:${DB_PASSWORD:-password}@sanctum-db:5432/sanctum TWITCH_CLIENT_ID: ${TWITCH_CLIENT_ID:-} TWITCH_CLIENT_SECRET: ${TWITCH_CLIENT_SECRET:-} TWITCH_BOT_USERNAME: ${TWITCH_BOT_USERNAME:-} TWITCH_CHANNEL_NAME: ${TWITCH_CHANNEL_NAME:-} LLM_PROVIDER: ${LLM_PROVIDER:-} LLM_BASE_URL: ${LLM_BASE_URL:-} LLM_API_KEY: ${LLM_API_KEY:-} LLM_MODEL: ${LLM_MODEL:-gpt-3.5-turbo} AGENT_LOOP_INTERVAL_SECONDS: ${AGENT_LOOP_INTERVAL_SECONDS:-60} HEARTHKEEPER_PROMPT_INTERVAL_MINUTES: ${HEARTHKEEPER_PROMPT_INTERVAL_MINUTES:-15} EXPORT_PATH: /app/exports volumes: - ./exports:/app/exports networks: sanctum-net: {} sanctum-lan: ipv4_address: 192.168.5.92 healthcheck: test: ["CMD", "python", "-c", "import httpx; httpx.get('http://localhost:8000/health').raise_for_status()"] interval: 30s timeout: 3s retries: 3 start_period: 10s volumes: sanctum_data: driver: local networks: sanctum-net: driver: bridge sanctum-lan: external: true name: blog_network