version: '3.8' services: mysql: image: mysql:8.0 container_name: mysql-auth restart: always environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: authdb MYSQL_USER: authuser MYSQL_PASSWORD: authpassword ports: - '3310:3306' volumes: - mysql_data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 auth-service: image: node:20 container_name: auth-service restart: always environment: DB_HOST: mysql DB_PORT: 3306 DB_NAME: authdb DB_USER: authuser DB_PASSWORD: authpassword JWT_SECRET: supersecretkey KAFKA_BROKER: kafka:9092 KAFKA_CLIENT_ID: auth-service KAFKA_GROUP_ID: auth-service-group volumes: - ./auth-service:/usr/src/app working_dir: /usr/src/app command: bash -c "npm install && npm start" depends_on: mysql: condition: service_healthy mail-service: image: node:20 container_name: mail-service restart: always volumes: - ./mail-service:/usr/src/app working_dir: /usr/src/app command: bash -c "npm install && npm start" environment: DB_HOST: mysql DB_PORT: 3306 DB_NAME: authdb DB_USER: authuser DB_PASSWORD: authpassword KAFKA_BROKER: kafka:9092 KAFKA_CLIENT_ID: mail-service KAFKA_GROUP_ID: mail-service-group nginx-proxy-manager: image: 'jc21/nginx-proxy-manager:latest' container_name: nginx-proxy-manager restart: unless-stopped ports: - '80:80' - '443:443' - '81:81' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt client: build: context: ./frontend dockerfile: Dockerfile container_name: client restart: always depends_on: auth-service: condition: service_started zookeeper: image: confluentinc/cp-zookeeper:7.5.0 container_name: zookeeper environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 ports: - '2181:2181' volumes: - zookeeper_data:/var/lib/zookeeper/data - zookeeper_log:/var/lib/zookeeper/log kafka: image: confluentinc/cp-kafka:7.5.0 container_name: kafka depends_on: - zookeeper ports: - '9092:9092' environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 volumes: - kafka_data:/var/lib/kafka/data volumes: mysql_data: kafka_data: zookeeper_data: zookeeper_log: