version: "3.8" services: # PostgreSQL database postgres: image: postgres:16-alpine container_name: moltbot-saas-postgres environment: POSTGRES_USER: moltbot POSTGRES_PASSWORD: moltbot_dev_password POSTGRES_DB: moltbot_saas ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./src/db/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U moltbot -d moltbot_saas"] interval: 5s timeout: 5s retries: 5 networks: - moltbot-network # Redis for sessions and rate limiting redis: image: redis:7-alpine container_name: moltbot-saas-redis ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 5 networks: - moltbot-network # HashiCorp Vault for secrets management (development mode) vault: image: hashicorp/vault:1.15 container_name: moltbot-saas-vault environment: VAULT_DEV_ROOT_TOKEN_ID: dev-root-token VAULT_DEV_LISTEN_ADDRESS: 0.0.0.0:8200 ports: - "8200:8200" cap_add: - IPC_LOCK healthcheck: test: ["CMD", "vault", "status"] interval: 5s timeout: 5s retries: 5 networks: - moltbot-network # SaaS API server api: build: context: . dockerfile: Dockerfile.api container_name: moltbot-saas-api environment: NODE_ENV: development PORT: 3000 HOST: 0.0.0.0 DATABASE_URL: postgresql://moltbot:moltbot_dev_password@postgres:5432/moltbot_saas REDIS_URL: redis://redis:6379 JWT_ACCESS_SECRET: dev-access-secret-minimum-32-characters-long JWT_REFRESH_SECRET: dev-refresh-secret-minimum-32-characters-long ENCRYPTION_KEY: dev-encryption-key-minimum-32-chars VAULT_ADDR: http://vault:8200 VAULT_TOKEN: dev-root-token FRONTEND_URL: http://localhost:5173 LOG_LEVEL: debug ports: - "3000:3000" volumes: - ./src:/app/src:ro depends_on: postgres: condition: service_healthy redis: condition: service_healthy vault: condition: service_healthy networks: - moltbot-network # Adminer for database management (optional) adminer: image: adminer:4 container_name: moltbot-saas-adminer ports: - "8080:8080" environment: ADMINER_DEFAULT_SERVER: postgres depends_on: - postgres networks: - moltbot-network volumes: postgres_data: redis_data: networks: moltbot-network: driver: bridge