mirror of
https://github.com/meysamhadeli/booking-microservices.git
synced 2026-04-10 17:59:38 +08:00
361 lines
12 KiB
YAML
361 lines
12 KiB
YAML
# ref: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/examples/demo/docker-compose.yaml
|
|
# ref: https://github.com/joaofbantunes/DotNetMicroservicesObservabilitySample/blob/main/docker-compose.yml
|
|
# ref: https://github.com/oskardudycz/EventSourcing.NetCore/blob/main/docker-compose.yml
|
|
# https://github.com/grafana/intro-to-mltp
|
|
# https://stackoverflow.com/questions/65272764/ports-are-not-available-listen-tcp-0-0-0-0-50070-bind-an-attempt-was-made-to
|
|
|
|
|
|
name: booking-monolith-infrastructure
|
|
|
|
services:
|
|
#######################################################
|
|
# rabbitmq
|
|
#######################################################
|
|
rabbitmq:
|
|
image: rabbitmq:management
|
|
container_name: rabbitmq
|
|
restart: unless-stopped
|
|
ports:
|
|
- "5672:5672"
|
|
- "15672:15672"
|
|
# volumes:
|
|
# - rabbitmq:/var/lib/rabbitmq
|
|
networks:
|
|
- infrastructure
|
|
|
|
#######################################################
|
|
# postgres
|
|
#######################################################
|
|
postgres:
|
|
image: postgres:latest
|
|
container_name: postgres
|
|
restart: unless-stopped
|
|
ports:
|
|
- '5432:5432'
|
|
environment:
|
|
- POSTGRES_USER=postgres
|
|
- POSTGRES_PASSWORD=postgres
|
|
command:
|
|
- "postgres"
|
|
- "-c"
|
|
- "wal_level=logical"
|
|
- "-c"
|
|
- "max_prepared_transactions=10"
|
|
volumes:
|
|
- postgres-data:/var/lib/postgresql/data
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
#######################################################
|
|
# EventStoreDB
|
|
#######################################################
|
|
eventstore:
|
|
container_name: eventstore
|
|
image: eventstore/eventstore:latest
|
|
restart: unless-stopped
|
|
environment:
|
|
- EVENTSTORE_CLUSTER_SIZE=1
|
|
- EVENTSTORE_RUN_PROJECTIONS=All
|
|
- EVENTSTORE_START_STANDARD_PROJECTIONS=True
|
|
- EVENTSTORE_HTTP_PORT=2113
|
|
- EVENTSTORE_INSECURE=True
|
|
- EVENTSTORE_ENABLE_ATOM_PUB_OVER_HTTP=True
|
|
ports:
|
|
- "2113:2113"
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # Mongo
|
|
# #######################################################
|
|
mongo:
|
|
image: mongo:latest
|
|
container_name: mongo
|
|
restart: unless-stopped
|
|
# environment:
|
|
# - MONGO_INITDB_ROOT_USERNAME=root
|
|
# - MONGO_INITDB_ROOT_PASSWORD=secret
|
|
ports:
|
|
- 27017:27017
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # Redis
|
|
# #######################################################
|
|
redis:
|
|
image: redis
|
|
container_name: redis
|
|
restart: unless-stopped
|
|
ports:
|
|
- 6379:6379
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # jaeger
|
|
# # https://www.jaegertracing.io/docs/1.64/deployment/
|
|
# # https://www.jaegertracing.io/docs/1.6/deployment/
|
|
# #######################################################
|
|
jaeger-all-in-one:
|
|
image: jaegertracing/all-in-one:latest
|
|
container_name: jaeger-all-in-one
|
|
restart: unless-stopped
|
|
ports:
|
|
- "6831:6831/udp" # UDP port for Jaeger agent
|
|
- "16686:16686" # endpoints and Jaeger UI
|
|
- "14268:14268" # HTTP port for accept trace spans directly from clients
|
|
- "14317:4317" # OTLP gRPC receiver for jaeger
|
|
- "14318:4318" # OTLP http receiver for jaeger
|
|
# - "9411" # Accepts Zipkin spans - /api/v2/spans
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # zipkin
|
|
# # https://zipkin.io/pages/quickstart
|
|
# #######################################################
|
|
zipkin-all-in-one:
|
|
image: openzipkin/zipkin:latest
|
|
container_name: zipkin-all-in-one
|
|
restart: unless-stopped
|
|
ports:
|
|
- "9411:9411"
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # otel-collector
|
|
# # https://opentelemetry.io/docs/collector/installation/
|
|
# # https://github.com/open-telemetry/opentelemetry-collector
|
|
# # https://github.com/open-telemetry/opentelemetry-collector-contrib
|
|
# # we can use none contrib docker `otel/opentelemetry-collector` version from `https://github.com/open-telemetry/opentelemetry-collector` repository but,
|
|
# # if we need more components like `elasticsearch` we should use `otel/opentelemetry-collector-contrib` image of `https://github.com/open-telemetry/opentelemetry-collector-contrib` repository.
|
|
# #######################################################
|
|
otel-collector:
|
|
image: otel/opentelemetry-collector-contrib:latest
|
|
container_name: otel-collector
|
|
restart: unless-stopped
|
|
command: ["--config=/etc/otelcol-contrib/config.yaml"]
|
|
volumes:
|
|
- ./../configs/otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml
|
|
ports:
|
|
- "11888:1888" # pprof extension
|
|
- "8888:8888" # Prometheus metrics exposed by the Collector
|
|
- "8889:8889" # Prometheus exporter metrics
|
|
- "13133:13133" # health_check extension
|
|
- "4317:4317" # OTLP gRPC receiver
|
|
- "4318:4318" # OTLP http receiver
|
|
- "55679:55679" # zpages extension
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # prometheus
|
|
# # https://prometheus.io/docs/introduction/first_steps/
|
|
# # https://prometheus.io/docs/prometheus/3.1/installation/
|
|
# # https://grafana.com/docs/grafana-cloud/send-data/metrics/metrics-prometheus/prometheus-config-examples/docker-compose-linux/
|
|
# #######################################################
|
|
prometheus:
|
|
image: prom/prometheus:latest
|
|
restart: unless-stopped
|
|
ports:
|
|
- "9090:9090"
|
|
volumes:
|
|
- ./../configs/prometheus.yaml:/etc/prometheus/prometheus.yml
|
|
# to passe one flag, such as "--log.level=debug" or "--web.enable-remote-write-receiver", we need to override the whole command, as we can't just pass one extra argument
|
|
command:
|
|
- "--config.file=/etc/prometheus/prometheus.yml"
|
|
- "--storage.tsdb.path=/prometheus"
|
|
- "--web.console.libraries=/usr/share/prometheus/console_libraries"
|
|
- "--web.console.templates=/usr/share/prometheus/consoles"
|
|
# need this for the OpenTelemetry collector to be able to put metrics into Prometheus
|
|
- "--web.enable-remote-write-receiver"
|
|
# - "--log.level=debug"
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # node-exporter
|
|
# # https://prometheus.io/docs/guides/node-exporter/
|
|
# # https://grafana.com/docs/grafana-cloud/send-data/metrics/metrics-prometheus/prometheus-config-examples/docker-compose-linux/
|
|
# #######################################################
|
|
node-exporter:
|
|
image: prom/node-exporter:latest
|
|
container_name: node-exporter
|
|
restart: unless-stopped
|
|
volumes:
|
|
- /proc:/host/proc:ro
|
|
- /sys:/host/sys:ro
|
|
- /:/rootfs:ro
|
|
command:
|
|
- '--path.procfs=/host/proc'
|
|
- '--path.rootfs=/rootfs'
|
|
- '--path.sysfs=/host/sys'
|
|
ports:
|
|
- "9101:9100"
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # grafana
|
|
# # https://grafana.com/docs/grafana/latest/administration/provisioning/
|
|
# # https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/
|
|
# # https://grafana.com/docs/grafana/latest/setup-grafana/configure-docker/
|
|
# # https://github.com/grafana/intro-to-mltp/blob/main/grafana/provisioning/datasources/datasources.yaml
|
|
# #######################################################
|
|
grafana:
|
|
image: grafana/grafana:latest
|
|
container_name: grafana
|
|
restart: unless-stopped
|
|
environment:
|
|
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
|
|
- GF_SECURITY_ADMIN_USER=admin
|
|
- GF_SECURITY_ADMIN_PASSWORD=admin
|
|
- GF_FEATURE_TOGGLES_ENABLE=traceqlEditor
|
|
# - GF_AUTH_ANONYMOUS_ENABLED=true
|
|
# - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
|
|
# - GF_AUTH_DISABLE_LOGIN_FORM=true
|
|
depends_on:
|
|
- prometheus
|
|
ports:
|
|
- "3000:3000"
|
|
volumes:
|
|
- ./../configs/grafana/provisioning:/etc/grafana/provisioning
|
|
- ./../configs/grafana/dashboards:/var/lib/grafana/dashboards
|
|
## https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/
|
|
# - ./../configs/grafana/grafana.ini:/etc/grafana/grafana.ini
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # tempo
|
|
# # https://github.com/grafana/tempo/blob/main/example/docker-compose/otel-collector/docker-compose.yaml
|
|
# # https://github.com/grafana/tempo/blob/main/example/docker-compose/shared
|
|
# # https://github.com/grafana/tempo/blob/main/example/docker-compose/local
|
|
# # https://github.com/grafana/tempo/tree/main/example/docker-compose
|
|
# #######################################################
|
|
tempo:
|
|
image: grafana/tempo:latest
|
|
container_name: tempo
|
|
restart: unless-stopped
|
|
command: [ "-config.file=/etc/tempo.yaml" ]
|
|
volumes:
|
|
- ./../configs/tempo.yaml:/etc/tempo.yaml
|
|
ports:
|
|
- "3200" # tempo
|
|
- "24317:4317" # otlp grpc
|
|
- "24318:4318" # otlp http
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # loki
|
|
# # https://grafana.com/docs/opentelemetry/collector/send-logs-to-loki/
|
|
# # https://github.com/grafana/loki/blob/main/production/docker-compose.yaml
|
|
# # https://github.com/grafana/loki/blob/main/examples/getting-started/docker-compose.yaml
|
|
# #######################################################
|
|
loki:
|
|
image: grafana/loki:latest
|
|
hostname: loki
|
|
container_name: loki
|
|
ports:
|
|
- "3100:3100"
|
|
command: -config.file=/etc/loki/local-config.yaml
|
|
volumes:
|
|
- ./../configs/loki-config.yaml:/etc/loki/local-config.yaml
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # elasticsearch
|
|
# # https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docker.html#docker-compose-file
|
|
# #######################################################
|
|
elasticsearch:
|
|
container_name: elasticsearch
|
|
restart: unless-stopped
|
|
image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0
|
|
environment:
|
|
- discovery.type=single-node
|
|
- cluster.name=docker-cluster
|
|
- node.name=docker-node
|
|
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
|
- xpack.security.enabled=false
|
|
- xpack.security.http.ssl.enabled=false
|
|
- xpack.security.transport.ssl.enabled=false
|
|
- network.host=0.0.0.0
|
|
- http.port=9200
|
|
- transport.host=localhost
|
|
- bootstrap.memory_lock=true
|
|
- cluster.routing.allocation.disk.threshold_enabled=false
|
|
ulimits:
|
|
memlock:
|
|
soft: -1
|
|
hard: -1
|
|
volumes:
|
|
- elastic-data:/usr/share/elasticsearch/data
|
|
ports:
|
|
- ${ELASTIC_HOST_PORT:-9200}:${ELASTIC_PORT:-9200}
|
|
- 9300:9300
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # kibana
|
|
# # https://www.elastic.co/guide/en/kibana/current/docker.html
|
|
# #######################################################
|
|
kibana:
|
|
image: docker.elastic.co/kibana/kibana:8.17.0
|
|
container_name: kibana
|
|
restart: unless-stopped
|
|
environment:
|
|
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
|
|
ports:
|
|
- ${KIBANA_HOST_PORT:-5601}:${KIBANA_PORT:-5601}
|
|
depends_on:
|
|
- elasticsearch
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
# #######################################################
|
|
# # cadvisor
|
|
# #######################################################
|
|
cadvisor:
|
|
image: gcr.io/cadvisor/cadvisor:latest
|
|
container_name: cadvisor
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8080:8080"
|
|
volumes:
|
|
- /:/rootfs:ro
|
|
- /var/run:/var/run:ro
|
|
- /sys:/sys:ro
|
|
- /var/lib/docker/:/var/lib/docker:ro
|
|
- /dev/disk/:/dev/disk:ro
|
|
devices:
|
|
- /dev/kmsg
|
|
networks:
|
|
- infrastructure
|
|
|
|
|
|
networks:
|
|
infrastructure:
|
|
name: infrastructure
|
|
driver: bridge
|
|
|
|
volumes:
|
|
postgres-data: |