250 lines
6.3 KiB
YAML
250 lines
6.3 KiB
YAML
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
|
|
sleep 5
|
|
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
|
|
user: root
|
|
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
|
|
user: root
|
|
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
|
|
user: root
|
|
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
|
|
user: root
|
|
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:
|