version: '3.8' services: # MySQL Database mysql: image: mysql:8.0 container_name: tg-mysql restart: always environment: MYSQL_ROOT_PASSWORD: tg_mysql_root_2024 MYSQL_DATABASE: tg_manage MYSQL_USER: tg_manage MYSQL_PASSWORD: tg_manage_pass_2024 ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql - ./init.sql:/docker-entrypoint-initdb.d/init.sql command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci networks: - tg-network # MongoDB mongodb: image: mongo:5.0 container_name: tg-mongodb restart: always environment: MONGO_INITDB_DATABASE: tg_manage ports: - "27017:27017" volumes: - mongo_data:/data/db networks: - tg-network # Redis redis: image: redis:7-alpine container_name: tg-redis restart: always ports: - "6379:6379" volumes: - redis_data:/data networks: - tg-network # RabbitMQ rabbitmq: image: rabbitmq:3.11-management-alpine container_name: tg-rabbitmq restart: always environment: RABBITMQ_DEFAULT_USER: admin RABBITMQ_DEFAULT_PASS: admin123 ports: - "5672:5672" - "15672:15672" volumes: - rabbitmq_data:/var/lib/rabbitmq networks: - tg-network # Backend Service backend: build: ./backend container_name: tg-backend restart: always depends_on: - mysql - mongodb - redis - rabbitmq environment: NODE_ENV: production # Override config for Docker environment DB_HOST: mysql DB_NAME: tg_manage DB_USER: tg_manage DB_PASS: tg_manage_pass_2024 MONGO_URL: mongodb://mongodb:27017/tg_manage REDIS_HOST: redis REDIS_PORT: 6379 RABBITMQ_URL: amqp://admin:admin123@rabbitmq:5672 ports: - "3000:3000" - "3001:3001" volumes: - ./uploads:/app/uploads - ./backend/logs:/app/logs networks: - tg-network # Frontend Service frontend: build: context: ./frontend-vben dockerfile: apps/web-antd/Dockerfile container_name: tg-frontend restart: always depends_on: - backend ports: - "80:80" networks: - tg-network volumes: mysql_data: mongo_data: redis_data: rabbitmq_data: networks: tg-network: driver: bridge