245 lines
7.5 KiB
YAML
Executable File
245 lines
7.5 KiB
YAML
Executable File
name: clever_micro
|
|
services:
|
|
|
|
rabbitmq: # copied from cleverdata backend branch feat/#190
|
|
image: rabbitmq:3-management
|
|
hostname: "my-rabbit"
|
|
environment:
|
|
RABBITMQ_DEFAULT_USER: springuser
|
|
RABBITMQ_DEFAULT_PASS: TheCleverWho
|
|
volumes:
|
|
- "./container-data/rabbitmq/enabled_plugins:/etc/rabbitmq/enabled_plugins"
|
|
# - "./container-data/mq-data:/var/lib/rabbitmq"
|
|
ports:
|
|
- "5672:5672"
|
|
- "8888:15672"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "rabbitmq-diagnostics -q ping"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
|
|
traefik:
|
|
image: "traefik:v3.2"
|
|
container_name: "traefik"
|
|
command:
|
|
- "--api.insecure=true"
|
|
- "--providers.docker=true"
|
|
- "--providers.docker.exposedbydefault=false"
|
|
- "--entryPoints.web.address=:8085"
|
|
labels:
|
|
- "traefik.enable=true"
|
|
ports:
|
|
- "8085:8085"
|
|
volumes:
|
|
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
|
|
|
jaeger:
|
|
image: "jaegertracing/all-in-one:latest"
|
|
ports:
|
|
- "16686:16686" # Jaeger UI
|
|
- "14268:14268" # Jaeger collector Accepts jaeger.thrift spans directly over HTTP
|
|
- "14250:14250" # Jaeger gRPC Accepts model.proto spans over gRPC
|
|
- "6831:6831/udp" # Jaeger agent Accepts jaeger.thrift spans (Thrift compact)
|
|
- "6832:6832/udp" # Jaeger agent Accepts jaeger.thrift spans (Thrift binary)
|
|
- "5778:5778" # Jaeger agent admin + configuration
|
|
- "4317:4317" # OpenTelemetry Protocol (OTLP) gRPC receiver
|
|
- "4318:4318" # OpenTelemetry Protocol (OTLP) HTTP/protobuf receiver
|
|
- "14269:14269" # Jaeger health check
|
|
- "9411:9411" # Zipkin compatibility
|
|
environment:
|
|
COLLECTOR_ZIPKIN_HTTP_PORT: 9411
|
|
COLLECTOR_OTLP_ENABLED: true
|
|
|
|
amqp-router:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
# dockerfile: Dockerfile.amqp-adapter
|
|
#image: "amq-python:latest"
|
|
image: "amqp_router:latest"
|
|
ports:
|
|
- "${AMQ_ADAPTER_PORT:-8081}:8080"
|
|
environment:
|
|
cm.amq-adapter.service-name: "amq-router"
|
|
cm.amq-adapter.is-router: "true"
|
|
cm.amq-adapter.generator-id: 164
|
|
cm.amq-adapter.route-mapping: "null"
|
|
|
|
cm.dispatch.use-dlq: true
|
|
cm.dispatch.use-confirms: false
|
|
cm.dispatch.amq-host: rabbitmq
|
|
cm.dispatch.amq-port: 5672
|
|
cm.dispatch.amq-port-tls: 5671
|
|
|
|
cm.backpressure.threshold: 20
|
|
cm.backpressure.time-window: 3000
|
|
cm.backpressure.management-service-url: "management-service:8080"
|
|
quarkus.otel.exporter.otlp.endpoint: "http://jaeger:4317"
|
|
quarkus.application.name: API-Gateway-AMQ-Adapter
|
|
quarkus.otel.service.name: API-Gateway-AMQ-Adapter
|
|
env_file:
|
|
- .env_secrets
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.router-app.rule=PathPrefix(`/`)" # default route
|
|
- "traefik.http.routers.router-app.entrypoints=web"
|
|
depends_on:
|
|
rabbitmq:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl http://localhost:8080/amq-adapter-healthcheck"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
|
|
#
|
|
# DLQ is special case of AMQ adapter that will handle rejected messages
|
|
#
|
|
dead-letter-queue-handler:
|
|
image: "amqp_router:latest"
|
|
ports:
|
|
- "${DLQ_ADAPTER_PORT:-8089}:8080"
|
|
environment:
|
|
|
|
cm.amq-adapter.service-name: "amq-dlq"
|
|
cm.amq-adapter.is-router: "false"
|
|
cm.amq-adapter.generator-id: 165
|
|
cm.amq-adapter.route-mapping: "amq-dlq:DLX:DeadLetterQueue:#:0:0"
|
|
|
|
cm.dispatch.use-dlq: false
|
|
cm.dispatch.use-confirms: false
|
|
cm.dispatch.amq-host: rabbitmq
|
|
cm.dispatch.amq-port: 5672
|
|
cm.dispatch.amq-port-tls: 5671
|
|
|
|
cm.backpressure.threshold: 20
|
|
cm.backpressure.time-window: 3000
|
|
cm.backpressure.management-service-url: "management-service:8080"
|
|
quarkus.application.name: AMQ-DeadLetterQueue
|
|
quarkus.otel.exporter.otlp.endpoint: "http://jaeger:4317"
|
|
OTEL_EXPORTER_OTLP_ENDPOINT: "http://jaeger:4317"
|
|
env_file:
|
|
- .env_secrets
|
|
depends_on:
|
|
amqp-router:
|
|
condition: service_healthy
|
|
#
|
|
# test applications
|
|
#
|
|
amq-clever-book:
|
|
image: "amqp_router:latest"
|
|
ports:
|
|
- "16000:8080"
|
|
environment:
|
|
|
|
cm.amq-adapter.service-name: "amq-cleverbook-adapter"
|
|
cm.amq-adapter.generator-id: 16
|
|
cm.amq-adapter.route-mapping: "amq-clever-book::amq-clever-book:clever.book.localhost.#:5:0"
|
|
|
|
cm.dispatch.use-dlq: true
|
|
cm.dispatch.use-confirms: false
|
|
cm.dispatch.amq-host: rabbitmq
|
|
cm.dispatch.amq-port: 5672
|
|
cm.dispatch.amq-port-tls: 5671
|
|
cm.dispatch.service-host: clever-book
|
|
cm.dispatch.service-port: 8080
|
|
|
|
cm.backpressure.threshold: 20
|
|
cm.backpressure.time-window: 3000
|
|
cm.backpressure.management-service-url: "management-service:8080"
|
|
quarkus.otel.service.name: CleverBook-AMQ-Adapter
|
|
quarkus.application.name: CleverBook-AMQ-Adapter
|
|
quarkus.otel.exporter.otlp.endpoint: "http://jaeger:4317"
|
|
OTEL_EXPORTER_OTLP_ENDPOINT: "http://jaeger:4317"
|
|
env_file:
|
|
- .env_secrets
|
|
depends_on:
|
|
amqp-router:
|
|
condition: service_healthy
|
|
|
|
#
|
|
# Dummy app allowing POST and GET operations over REST API, emulating a real SpringBoot service
|
|
#
|
|
clever-book:
|
|
build:
|
|
context: clever-book/
|
|
dockerfile: Dockerfile
|
|
image: "book-management:latest"
|
|
ports:
|
|
- "16002:8080"
|
|
restart: on-failure
|
|
environment:
|
|
SPRING_PROFILES_ACTIVE: prod
|
|
SPRING_APPLICATION_NAME: CleverBook
|
|
spring.application.name: CleverBook
|
|
OTEL_EXPORTER_OTLP_ENDPOINT: "http://jaeger:4317"
|
|
otel.exporter.otlp.endpoint: "http://jaeger:4317"
|
|
env_file:
|
|
- .env_secrets
|
|
depends_on:
|
|
amqp-router:
|
|
condition: service_healthy
|
|
|
|
#
|
|
# a black box 3rd party app provisioned as-is
|
|
#
|
|
black-box-3rd-party:
|
|
image: "traefik/whoami"
|
|
container_name: "blackbox-third-party"
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"
|
|
- "traefik.http.routers.whoami.entrypoints=web"
|
|
|
|
#
|
|
# test applications for python
|
|
#
|
|
amq-clever-pybook:
|
|
image: "amq-python:latest"
|
|
# image: "amqp_router:latest"
|
|
ports:
|
|
- "16020:8080"
|
|
environment:
|
|
|
|
cm.amq-adapter.service-name: "amq-cleverpybook-adapter"
|
|
cm.amq-adapter.generator-id: 211
|
|
cm.amq-adapter.route-mapping: "amq-clever-pybook::amq-clever-pybook:clever.pybook.localhost.#:5:0"
|
|
|
|
cm.dispatch.use-dlq: true
|
|
cm.dispatch.use-confirms: false
|
|
cm.dispatch.amq-host: rabbitmq
|
|
cm.dispatch.amq-port: 5672
|
|
cm.dispatch.amq-port-tls: 5671
|
|
cm.dispatch.service-host: clever-pybook
|
|
cm.dispatch.service-port: 5000
|
|
|
|
cm.backpressure.threshold: 20
|
|
cm.backpressure.time-window: 3000
|
|
cm.backpressure.management-service-url: "management-service:8080"
|
|
quarkus.otel.service.name: CleverPyBook-AMQ-Adapter
|
|
quarkus.application.name: CleverPyBook-AMQ-Adapter
|
|
quarkus.otel.exporter.otlp.endpoint: "http://jaeger:4317"
|
|
OTEL_EXPORTER_OTLP_ENDPOINT: "http://jaeger:4317"
|
|
env_file:
|
|
- .env_secrets
|
|
depends_on:
|
|
amqp-router:
|
|
condition: service_healthy
|
|
|
|
#
|
|
# Dummy app allowing POST and GET operations over REST API, emulating a real SpringBoot service
|
|
#
|
|
clever-pybook:
|
|
image: "clever-pybook:latest"
|
|
ports:
|
|
- "16012:5000"
|
|
restart: on-failure
|
|
environment:
|
|
OTEL_EXPORTER_OTLP_ENDPOINT: "http://jaeger:4317"
|
|
OTEL_EXPORTER_OTLP_INSECURE: "true"
|
|
depends_on:
|
|
amqp-router:
|
|
condition: service_healthy
|
|
|