version: "3.4" services: postgres-db: image: postgres:16.2-alpine restart: always environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=wO2VGDsMKR - max_wal_size=2GB ports: - "5432:5432" networks: - network volumes: - postgres-db-16-2:/var/lib/postgresql/data-16-2 ############################ # Workflow App + Dapr sidecar ############################ workflow-app-a: environment: - DAPR_HTTP_PORT=3500 - REGISTER_WORKFLOWS=true - REGISTER_ACTIVITIES=true build: context: . dockerfile: Workflow/Dockerfile ports: - "3500:3500" # only important so we can reach the Dapr HTTP sidecar from the host for testing purposes - "5113:5111" - "7777:7776" depends_on: - placement networks: - network workflow-dapr-a: image: "daprio/daprd:${DAPR_RUNTIME_VERSION}" command: [ "./daprd", "-app-id", "workflow-a", "-app-port", "5111", "-placement-host-address", "placement:50005", "-scheduler-host-address", "scheduler-0:50006", "-resources-path", "/components", "-config", "/dapr-config/config.yml", "-log-level", "info", ] volumes: - "./components/:/components" - "./dapr-config/:/dapr-config" depends_on: postgres-db: condition: service_started kafka: condition: service_healthy network_mode: "service:workflow-app-a" ########################### #Client App + Dapr sidecar ########################### client-app: build: context: . dockerfile: Client/Dockerfile ports: - "5112:5111" - "3503:3500" networks: - network client-dapr: image: "daprio/daprd:${DAPR_RUNTIME_VERSION}" command: [ "./daprd", "-app-id", "client", "-app-port", "5111", "-dapr-http-port", "3500", "-resources-path", "/components", "-log-level", "warn", ] volumes: - "./components/:/components" depends_on: kafka: condition: service_healthy network_mode: "service:client-app" ############################ # Dapr placement service ############################ placement: image: "daprio/dapr:${DAPR_PLACEMENT_VERSION}" command: ["./placement", "-port", "50005", "-log-level", "warn"] networks: - network # ############################ # # Dapr Scheduler service # ############################ scheduler-0: image: "daprio/dapr:${DAPR_SCHEDULER_VERSION}" command: ["./scheduler", "--etcd-data-dir", "/var/run/dapr/scheduler"] volumes: - ./dapr_scheduler/0:/var/run/dapr/scheduler networks: - network ############################ # Zookeeper ############################ zookeeper: image: confluentinc/cp-zookeeper:latest networks: - network restart: unless-stopped environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 ALLOW_ANONYMOUS_LOGIN: "true" ports: - 2181:2181 volumes: - zookeeper_logs:/var/lib/zookeeper/log - zookeeper_data:/var/lib/zookeeper/data ############################ # Kafka ############################ kafka: image: confluentinc/cp-kafka:7.3.1 networks: - network restart: unless-stopped depends_on: - zookeeper healthcheck: test: nc -z localhost 9092 || exit -1 interval: 10s retries: 10 timeout: 30s start_period: 10s ports: - 9092:9092 - 29092:29092 - 39092:39092 environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092,PLAINTEXT_DOCKER://host.docker.internal:39092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT,PLAINTEXT_DOCKER:PLAINTEXT KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_LOG4J_ROOT_LOGLEVEL: ERROR KAFKA_LOG4J_LOGGERS: org.apache.zookeeper=ERROR,org.apache.kafka=ERROR,kafka=ERROR,kafka.cluster=ERROR,kafka.controller=ERROR,kafka.coordinator=ERROR,kafka.log=ERROR,kafka.server=ERROR,kafka.zookeeper=ERROR,state.change.logger=ERROR KAFKA_JMX_PORT: 9997 KAFKA_NUM_PARTITIONS: 1 ############################ # Kafka UI ############################ kafka-ui: container_name: kafka-ui depends_on: kafka: condition: service_healthy image: provectuslabs/kafka-ui:latest ports: - 8080:8080 environment: KAFKA_CLUSTERS_0_NAME: local KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:29092 KAFKA_CLUSTERS_0_METRICS_PORT: 9997 KAFKA_CLUSTERS_0_AUDIT_TOPICAUDITENABLED: "true" KAFKA_CLUSTERS_0_AUDIT_CONSOLEAUDITENABLED: "true" LOGGING_LEVEL_ROOT: "error" LOGGING_LEVEL_COM_PROVECTUS: "error" networks: - network networks: network: volumes: db-data: driver: local zookeeper_logs: driver: local zookeeper_data: driver: local postgres-db-16-2: driver: local