version: '3.8' services: # ---------------------- 基础设施 ---------------------- mysql: image: mysql:5.7 container_name: ai-assistant-mysql restart: always environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root} MYSQL_DATABASE: ${MYSQL_DATABASE:-ai_assistant} MYSQL_CHARACTER_SET_SERVER: utf8mb4 MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql - ./init.sql:/docker-entrypoint-initdb.d/init.sql command: --default-authentication-plugin=mysql_native_password healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p${MYSQL_ROOT_PASSWORD:-root}"] interval: 10s timeout: 5s retries: 5 start_period: 30s networks: - ai-assistant-network redis: image: redis:6-alpine container_name: ai-assistant-redis restart: always ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 networks: - ai-assistant-network rabbitmq: image: rabbitmq:3-management-alpine container_name: ai-assistant-rabbitmq restart: always ports: - "5672:5672" - "15672:15672" environment: RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER:-admin} RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS:-admin} volumes: - rabbitmq_data:/var/lib/rabbitmq healthcheck: test: ["CMD", "rabbitmq-diagnostics", "ping"] interval: 10s timeout: 5s retries: 5 networks: - ai-assistant-network # ---------------------- 后端服务 ---------------------- gateway: build: ./backend/gateway container_name: ai-assistant-gateway restart: always ports: - "8080:8080" depends_on: - auth-service - archive-service - conversation-service - intent-service - recommend-service - generation-service - kb-admin-service - analytics-service networks: - ai-assistant-network auth-service: build: ./backend/auth-service container_name: ai-assistant-auth restart: always ports: - "8081:8081" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis - JWT_SECRET=${JWT_SECRET:-your-256-bit-secret-key-here-at-least-32-characters} depends_on: - mysql - redis networks: - ai-assistant-network archive-service: build: ./backend/archive-service container_name: ai-assistant-archive restart: always ports: - "8082:8082" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis - RABBITMQ_HOST=rabbitmq - WECOM_ARCHIVE_SECRET=${WECOM_ARCHIVE_SECRET:-} - WECOM_ARCHIVE_RSA_KEY=${WECOM_ARCHIVE_RSA_KEY:-} - WECOM_ARCHIVE_CALLBACK_TOKEN=${WECOM_ARCHIVE_CALLBACK_TOKEN:-} - WECOM_ARCHIVE_SDK_PATH=${WECOM_ARCHIVE_SDK_PATH:-/app/sdk} - MILVUS_HOST=${MILVUS_HOST:-8.159.132.53} - MILVUS_PORT=${MILVUS_PORT:-19530} - MILVUS_USERNAME=${MILVUS_USERNAME:-root} - MILVUS_PASSWORD=${MILVUS_PASSWORD:-Milvus} - MILVUS_COLLECTION=${MILVUS_COLLECTION:-message_summary} # 如需真实企微SDK,取消注释下行并将Linux .so文件放入 ./sdk/linux/ # volumes: # - ./sdk/linux:/app/sdk depends_on: - mysql - redis - rabbitmq networks: - ai-assistant-network conversation-service: build: ./backend/conversation-service container_name: ai-assistant-conversation restart: always ports: - "8083:8083" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis - RABBITMQ_HOST=rabbitmq depends_on: - mysql - redis - rabbitmq networks: - ai-assistant-network intent-service: build: ./backend/intent-service container_name: ai-assistant-intent restart: always ports: - "8084:8084" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis - RABBITMQ_HOST=rabbitmq depends_on: - mysql - redis - rabbitmq networks: - ai-assistant-network recommend-service: build: ./backend/recommendation-service container_name: ai-assistant-recommend restart: always ports: - "8085:8085" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis - RABBITMQ_HOST=rabbitmq - DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY:-} depends_on: - mysql - redis - rabbitmq networks: - ai-assistant-network generation-service: build: ./backend/generation-service container_name: ai-assistant-generation restart: always ports: - "8086:8086" environment: - REDIS_HOST=redis - DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY:-} depends_on: - redis networks: - ai-assistant-network kb-admin-service: build: ./backend/kb-admin-service container_name: ai-assistant-kbadmin restart: always ports: - "8087:8087" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis depends_on: - mysql - redis networks: - ai-assistant-network analytics-service: build: ./backend/analytics-service container_name: ai-assistant-analytics restart: always ports: - "8088:8088" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis depends_on: - mysql - redis networks: - ai-assistant-network # ---------------------- 前端服务 ---------------------- admin: build: ./frontend/admin container_name: ai-assistant-admin restart: always ports: - "5174:80" depends_on: - gateway networks: - ai-assistant-network sidebar: build: ./frontend/sidebar container_name: ai-assistant-sidebar restart: always ports: - "5173:80" depends_on: - gateway networks: - ai-assistant-network # ---------------------- 统一入口 Nginx ---------------------- nginx: image: nginx:alpine container_name: ai-assistant-nginx restart: always ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf depends_on: - gateway - admin - sidebar networks: - ai-assistant-network # ---------------------- 数据卷 ---------------------- volumes: mysql_data: redis_data: rabbitmq_data: # ---------------------- 网络 ---------------------- networks: ai-assistant-network: driver: bridge