services: bot: build: context: . args: INSTALL_AI: ${INSTALL_AI:-true} image: guardden:latest container_name: guardden-bot restart: unless-stopped depends_on: db: condition: service_healthy environment: - GUARDDEN_DISCORD_TOKEN=${GUARDDEN_DISCORD_TOKEN} - GUARDDEN_DATABASE_URL=postgresql://guardden:guardden@db:5432/guardden - GUARDDEN_LOG_LEVEL=${GUARDDEN_LOG_LEVEL:-INFO} - GUARDDEN_ALLOWED_GUILDS=${GUARDDEN_ALLOWED_GUILDS:-} - GUARDDEN_OWNER_IDS=${GUARDDEN_OWNER_IDS:-} - GUARDDEN_AI_PROVIDER=${GUARDDEN_AI_PROVIDER:-none} - GUARDDEN_ANTHROPIC_API_KEY=${GUARDDEN_ANTHROPIC_API_KEY:-} - GUARDDEN_OPENAI_API_KEY=${GUARDDEN_OPENAI_API_KEY:-} volumes: - guardden_data:/app/data - guardden_logs:/app/logs - ./config.yml:/app/config.yml:ro networks: - guardden healthcheck: test: ["CMD", "python", "-m", "guardden.health", "--check"] interval: 30s timeout: 10s retries: 3 start_period: 60s db: image: postgres:15-alpine container_name: guardden-db restart: unless-stopped environment: - POSTGRES_USER=guardden - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-guardden} - POSTGRES_DB=guardden - POSTGRES_INITDB_ARGS=--auth-host=scram-sha-256 volumes: - postgres_data:/var/lib/postgresql/data - ./scripts/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro ports: - "${POSTGRES_PORT:-5432}:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U guardden -d guardden"] interval: 10s timeout: 5s retries: 5 start_period: 30s networks: - guardden # Optional: Redis for caching and rate limiting redis: image: redis:7-alpine container_name: guardden-redis restart: unless-stopped command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD:-guardden_redis} volumes: - redis_data:/data ports: - "${REDIS_PORT:-6379}:6379" healthcheck: test: ["CMD", "redis-cli", "--raw", "incr", "ping"] interval: 10s timeout: 3s retries: 5 networks: - guardden networks: guardden: driver: bridge name: guardden-network volumes: postgres_data: redis_data: guardden_data: guardden_logs: