services: postgres: build: context: ./postgres dockerfile: Dockerfile container_name: mosaic-postgres restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-mosaic} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-mosaic_dev_password} POSTGRES_DB: ${POSTGRES_DB:-mosaic} ports: - "${POSTGRES_PORT:-5432}:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-mosaic} -d ${POSTGRES_DB:-mosaic}"] interval: 10s timeout: 5s retries: 5 start_period: 30s networks: - mosaic-network valkey: image: valkey/valkey:8-alpine container_name: mosaic-valkey restart: unless-stopped ports: - "${VALKEY_PORT:-6379}:6379" volumes: - valkey_data:/data healthcheck: test: ["CMD", "valkey-cli", "ping"] interval: 10s timeout: 5s retries: 5 start_period: 10s networks: - mosaic-network coordinator: build: context: ../apps/coordinator dockerfile: Dockerfile container_name: mosaic-coordinator restart: unless-stopped environment: GITEA_WEBHOOK_SECRET: ${GITEA_WEBHOOK_SECRET} GITEA_URL: ${GITEA_URL:-https://git.mosaicstack.dev} LOG_LEVEL: ${LOG_LEVEL:-info} HOST: 0.0.0.0 PORT: 8000 ports: - "8000:8000" healthcheck: test: [ "CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')", ] interval: 30s timeout: 10s retries: 3 start_period: 5s networks: - mosaic-network volumes: postgres_data: name: mosaic-postgres-data valkey_data: name: mosaic-valkey-data networks: mosaic-network: name: mosaic-network driver: bridge