|
- x-app-env: &app-env
- env_file:
- - .env
- restart: unless-stopped
- networks:
- - emp-net
-
- x-java-depends: &java-depends
- nacos:
- condition: service_healthy
- mysql:
- condition: service_healthy
- redis:
- condition: service_healthy
-
- services:
- mysql:
- image: ${MYSQL_IMAGE:-mysql:8.0}
- restart: unless-stopped
- ports:
- - "0.0.0.0:${MYSQL_HOST_PORT:-23306}:3306"
- environment:
- TZ: Asia/Shanghai
- MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE: ${MYSQL_DATABASE:-emp}
- command:
- - --character-set-server=utf8mb4
- - --collation-server=utf8mb4_0900_ai_ci
- - --default-time-zone=+08:00
- - --max-connections=1000
- volumes:
- - mysql_data:/var/lib/mysql
- healthcheck:
- test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p\"$${MYSQL_ROOT_PASSWORD}\" --silent"]
- interval: 10s
- timeout: 5s
- retries: 30
- networks:
- - emp-net
-
- redis:
- image: ${REDIS_IMAGE:-redis:7-alpine}
- restart: unless-stopped
- environment:
- REDIS_PASSWORD: ${REDIS_PASSWORD}
- command: ["sh", "-c", "redis-server --appendonly yes --requirepass \"$${REDIS_PASSWORD}\""]
- volumes:
- - redis_data:/data
- healthcheck:
- test: ["CMD-SHELL", "redis-cli -a \"$${REDIS_PASSWORD}\" ping | grep -q PONG"]
- interval: 10s
- timeout: 5s
- retries: 30
- networks:
- - emp-net
-
- kafka:
- image: ${KAFKA_IMAGE:-bitnami/kafka:3.7.0}
- restart: unless-stopped
- ports:
- - "0.0.0.0:${KAFKA_HOST_PORT:-29362}:9094"
- environment:
- ALLOW_PLAINTEXT_LISTENER: "yes"
- KAFKA_CFG_NODE_ID: 1
- KAFKA_CFG_PROCESS_ROLES: controller,broker
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
- KAFKA_CFG_LISTENERS: INTERNAL://:9092,CONTROLLER://:9093,EXTERNAL://:9094
- KAFKA_CFG_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,EXTERNAL://${PUBLIC_HOST}:${KAFKA_HOST_PORT:-29362}
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME: INTERNAL
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "true"
- KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
- KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR: 1
- volumes:
- - kafka_data:/bitnami/kafka
- healthcheck:
- test: ["CMD-SHELL", "/opt/bitnami/kafka/bin/kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list >/dev/null 2>&1"]
- interval: 10s
- timeout: 5s
- retries: 30
- networks:
- - emp-net
-
- kafka-init:
- image: ${KAFKA_IMAGE:-bitnami/kafka:3.7.0}
- restart: "no"
- depends_on:
- kafka:
- condition: service_healthy
- entrypoint: ["/bin/bash", "-ec"]
- environment:
- KAFKA_TOPIC: ${KAFKA_TOPIC:-vehicle-data}
- command: |
- echo "create kafka topic: $${KAFKA_TOPIC}"
- /opt/bitnami/kafka/bin/kafka-topics.sh \
- --bootstrap-server kafka:9092 \
- --create \
- --if-not-exists \
- --topic "$${KAFKA_TOPIC}" \
- --partitions 3 \
- --replication-factor 1
- /opt/bitnami/kafka/bin/kafka-topics.sh \
- --bootstrap-server kafka:9092 \
- --describe \
- --topic "$${KAFKA_TOPIC}"
- networks:
- - emp-net
-
- tdengine:
- image: ${TDENGINE_IMAGE:-tdengine/tdengine:3.3.6.0}
- hostname: tdengine
- privileged: true
- restart: unless-stopped
- ports:
- - "0.0.0.0:${TDENGINE_UI_HOST_PORT:-${TDENGINE_REST_HOST_PORT:-37363}}:6060"
- environment:
- TZ: Asia/Shanghai
- TAOS_FQDN: tdengine
- TDENGINE_DATABASE: ${TDENGINE_DATABASE:-emp}
- volumes:
- - tdengine_data:/var/lib/taos
- - tdengine_log:/var/log/taos
- healthcheck:
- test: ["CMD-SHELL", "taos -s \"create database if not exists $${TDENGINE_DATABASE}; show databases;\" >/dev/null 2>&1"]
- interval: 10s
- timeout: 5s
- retries: 30
- networks:
- - emp-net
-
- nacos:
- image: ${NACOS_IMAGE:-nacos/nacos-server:v2.3.2-slim}
- restart: unless-stopped
- environment:
- MODE: standalone
- SPRING_DATASOURCE_PLATFORM: ""
- NACOS_AUTH_ENABLE: ${NACOS_AUTH_ENABLE:-true}
- NACOS_AUTH_IDENTITY_KEY: ${NACOS_AUTH_IDENTITY_KEY:-emp}
- NACOS_AUTH_IDENTITY_VALUE: ${NACOS_AUTH_IDENTITY_VALUE:-emp2026}
- NACOS_AUTH_TOKEN: ${NACOS_AUTH_TOKEN}
- volumes:
- - nacos_data:/home/nacos/data
- - nacos_logs:/home/nacos/logs
- healthcheck:
- test: ["CMD-SHELL", "curl -sf http://127.0.0.1:8848/nacos/actuator/health || exit 1"]
- interval: 10s
- timeout: 5s
- retries: 30
- networks:
- - emp-net
-
- emp-gateway:
- <<: *app-env
- image: ${IMAGE_NAMESPACE:-emp-test}/emp-gateway:${IMAGE_TAG:-latest}
- depends_on:
- <<: *java-depends
-
- emp-auth:
- <<: *app-env
- image: ${IMAGE_NAMESPACE:-emp-test}/emp-auth:${IMAGE_TAG:-latest}
- depends_on:
- <<: *java-depends
-
- emp-monitor:
- <<: *app-env
- image: ${IMAGE_NAMESPACE:-emp-test}/emp-monitor:${IMAGE_TAG:-latest}
- depends_on:
- <<: *java-depends
- tdengine:
- condition: service_healthy
- emp-pdf:
- condition: service_healthy
-
- emp-data:
- <<: *app-env
- image: ${IMAGE_NAMESPACE:-emp-test}/emp-data:${IMAGE_TAG:-latest}
- depends_on:
- <<: *java-depends
- tdengine:
- condition: service_healthy
- kafka-init:
- condition: service_completed_successfully
- emp-ws:
- condition: service_started
-
- emp-pdf:
- <<: *app-env
- image: ${IMAGE_NAMESPACE:-emp-test}/emp-pdf:${IMAGE_TAG:-latest}
- environment:
- PORT: 3100
- healthcheck:
- test: ["CMD-SHELL", "node -e \"require('http').get('http://127.0.0.1:3100/pdf', r => { r.resume(); process.exit(r.statusCode < 500 ? 0 : 1) }).on('error', () => process.exit(1))\""]
- interval: 10s
- timeout: 5s
- retries: 30
-
- emp-ws:
- <<: *app-env
- image: ${IMAGE_NAMESPACE:-emp-test}/emp-ws:${IMAGE_TAG:-latest}
- ports:
- - "0.0.0.0:${WS_HOST_PORT:-37362}:3000"
- depends_on:
- mysql:
- condition: service_healthy
- redis:
- condition: service_healthy
- kafka-init:
- condition: service_completed_successfully
-
- emp-admin:
- image: ${IMAGE_NAMESPACE:-emp-test}/emp-admin:${IMAGE_TAG:-latest}
- restart: unless-stopped
- ports:
- - "0.0.0.0:${ADMIN_HOST_PORT:-37361}:80"
- depends_on:
- emp-gateway:
- condition: service_started
- emp-ws:
- condition: service_started
- networks:
- - emp-net
-
- networks:
- emp-net:
- driver: bridge
-
- volumes:
- mysql_data:
- redis_data:
- kafka_data:
- tdengine_data:
- tdengine_log:
- nacos_data:
- nacos_logs:
|