services: nats: image: nats:2.10-alpine command: ["-js", "-m", "8222"] ports: - "4222:4222" - "8222:8222" mailhog: image: mailhog/mailhog:v1.0.1 ports: - "1025:1025" # SMTP - "8025:8025" # Web UI minio: image: minio/minio:RELEASE.2025-02-28T09-55-16Z command: ["server", "/data", "--console-address", ":9001"] environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin ports: - "9000:9000" - "9001:9001" volumes: - minio_data:/data minio-init: image: minio/mc:RELEASE.2025-02-21T16-00-46Z depends_on: - minio entrypoint: - /bin/sh - -c command: - | set -euo pipefail mc alias set local http://minio:9000 minioadmin minioadmin mc mb -p local/cloudlysis-docs || true mc mb -p local/cloudlysis-loki || true mc mb -p local/cloudlysis-tempo || true mc mb -p local/cloudlysis-docs-0 || true mc mb -p local/cloudlysis-docs-1 || true mc mb -p local/cloudlysis-docs-2 || true mc anonymous set download local/cloudlysis-docs || true echo "minio init done" gateway: build: context: . dockerfile: docker/Dockerfile.rust args: PACKAGE: gateway BIN: gateway depends_on: - nats environment: GATEWAY_ADDR: 0.0.0.0:8080 GATEWAY_GRPC_ADDR: 0.0.0.0:8081 GATEWAY_STORAGE_PATH: /data/gateway.mdbx GATEWAY_ROUTING_FILE: /config/routing.json volumes: - gateway_data:/data - ./config/routing/dev.json:/config/routing.json:ro ports: - "8080:8080" - "8081:8081" aggregate: build: context: . dockerfile: docker/Dockerfile.rust args: PACKAGE: aggregate BIN: aggregate depends_on: - nats environment: AGGREGATE_NATS_URL: nats://nats:4222 AGGREGATE_STORAGE_PATH: /data AGGREGATE_HTTP_ADDR: 0.0.0.0:8080 AGGREGATE_GRPC_ADDR: 0.0.0.0:50051 volumes: - aggregate_data:/data ports: - "50051:50051" - "18080:8080" projection: build: context: . dockerfile: docker/Dockerfile.rust args: PACKAGE: projection BIN: projection depends_on: - nats environment: PROJECTION_NATS_URL: nats://nats:4222 PROJECTION_STREAM_NAME: AGGREGATE_EVENTS PROJECTION_DURABLE_NAME: projection PROJECTION_STORAGE_PATH: /data PROJECTION_MANIFEST_PATH: /config/projection-manifest.yaml PROJECTION_MULTI_TENANT: "true" PROJECTION_MAX_IN_FLIGHT: "128" PROJECTION_ACK_TIMEOUT_MS: "30000" PROJECTION_MAX_DELIVER: "10" volumes: - projection_data:/data - ./projection/projection-manifest.yaml:/config/projection-manifest.yaml:ro runner: build: context: . dockerfile: docker/Dockerfile.rust args: PACKAGE: runner BIN: runner depends_on: - nats environment: RUNNER_NATS_URL: nats://nats:4222 RUNNER_STORAGE_PATH: /data/runner.mdbx RUNNER_MODE: combined RUNNER_HTTP_ADDR: 0.0.0.0:8080 RUNNER_SAGA_MANIFEST_PATH: /config/sagas.yaml RUNNER_EFFECTS_MANIFEST_PATH: /config/effects.yaml RUNNER_SMTP_URL: smtp://mailhog:1025 volumes: - runner_data:/data - ./runner/config:/config:ro ports: - "28080:8080" control-api: build: context: . dockerfile: docker/Dockerfile.rust args: PACKAGE: api BIN: api depends_on: - minio-init environment: CONTROL_API_ADDR: 0.0.0.0:8080 CONTROL_GATEWAY_JWT_HS256_SECRET: dev_secret CONTROL_PLACEMENT_PATH: /etc/control/placement.json CONTROL_SWARM_STATE_PATH: /etc/control/swarm_state.json CONTROL_SELF_URL: http://control-api:8080 CONTROL_S3_ENDPOINT: http://minio:9000 CONTROL_S3_PUBLIC_ENDPOINT: http://localhost:9000 CONTROL_S3_REGION: us-east-1 CONTROL_S3_ACCESS_KEY_ID: minioadmin CONTROL_S3_SECRET_ACCESS_KEY: minioadmin CONTROL_S3_FORCE_PATH_STYLE: "true" CONTROL_S3_INSECURE: "true" CONTROL_S3_BUCKET_DOCS: cloudlysis-docs-0,cloudlysis-docs-1,cloudlysis-docs-2 CONTROL_S3_PREFIX_DOCS: docs/ volumes: - ./config/placement/dev.json:/etc/control/placement.json:ro - ./swarm/dev.json:/etc/control/swarm_state.json:ro ports: - "38080:8080" control-ui: build: context: . dockerfile: docker/Dockerfile.ui environment: VITE_CONTROL_API_URL: http://localhost:38080 ports: - "8082:80" victoria-metrics: image: victoriametrics/victoria-metrics:v1.120.0 profiles: ["observability"] ports: - "8428:8428" command: - "-retentionPeriod=30d" volumes: - victoria_metrics_data:/victoria-metrics-data vmagent: image: victoriametrics/vmagent:v1.120.0 profiles: ["observability"] depends_on: - victoria-metrics ports: - "8429:8429" command: - "-promscrape.config=/etc/vmagent/scrape.yml" - "-remoteWrite.url=http://victoria-metrics:8428/api/v1/write" volumes: - ./observability/vmagent/scrape.yml:/etc/vmagent/scrape.yml:ro loki: image: grafana/loki:3.5.5 profiles: ["observability"] ports: - "3100:3100" command: - "-config.file=/etc/loki/config.yml" volumes: - ./observability/loki/config.yml:/etc/loki/config.yml:ro - loki_data:/loki tempo: image: grafana/tempo:2.8.2 profiles: ["observability"] ports: - "3200:3200" - "4317:4317" - "4318:4318" - "9411:9411" command: - "-config.file=/etc/tempo/config.yml" volumes: - ./observability/tempo/config.yml:/etc/tempo/config.yml:ro - tempo_data:/var/tempo grafana: image: grafana/grafana:12.1.1 profiles: ["observability"] depends_on: - victoria-metrics - loki - tempo ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana - ./observability/grafana/provisioning:/etc/grafana/provisioning:ro - ./observability/grafana/dashboards:/var/lib/grafana/dashboards:ro volumes: aggregate_data: gateway_data: projection_data: runner_data: minio_data: grafana_data: loki_data: tempo_data: victoria_metrics_data: