services: security: build: context: ./security dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' extra_hosts: - 'host.docker.internal:host-gateway' ports: - '${APP_SECURITY_PORT:-8082}:80' env_file: - ./security/.env environment: WWWUSER: '${WWWUSER}' APP_IN_DOCKER: 1 XDEBUG_MODE: '${APP_SECURITY_XDEBUG_MODE:-off}' XDEBUG_CONFIG: '${APP_SECURITY_XDEBUG_CONFIG:-client_host=host.docker.internal}' IGNITION_LOCAL_SITES_PATH: '${PWD}' volumes: - './security:/var/www/html' - './secrets:/tmp/secrets' networks: - security - backend - vpc depends_on: - security-db security-db: image: postgres:${APP_SECURITY_DB_IMAGE_VERSION} ports: - '${APP_SECURITY_DB_PORT:-5432}:5432' env_file: - ./security/.env environment: PGPASSWD: '${DB_PASSWORD:-secret}' POSTGRES_DB: '${DB_DATABASE:-security}' POSTGRES_USER: '${DB_USERNAME:-security}' POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}' volumes: - security-db-data:/var/lib/postgresql/data networks: - security healthcheck: test: ["CMD", "pg_isready", "-q", "-d", "${DB_DATABASE:-security}", "-U", "${DB_USERNAME:-security}"] retries: 3 timeout: 5s license: build: context: ./license dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' extra_hosts: - 'host.docker.internal:host-gateway' ports: - '${APP_LICENSE_PORT:-8083}:80' env_file: - ./license/.env environment: WWWUSER: '${WWWUSER}' APP_IN_DOCKER: 1 XDEBUG_MODE: '${APP_LICENSE_XDEBUG_MODE:-off}' XDEBUG_CONFIG: '${APP_LICENSE_XDEBUG_CONFIG:-client_host=host.docker.internal}' IGNITION_LOCAL_SITES_PATH: '${PWD}' volumes: - './license:/var/www/html' - './secrets:/tmp/secrets' networks: - license - file-management - backend - vpc depends_on: - license-db license-db: image: postgres:${APP_LICENSE_DB_IMAGE_VERSION} ports: - '${APP_LICENSE_DB_PORT:-5433}:5432' env_file: - ./license/.env environment: PGPASSWD: '${DB_PASSWORD:-secret}' POSTGRES_DB: '${DB_DATABASE:-license}' POSTGRES_USER: '${DB_USERNAME:-license}' POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}' volumes: - license-db-data:/var/lib/postgresql/data networks: - license healthcheck: test: ["CMD", "pg_isready", "-q", "-d", "${DB_DATABASE:-license}", "-U", "${DB_USERNAME:-license}"] retries: 3 timeout: 5s file-management: build: context: ./file-management dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' extra_hosts: - 'host.docker.internal:host-gateway' ports: - '${APP_FILEMANAGEMENT_PORT:-8084}:80' env_file: - ./file-management/.env environment: WWWUSER: '${WWWUSER}' APP_IN_DOCKER: 1 XDEBUG_MODE: '${APP_FILEMANAGEMENT_XDEBUG_MODE:-off}' XDEBUG_CONFIG: '${APP_FILEMANAGEMENT_XDEBUG_CONFIG:-client_host=host.docker.internal}' IGNITION_LOCAL_SITES_PATH: '${PWD}' volumes: - './file-management:/var/www/html' - './secrets:/tmp/secrets' networks: - file-management - license - backend - vpc depends_on: - file-management-db file-management-db: image: postgres:${APP_FILEMANAGEMENT_DB_IMAGE_VERSION} ports: - '${APP_FILEMANAGEMENT_DB_PORT:-5434}:5432' env_file: - ./file-management/.env environment: PGPASSWD: '${DB_PASSWORD:-secret}' POSTGRES_DB: '${DB_DATABASE:-filemanagement}' POSTGRES_USER: '${DB_USERNAME:-filemanagement}' POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}' volumes: - file-management-db-data:/var/lib/postgresql/data networks: - file-management healthcheck: test: ["CMD", "pg_isready", "-q", "-d", "${DB_DATABASE:-filemanagement}", "-U", "${DB_USERNAME:-filemanagement}"] retries: 3 timeout: 5s notification: build: context: ./notification dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' extra_hosts: - 'host.docker.internal:host-gateway' ports: - '${APP_NOTIFICATION_PORT:-8085}:80' env_file: - ./notification/.env environment: WWWUSER: '${WWWUSER}' APP_IN_DOCKER: 1 XDEBUG_MODE: '${APP_NOTIFICATION_XDEBUG_MODE:-off}' XDEBUG_CONFIG: '${APP_NOTIFICATION_XDEBUG_CONFIG:-client_host=host.docker.internal}' IGNITION_LOCAL_SITES_PATH: '${PWD}' volumes: - './notification:/var/www/html' - './secrets:/tmp/secrets' networks: - notification - backend - vpc depends_on: - notification-db notification-db: image: postgres:${APP_NOTIFICATION_DB_IMAGE_VERSION} ports: - '${APP_NOTIFICATION_DB_PORT:-5435}:5432' env_file: - ./notification/.env environment: PGPASSWD: '${DB_PASSWORD:-secret}' POSTGRES_DB: '${DB_DATABASE:-notification}' POSTGRES_USER: '${DB_USERNAME:-notification}' POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}' volumes: - notification-db-data:/var/lib/postgresql/data networks: - notification healthcheck: test: ["CMD", "pg_isready", "-q", "-d", "${DB_DATABASE:-notification}", "-U", "${DB_USERNAME:-notification}"] retries: 3 timeout: 5s zoo1: image: ${ZOOKEEPER_IMAGE}:${ZOOKEEPER_IMAGE_VERSION} restart: unless-stopped ports: - "2181:2181" environment: ZOOKEEPER_SERVER_ID: 1 ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 ZOOKEEPER_INIT_LIMIT: 10 ZOOKEEPER_SYNC_LIMIT: 5 ZOOKEEPER_PEER_PORT: 2888 ZOOKEEPER_LEADER_PORT: 3888 ZOOKEEPER_SERVERS: zoo1:2888:3888;zoo2:2888:3888;zoo3:2888:3888 volumes: - zookeeper1-data:/var/lib/zookeeper/data - zookeeper1-logs:/var/lib/zookeeper/log networks: - backend zoo2: image: ${ZOOKEEPER_IMAGE}:${ZOOKEEPER_IMAGE_VERSION} restart: unless-stopped ports: - "2182:2182" environment: ZOOKEEPER_SERVER_ID: 2 ZOOKEEPER_CLIENT_PORT: 2182 ZOOKEEPER_TICK_TIME: 2000 ZOOKEEPER_INIT_LIMIT: 10 ZOOKEEPER_SYNC_LIMIT: 5 ZOOKEEPER_PEER_PORT: 2888 ZOOKEEPER_LEADER_PORT: 3888 ZOOKEEPER_SERVERS: zoo1:2888:3888;zoo2:2888:3888;zoo3:2888:3888 volumes: - zookeeper2-data:/var/lib/zookeeper/data - zookeeper2-logs:/var/lib/zookeeper/log networks: - backend zoo3: image: ${ZOOKEEPER_IMAGE}:${ZOOKEEPER_IMAGE_VERSION} restart: unless-stopped ports: - "2183:2183" environment: ZOOKEEPER_SERVER_ID: 3 ZOOKEEPER_CLIENT_PORT: 2183 ZOOKEEPER_TICK_TIME: 2000 ZOOKEEPER_INIT_LIMIT: 10 ZOOKEEPER_SYNC_LIMIT: 5 ZOOKEEPER_PEER_PORT: 2888 ZOOKEEPER_LEADER_PORT: 3888 ZOOKEEPER_SERVERS: zoo1:2888:3888;zoo2:2888:3888;zoo3:2888:3888 volumes: - zookeeper3-data:/var/lib/zookeeper/data - zookeeper3-logs:/var/lib/zookeeper/log networks: - backend zoonavigator: image: elkozmon/zoonavigator:${ZOONAVIGATOR_VERSION} restart: unless-stopped ports: - "19000:9000" environment: - CONNECTION_ZK1_NAME=zoo1 - CONNECTION_ZK1_CONN=zoo1:2181 - CONNECTION_ZK2_NAME=zoo2 - CONNECTION_ZK2_CONN=zoo2:2182 - CONNECTION_ZK3_NAME=zoo3 - CONNECTION_ZK3_CONN=zoo3:2183 - AUTO_CONNECT_CONNECTION_ID=ZK1 depends_on: - zoo1 - zoo2 - zoo3 networks: - backend - vpc kafka1: image: ${KAFKA_IMAGE}:${KAFKA_IMAGE_VERSION} ports: - "9092:9092" - "29092:29092" - "9997:9997" environment: KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka1:19092,EXTERNAL://${DOCKER_HOST_IP:-127.0.0.1}:9092,DOCKER://host.docker.internal:29092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,DOCKER:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181,zoo2:2182,zoo3:2183" KAFKA_BROKER_ID: 1 KAFKA_JMX_PORT: 9997 KAFKA_JMX_OPTS: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka1 -Dcom.sun.management.jmxremote.rmi.port=9997 KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO" KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.authorizer.AclAuthorizer KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND: "true" depends_on: - zoo1 - zoo2 - zoo3 networks: - backend volumes: - kafka1-data:/var/lib/kafka/data kafka2: image: ${KAFKA_IMAGE}:${KAFKA_IMAGE_VERSION} ports: - "9093:9093" - "29093:29093" - "9998:9998" environment: KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka2:19093,EXTERNAL://${DOCKER_HOST_IP:-127.0.0.1}:9093,DOCKER://host.docker.internal:29093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,DOCKER:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181,zoo2:2182,zoo3:2183" KAFKA_BROKER_ID: 2 KAFKA_JMX_PORT: 9998 KAFKA_JMX_OPTS: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka1 -Dcom.sun.management.jmxremote.rmi.port=9998 KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO" KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.authorizer.AclAuthorizer KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND: "true" depends_on: - zoo1 - zoo2 - zoo3 networks: - backend volumes: - kafka2-data:/var/lib/kafka/data kafka3: image: ${KAFKA_IMAGE}:${KAFKA_IMAGE_VERSION} ports: - "9094:9094" - "29094:29094" - "9999:9999" environment: KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka3:19094,EXTERNAL://${DOCKER_HOST_IP:-127.0.0.1}:9094,DOCKER://host.docker.internal:29094 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,DOCKER:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181,zoo2:2182,zoo3:2183" KAFKA_BROKER_ID: 3 KAFKA_JMX_PORT: 9999 KAFKA_JMX_OPTS: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka2 -Dcom.sun.management.jmxremote.rmi.port=9999 KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO" KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.authorizer.AclAuthorizer KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND: "true" depends_on: - zoo1 - zoo2 - zoo3 networks: - backend volumes: - kafka3-data:/var/lib/kafka/data schemaregistry1: image: ${SCHEMA_REGISTRY_IMAGE}:${SCHEMA_REGISTRY_IMAGE_VERSION} ports: - 8085:8085 environment: SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: PLAINTEXT://kafka1:19092 SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL: PLAINTEXT SCHEMA_REGISTRY_HOST_NAME: schemaregistry1 SCHEMA_REGISTRY_LISTENERS: http://schemaregistry1:8085 SCHEMA_REGISTRY_SCHEMA_REGISTRY_INTER_INSTANCE_PROTOCOL: "http" SCHEMA_REGISTRY_LOG4J_ROOT_LOGLEVEL: INFO SCHEMA_REGISTRY_KAFKASTORE_TOPIC: _schemas depends_on: - kafka1 networks: - backend schemaregistry2: image: ${SCHEMA_REGISTRY_IMAGE}:${SCHEMA_REGISTRY_IMAGE_VERSION} ports: - 18085:8085 environment: SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: PLAINTEXT://kafka2:19093 SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL: PLAINTEXT SCHEMA_REGISTRY_HOST_NAME: schemaregistry2 SCHEMA_REGISTRY_LISTENERS: http://schemaregistry2:8085 SCHEMA_REGISTRY_SCHEMA_REGISTRY_INTER_INSTANCE_PROTOCOL: "http" SCHEMA_REGISTRY_LOG4J_ROOT_LOGLEVEL: INFO SCHEMA_REGISTRY_KAFKASTORE_TOPIC: _schemas depends_on: - kafka1 networks: - backend kafka-connect1: image: ${KAFKA_CONNECT_IMAGE}:${KAFKA_CONNECT_IMAGE_VERSION} ports: - 8083:8083 environment: CONNECT_BOOTSTRAP_SERVERS: kafka1:19092 CONNECT_GROUP_ID: compose-connect-group CONNECT_CONFIG_STORAGE_TOPIC: _connect_configs CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1 CONNECT_OFFSET_STORAGE_TOPIC: _connect_offset CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1 CONNECT_STATUS_STORAGE_TOPIC: _connect_status CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1 CONNECT_KEY_CONVERTER: org.apache.kafka.connect.storage.StringConverter CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL: http://schemaregistry1:8085 CONNECT_VALUE_CONVERTER: org.apache.kafka.connect.storage.StringConverter CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schemaregistry1:8085 CONNECT_INTERNAL_KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter CONNECT_INTERNAL_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter CONNECT_REST_ADVERTISED_HOST_NAME: kafka-connect1 CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components" depends_on: - kafka1 - schemaregistry1 networks: - backend kafkaui: image: provectuslabs/kafka-ui:latest ports: - 8081:8080 environment: KAFKA_CLUSTERS_0_NAME: local KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka1:19092 KAFKA_CLUSTERS_0_METRICS_PORT: 9997 KAFKA_CLUSTERS_0_SCHEMAREGISTRY: http://schemaregistry1:8085 KAFKA_CLUSTERS_0_KAFKACONNECT_0_NAME: first KAFKA_CLUSTERS_0_KAFKACONNECT_0_ADDRESS: http://kafka-connect1:8083 KAFKA_CLUSTERS_1_NAME: secondLocal KAFKA_CLUSTERS_1_BOOTSTRAPSERVERS: kafka2:19093 KAFKA_CLUSTERS_1_METRICS_PORT: 9998 KAFKA_CLUSTERS_1_SCHEMAREGISTRY: http://schemaregistry2:8085 KAFKA_CLUSTERS_2_NAME: thirdLocal KAFKA_CLUSTERS_2_BOOTSTRAPSERVERS: kafka3:19094 KAFKA_CLUSTERS_2_METRICS_PORT: 9999 KAFKA_CLUSTERS_2_SCHEMAREGISTRY: http://schemaregistry2:8085 DYNAMIC_CONFIG_ENABLED: 'true' networks: - backend - vpc depends_on: - kafka1 - kafka2 - kafka3 - schemaregistry1 - schemaregistry2 - kafka-connect1 minio: image: quay.io/minio/minio:${MINIO_IMAGE_VERSION} ports: - "9000:9000" - "9001:9001" command: server /data --console-address ":9001" networks: - file-management - vpc volumes: - minio-data:/data environment: - MINIO_ROOT_USER=${MINIO_USER} - MINIO_ROOT_PASSWORD=${MINIO_PASSWORD} networks: backend: driver: bridge internal: true security: driver: bridge internal: true license: driver: bridge internal: true file-management: driver: bridge internal: true notification: driver: bridge internal: true vpc: driver: bridge volumes: zookeeper1-data: zookeeper1-logs: zookeeper2-data: zookeeper2-logs: zookeeper3-data: zookeeper3-logs: kafka1-data: kafka2-data: kafka3-data: security-db-data: license-db-data: file-management-db-data: notification-db-data: minio-data: