services: mosaic-api: image: mosaic/api:latest environment: DATABASE_URL: ${DATABASE_URL} MOSAIC_SECRET_KEY: ${MOSAIC_SECRET_KEY} volumes: - /var/run/docker.sock:/var/run/docker.sock networks: - internal healthcheck: test: ["CMD", "curl", "-f", "http://localhost:4000/api/health"] interval: 30s timeout: 10s retries: 3 mosaic-web: image: mosaic/web:latest environment: NEXT_PUBLIC_API_URL: http://mosaic-api:4000 ports: - "3000:3000" networks: - internal depends_on: mosaic-api: condition: service_healthy postgres: image: postgres:17-alpine environment: POSTGRES_DB: mosaic POSTGRES_USER: mosaic POSTGRES_PASSWORD: ${DATABASE_PASSWORD} volumes: - postgres-data:/var/lib/postgresql/data networks: - internal healthcheck: test: ["CMD-SHELL", "pg_isready -U mosaic"] interval: 10s timeout: 5s retries: 5 networks: internal: driver: bridge mosaic-agents: driver: bridge internal: true volumes: postgres-data: