🔨 Add aspire build workflow

This commit is contained in:
2025-09-16 23:36:26 +08:00
parent 3caa79b9a7
commit d8f57161ae
9 changed files with 587 additions and 159 deletions

181
publish/docker-compose.yaml Normal file
View File

@@ -0,0 +1,181 @@
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"