services: docker-compose-dashboard: image: "mcr.microsoft.com/dotnet/nightly/aspire-dashboard:latest" expose: - "18888" - "18889" networks: - "aspire" restart: "always" cache: image: "docker.io/library/redis:7.4" command: - "-c" - "redis-server --requirepass $$REDIS_PASSWORD" entrypoint: - "/bin/sh" environment: REDIS_PASSWORD: "${CACHE_PASSWORD}" expose: - "6379" networks: - "aspire" queue: image: "docker.io/library/nats:2.11" command: - "--user" - "nats" - "--pass" - "${QUEUE_PASSWORD}" - "-js" expose: - "4222" networks: - "aspire" ring: image: "${RING_IMAGE}" environment: OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" HTTP_PORTS: "${RING_PORT}" ConnectionStrings__queue: "nats://nats:${QUEUE_PASSWORD}@queue:4222" services__pass__http__0: "http://pass:${PASS_PORT}" OTEL_EXPORTER_OTLP_ENDPOINT: "http://docker-compose-dashboard:18889" OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" OTEL_SERVICE_NAME: "ring" expose: - "${RING_PORT}" networks: - "aspire" pass: image: "${PASS_IMAGE}" environment: OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" HTTP_PORTS: "${PASS_PORT}" ConnectionStrings__cache: "cache:6379,password=${CACHE_PASSWORD}" ConnectionStrings__queue: "nats://nats:${QUEUE_PASSWORD}@queue:4222" services__ring__http__0: "http://ring:${RING_PORT}" OTEL_EXPORTER_OTLP_ENDPOINT: "http://docker-compose-dashboard:18889" OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" OTEL_SERVICE_NAME: "pass" expose: - "${PASS_PORT}" networks: - "aspire" drive: image: "${DRIVE_IMAGE}" environment: OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" HTTP_PORTS: "${DRIVE_PORT}" ConnectionStrings__cache: "cache:6379,password=${CACHE_PASSWORD}" ConnectionStrings__queue: "nats://nats:${QUEUE_PASSWORD}@queue:4222" services__pass__http__0: "http://pass:${PASS_PORT}" services__ring__http__0: "http://ring:${RING_PORT}" OTEL_EXPORTER_OTLP_ENDPOINT: "http://docker-compose-dashboard:18889" OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" OTEL_SERVICE_NAME: "drive" expose: - "${DRIVE_PORT}" networks: - "aspire" sphere: image: "${SPHERE_IMAGE}" environment: OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" HTTP_PORTS: "${SPHERE_PORT}" ConnectionStrings__cache: "cache:6379,password=${CACHE_PASSWORD}" ConnectionStrings__queue: "nats://nats:${QUEUE_PASSWORD}@queue:4222" services__pass__http__0: "http://pass:${PASS_PORT}" services__ring__http__0: "http://ring:${RING_PORT}" OTEL_EXPORTER_OTLP_ENDPOINT: "http://docker-compose-dashboard:18889" OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" OTEL_SERVICE_NAME: "sphere" expose: - "${SPHERE_PORT}" networks: - "aspire" develop: image: "${DEVELOP_IMAGE}" environment: OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" HTTP_PORTS: "${DEVELOP_PORT}" ConnectionStrings__cache: "cache:6379,password=${CACHE_PASSWORD}" services__pass__http__0: "http://pass:${PASS_PORT}" services__ring__http__0: "http://ring:${RING_PORT}" OTEL_EXPORTER_OTLP_ENDPOINT: "http://docker-compose-dashboard:18889" OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" OTEL_SERVICE_NAME: "develop" expose: - "${DEVELOP_PORT}" networks: - "aspire" gateway: image: "mcr.microsoft.com/dotnet/nightly/yarp:2.3.0-preview.4" command: - "/app/yarp.dll" entrypoint: - "dotnet" environment: ASPNETCORE_ENVIRONMENT: "Production" services__ring__http__0: "http://ring:${RING_PORT}" REVERSEPROXY__ROUTES__route0__MATCH__PATH: "/ws" REVERSEPROXY__ROUTES__route0__CLUSTERID: "cluster_ring" REVERSEPROXY__ROUTES__route1__MATCH__PATH: "/ring/{**catch-all}" REVERSEPROXY__ROUTES__route1__CLUSTERID: "cluster_ring" REVERSEPROXY__ROUTES__route1__TRANSFORMS__0__PathRemovePrefix: "/ring" REVERSEPROXY__ROUTES__route1__TRANSFORMS__1__PathPrefix: "/api" REVERSEPROXY__ROUTES__route2__MATCH__PATH: "/.well-known/openid-configuration" REVERSEPROXY__ROUTES__route2__CLUSTERID: "cluster_pass" REVERSEPROXY__ROUTES__route3__MATCH__PATH: "/.well-known/jwks" REVERSEPROXY__ROUTES__route3__CLUSTERID: "cluster_pass" REVERSEPROXY__ROUTES__route4__MATCH__PATH: "/id/{**catch-all}" REVERSEPROXY__ROUTES__route4__CLUSTERID: "cluster_pass" REVERSEPROXY__ROUTES__route4__TRANSFORMS__0__PathRemovePrefix: "/id" REVERSEPROXY__ROUTES__route4__TRANSFORMS__1__PathPrefix: "/api" REVERSEPROXY__ROUTES__route5__MATCH__PATH: "/api/tus" REVERSEPROXY__ROUTES__route5__CLUSTERID: "cluster_drive" REVERSEPROXY__ROUTES__route6__MATCH__PATH: "/drive/{**catch-all}" REVERSEPROXY__ROUTES__route6__CLUSTERID: "cluster_drive" REVERSEPROXY__ROUTES__route6__TRANSFORMS__0__PathRemovePrefix: "/drive" REVERSEPROXY__ROUTES__route6__TRANSFORMS__1__PathPrefix: "/api" REVERSEPROXY__ROUTES__route7__MATCH__PATH: "/sphere/{**catch-all}" REVERSEPROXY__ROUTES__route7__CLUSTERID: "cluster_sphere" REVERSEPROXY__ROUTES__route7__TRANSFORMS__0__PathRemovePrefix: "/sphere" REVERSEPROXY__ROUTES__route7__TRANSFORMS__1__PathPrefix: "/api" REVERSEPROXY__ROUTES__route8__MATCH__PATH: "/develop/{**catch-all}" REVERSEPROXY__ROUTES__route8__CLUSTERID: "cluster_develop" REVERSEPROXY__ROUTES__route8__TRANSFORMS__0__PathRemovePrefix: "/develop" REVERSEPROXY__ROUTES__route8__TRANSFORMS__1__PathPrefix: "/api" REVERSEPROXY__CLUSTERS__cluster_ring__DESTINATIONS__destination1__ADDRESS: "http://_http.ring" REVERSEPROXY__CLUSTERS__cluster_pass__DESTINATIONS__destination1__ADDRESS: "http://_http.pass" REVERSEPROXY__CLUSTERS__cluster_drive__DESTINATIONS__destination1__ADDRESS: "http://_http.drive" REVERSEPROXY__CLUSTERS__cluster_sphere__DESTINATIONS__destination1__ADDRESS: "http://_http.sphere" REVERSEPROXY__CLUSTERS__cluster_develop__DESTINATIONS__destination1__ADDRESS: "http://_http.develop" services__pass__http__0: "http://pass:${PASS_PORT}" services__drive__http__0: "http://drive:${DRIVE_PORT}" services__sphere__http__0: "http://sphere:${SPHERE_PORT}" services__develop__http__0: "http://develop:${DEVELOP_PORT}" OTEL_EXPORTER_OTLP_ENDPOINT: "http://docker-compose-dashboard:18889" OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" OTEL_SERVICE_NAME: "gateway" expose: - "5000" networks: - "aspire" networks: aspire: driver: "bridge"