diff --git a/1-monolith-architecture-style/deployments/.gitkeep b/1-monolith-architecture-style/deployments/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/1-monolith-architecture-style/deployments/docker-compose/docker-compose.infrastructure.yaml b/1-monolith-architecture-style/deployments/docker-compose/docker-compose.infrastructure.yaml new file mode 100644 index 0000000..e93ae59 --- /dev/null +++ b/1-monolith-architecture-style/deployments/docker-compose/docker-compose.infrastructure.yaml @@ -0,0 +1,361 @@ +# 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: \ No newline at end of file diff --git a/3-microservices-architecture-style/deployments/docker-compose/docker-compose.infrastructure.yaml b/3-microservices-architecture-style/deployments/docker-compose/docker-compose.infrastructure.yaml index 630517e..22cc6b9 100644 --- a/3-microservices-architecture-style/deployments/docker-compose/docker-compose.infrastructure.yaml +++ b/3-microservices-architecture-style/deployments/docker-compose/docker-compose.infrastructure.yaml @@ -5,7 +5,7 @@ # https://stackoverflow.com/questions/65272764/ports-are-not-available-listen-tcp-0-0-0-0-50070-bind-an-attempt-was-made-to -name: booking-microservices +name: booking-microservices-infrastructure services: ####################################################### @@ -67,9 +67,9 @@ services: - infrastructure - ####################################################### - # Mongo - ####################################################### + # ####################################################### + # # Mongo + # ####################################################### mongo: image: mongo:latest container_name: mongo @@ -83,9 +83,9 @@ services: - infrastructure - ####################################################### - # Redis - ####################################################### + # ####################################################### + # # Redis + # ####################################################### redis: image: redis container_name: redis @@ -96,11 +96,11 @@ services: - infrastructure - ####################################################### - # jaeger - # https://www.jaegertracing.io/docs/1.64/deployment/ - # https://www.jaegertracing.io/docs/1.6/deployment/ - ####################################################### + # ####################################################### + # # 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 @@ -116,10 +116,10 @@ services: - infrastructure - ####################################################### - # zipkin - # https://zipkin.io/pages/quickstart - ####################################################### + # ####################################################### + # # zipkin + # # https://zipkin.io/pages/quickstart + # ####################################################### zipkin-all-in-one: image: openzipkin/zipkin:latest container_name: zipkin-all-in-one @@ -130,14 +130,14 @@ services: - 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 + # # 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 @@ -157,12 +157,12 @@ services: - 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 + # # 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 @@ -183,11 +183,11 @@ services: - 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 + # # 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 @@ -206,13 +206,13 @@ services: - 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 + # # 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 @@ -238,13 +238,13 @@ services: - 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 + # # 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 @@ -260,12 +260,12 @@ services: - 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 + # # 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 @@ -279,10 +279,10 @@ services: - infrastructure - ####################################################### - # elasticsearch - # https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docker.html#docker-compose-file - ####################################################### + # ####################################################### + # # elasticsearch + # # https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docker.html#docker-compose-file + # ####################################################### elasticsearch: container_name: elasticsearch restart: unless-stopped @@ -313,10 +313,10 @@ services: - infrastructure - ####################################################### - # kibana - # https://www.elastic.co/guide/en/kibana/current/docker.html - ####################################################### + # ####################################################### + # # kibana + # # https://www.elastic.co/guide/en/kibana/current/docker.html + # ####################################################### kibana: image: docker.elastic.co/kibana/kibana:8.17.0 container_name: kibana @@ -331,9 +331,9 @@ services: - infrastructure - ####################################################### - # cadvisor - ####################################################### + # ####################################################### + # # cadvisor + # ####################################################### cadvisor: image: gcr.io/cadvisor/cadvisor:latest container_name: cadvisor @@ -358,5 +358,4 @@ networks: driver: bridge volumes: - elastic-data: postgres-data: \ No newline at end of file