345 lines
10 KiB
YAML
345 lines
10 KiB
YAML
#===============================================================================
|
|
# iConsulting Docker Compose 配置
|
|
#
|
|
# 服务架构:
|
|
# - 基础设施: PostgreSQL, Redis, Neo4j
|
|
# - API网关: Kong
|
|
# - 后端服务: conversation, user, payment, knowledge, evolution
|
|
# - 前端服务: nginx (托管 web-client 和 admin-client)
|
|
#
|
|
# 网络配置:
|
|
# - 对外网卡: 14.215.128.96 (用户访问)
|
|
# - 出口网卡: 154.84.135.121 (Claude API 调用)
|
|
#
|
|
#===============================================================================
|
|
|
|
# version 属性已弃用,移除以避免警告
|
|
|
|
services:
|
|
#=============================================================================
|
|
# 基础设施服务
|
|
#=============================================================================
|
|
|
|
postgres:
|
|
image: postgres:15-alpine
|
|
container_name: iconsulting-postgres
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
|
POSTGRES_DB: ${POSTGRES_DB:-iconsulting}
|
|
ports:
|
|
- "5432:5432"
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
- ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
networks:
|
|
- iconsulting-network
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: iconsulting-redis
|
|
restart: unless-stopped
|
|
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD:-redis123}
|
|
ports:
|
|
- "6379:6379"
|
|
volumes:
|
|
- redis_data:/data
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
networks:
|
|
- iconsulting-network
|
|
|
|
neo4j:
|
|
image: neo4j:5-community
|
|
container_name: iconsulting-neo4j
|
|
restart: unless-stopped
|
|
environment:
|
|
NEO4J_AUTH: ${NEO4J_USER:-neo4j}/${NEO4J_PASSWORD:-neo4j123}
|
|
NEO4J_PLUGINS: '["apoc"]'
|
|
NEO4J_dbms_memory_heap_max__size: 1G
|
|
ports:
|
|
- "7474:7474" # HTTP
|
|
- "7687:7687" # Bolt
|
|
volumes:
|
|
- neo4j_data:/data
|
|
- neo4j_logs:/logs
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:7474 || exit 1"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
networks:
|
|
- iconsulting-network
|
|
|
|
#=============================================================================
|
|
# Kong API 网关
|
|
#=============================================================================
|
|
|
|
kong-database:
|
|
image: postgres:15-alpine
|
|
container_name: iconsulting-kong-db
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_USER: kong
|
|
POSTGRES_PASSWORD: kong
|
|
POSTGRES_DB: kong
|
|
volumes:
|
|
- kong_data:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U kong"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
networks:
|
|
- iconsulting-network
|
|
|
|
kong:
|
|
image: kong:3.4
|
|
container_name: iconsulting-kong
|
|
restart: unless-stopped
|
|
depends_on:
|
|
kong-database:
|
|
condition: service_healthy
|
|
environment:
|
|
KONG_DATABASE: postgres
|
|
KONG_PG_HOST: kong-database
|
|
KONG_PG_USER: kong
|
|
KONG_PG_PASSWORD: kong
|
|
KONG_PG_DATABASE: kong
|
|
KONG_PROXY_ACCESS_LOG: /dev/stdout
|
|
KONG_ADMIN_ACCESS_LOG: /dev/stdout
|
|
KONG_PROXY_ERROR_LOG: /dev/stderr
|
|
KONG_ADMIN_ERROR_LOG: /dev/stderr
|
|
KONG_ADMIN_LISTEN: 0.0.0.0:8001
|
|
KONG_PROXY_LISTEN: 0.0.0.0:8000, 0.0.0.0:8443 ssl
|
|
ports:
|
|
- "8000:8000" # Proxy
|
|
- "8443:8443" # Proxy SSL
|
|
- "8001:8001" # Admin API
|
|
healthcheck:
|
|
test: ["CMD", "kong", "health"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
networks:
|
|
- iconsulting-network
|
|
|
|
#=============================================================================
|
|
# 后端微服务
|
|
#=============================================================================
|
|
|
|
user-service:
|
|
build:
|
|
context: .
|
|
dockerfile: packages/services/user-service/Dockerfile
|
|
container_name: iconsulting-user
|
|
restart: unless-stopped
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
environment:
|
|
NODE_ENV: production
|
|
PORT: 3001
|
|
POSTGRES_HOST: postgres
|
|
POSTGRES_PORT: 5432
|
|
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
|
POSTGRES_DB: ${POSTGRES_DB:-iconsulting}
|
|
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-iconsulting}
|
|
REDIS_URL: redis://:${REDIS_PASSWORD:-redis123}@redis:6379
|
|
JWT_SECRET: ${JWT_SECRET:-your-jwt-secret-key}
|
|
JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-7d}
|
|
ports:
|
|
- "3001:3001"
|
|
networks:
|
|
- iconsulting-network
|
|
|
|
payment-service:
|
|
build:
|
|
context: .
|
|
dockerfile: packages/services/payment-service/Dockerfile
|
|
container_name: iconsulting-payment
|
|
restart: unless-stopped
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
environment:
|
|
NODE_ENV: production
|
|
PORT: 3002
|
|
POSTGRES_HOST: postgres
|
|
POSTGRES_PORT: 5432
|
|
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
|
POSTGRES_DB: ${POSTGRES_DB:-iconsulting}
|
|
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-iconsulting}
|
|
REDIS_URL: redis://:${REDIS_PASSWORD:-redis123}@redis:6379
|
|
ALIPAY_APP_ID: ${ALIPAY_APP_ID}
|
|
ALIPAY_PRIVATE_KEY: ${ALIPAY_PRIVATE_KEY}
|
|
WECHAT_APP_ID: ${WECHAT_APP_ID}
|
|
WECHAT_MCH_ID: ${WECHAT_MCH_ID}
|
|
WECHAT_API_KEY: ${WECHAT_API_KEY}
|
|
STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY}
|
|
ports:
|
|
- "3002:3002"
|
|
networks:
|
|
- iconsulting-network
|
|
|
|
knowledge-service:
|
|
build:
|
|
context: .
|
|
dockerfile: packages/services/knowledge-service/Dockerfile
|
|
container_name: iconsulting-knowledge
|
|
restart: unless-stopped
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
neo4j:
|
|
condition: service_healthy
|
|
environment:
|
|
NODE_ENV: production
|
|
PORT: 3003
|
|
POSTGRES_HOST: postgres
|
|
POSTGRES_PORT: 5432
|
|
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
|
POSTGRES_DB: ${POSTGRES_DB:-iconsulting}
|
|
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-iconsulting}
|
|
REDIS_URL: redis://:${REDIS_PASSWORD:-redis123}@redis:6379
|
|
NEO4J_URI: bolt://neo4j:7687
|
|
NEO4J_USER: ${NEO4J_USER:-neo4j}
|
|
NEO4J_PASSWORD: ${NEO4J_PASSWORD:-neo4j123}
|
|
OPENAI_API_KEY: ${OPENAI_API_KEY}
|
|
ports:
|
|
- "3003:3003"
|
|
networks:
|
|
- iconsulting-network
|
|
|
|
conversation-service:
|
|
build:
|
|
context: .
|
|
dockerfile: packages/services/conversation-service/Dockerfile
|
|
container_name: iconsulting-conversation
|
|
restart: unless-stopped
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
knowledge-service:
|
|
condition: service_started
|
|
environment:
|
|
NODE_ENV: production
|
|
PORT: 3004
|
|
POSTGRES_HOST: postgres
|
|
POSTGRES_PORT: 5432
|
|
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
|
POSTGRES_DB: ${POSTGRES_DB:-iconsulting}
|
|
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-iconsulting}
|
|
REDIS_URL: redis://:${REDIS_PASSWORD:-redis123}@redis:6379
|
|
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
|
|
ANTHROPIC_BASE_URL: ${ANTHROPIC_BASE_URL:-https://api.anthropic.com}
|
|
KNOWLEDGE_SERVICE_URL: http://knowledge-service:3003
|
|
CORS_ORIGINS: https://iconsulting.szaiai.com,http://localhost:5173
|
|
ports:
|
|
- "3004:3004"
|
|
networks:
|
|
- iconsulting-network
|
|
|
|
evolution-service:
|
|
build:
|
|
context: .
|
|
dockerfile: packages/services/evolution-service/Dockerfile
|
|
container_name: iconsulting-evolution
|
|
restart: unless-stopped
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
environment:
|
|
NODE_ENV: production
|
|
PORT: 3005
|
|
POSTGRES_HOST: postgres
|
|
POSTGRES_PORT: 5432
|
|
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
|
POSTGRES_DB: ${POSTGRES_DB:-iconsulting}
|
|
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-iconsulting}
|
|
REDIS_URL: redis://:${REDIS_PASSWORD:-redis123}@redis:6379
|
|
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
|
|
ANTHROPIC_BASE_URL: ${ANTHROPIC_BASE_URL:-https://api.anthropic.com}
|
|
ports:
|
|
- "3005:3005"
|
|
networks:
|
|
- iconsulting-network
|
|
|
|
#=============================================================================
|
|
# 前端 Nginx
|
|
#=============================================================================
|
|
|
|
nginx:
|
|
image: nginx:alpine
|
|
container_name: iconsulting-nginx
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- kong
|
|
ports:
|
|
- "8080:80"
|
|
- "18443:443"
|
|
volumes:
|
|
- ./packages/web-client/dist:/usr/share/nginx/html/web:ro
|
|
- ./packages/admin-client/dist:/usr/share/nginx/html/admin:ro
|
|
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
|
- ./nginx/conf.d:/etc/nginx/conf.d:ro
|
|
- ./nginx/ssl:/etc/nginx/ssl:ro
|
|
healthcheck:
|
|
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost/health"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
networks:
|
|
- iconsulting-network
|
|
|
|
#===============================================================================
|
|
# 网络配置
|
|
#===============================================================================
|
|
|
|
networks:
|
|
iconsulting-network:
|
|
driver: bridge
|
|
ipam:
|
|
config:
|
|
- subnet: 172.20.0.0/16
|
|
|
|
#===============================================================================
|
|
# 数据卷
|
|
#===============================================================================
|
|
|
|
volumes:
|
|
postgres_data:
|
|
driver: local
|
|
redis_data:
|
|
driver: local
|
|
neo4j_data:
|
|
driver: local
|
|
neo4j_logs:
|
|
driver: local
|
|
kong_data:
|
|
driver: local
|