Files
012-kaopeilian/deploy/docker/docker-compose.kpl.yml
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

208 lines
6.3 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 瑞小美团队开发环境 Docker Compose 配置
# 域名kpl.ireborn.com.cn
# 支持热重载,与演示系统完全隔离
#
# ⚠️ 敏感配置API Key 等)请在 .env.kpl 文件中设置
# 启动命令docker compose --env-file .env.kpl -f docker-compose.kpl.yml up -d
name: kpl-dev
services:
# 前端开发服务
kpl-frontend-dev:
build:
context: ./kaopeilian-frontend
dockerfile: Dockerfile.dev
container_name: kpl-frontend-dev
restart: unless-stopped
ports:
- "3002:3001"
environment:
- NODE_ENV=development
- VITE_APP_ENV=development
- VITE_API_BASE_URL=https://kpl.ireborn.com.cn
- VITE_WS_BASE_URL=wss://kpl.ireborn.com.cn
- VITE_USE_MOCK_DATA=false
- VITE_ENABLE_DEVTOOLS=true
- VITE_ENABLE_REQUEST_LOG=true
- CHOKIDAR_USEPOLLING=true # 支持Docker中的文件监听
- WATCHPACK_POLLING=true # 支持热重载
volumes:
# 挂载源代码实现热重载(关键配置)
- ./kaopeilian-frontend:/app
- kpl_frontend_node_modules:/app/node_modules # 使用命名卷
- ./kaopeilian-frontend/logs:/app/logs
networks:
- kpl-dev-network
depends_on:
kpl-backend-dev:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3001/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
# 后端开发服务
kpl-backend-dev:
build:
context: ./kaopeilian-backend
dockerfile: Dockerfile.dev
container_name: kpl-backend-dev
restart: unless-stopped
ports:
- "8001:8000"
environment:
- PYTHONPATH=/app
- DEBUG=true
- ENV=development
- "DATABASE_URL=mysql+aiomysql://root:nj861021@kpl-mysql-dev:3306/kaopeilian?charset=utf8mb4"
- REDIS_URL=redis://kpl-redis-dev:6379/0
- MYSQL_HOST=kpl-mysql-dev
- MYSQL_PORT=3306
- MYSQL_USER=root
- "MYSQL_PASSWORD=nj861021"
- MYSQL_DATABASE=kaopeilian
- REDIS_HOST=kpl-redis-dev
- REDIS_PORT=6379
- REDIS_DB=0
- PYTHONUNBUFFERED=1 # 确保日志实时输出
- CORS_ORIGINS=["https://kpl.ireborn.com.cn","http://localhost:3002","http://127.0.0.1:3002"]
# Coze OAuth配置
- COZE_OAUTH_CLIENT_ID=1114009328887
- COZE_OAUTH_PUBLIC_KEY_ID=GGs9pw0BDHx2k9vGGehUyRgKV-PyUWLBncDs-YNNN_I
- COZE_OAUTH_PRIVATE_KEY_PATH=/app/secrets/coze_private_key.pem
- COZE_PRACTICE_BOT_ID=7560643598174683145
# Coze 播课工作流配置(瑞小美专用)
- COZE_BROADCAST_WORKFLOW_ID=7561161554420482088
- COZE_BROADCAST_SPACE_ID=7474971491470688296
- COZE_BROADCAST_BOT_ID=7560643598174683145
# 完全禁用代理(覆盖 Docker Desktop 的代理配置)
- HTTP_PROXY=
- HTTPS_PROXY=
- http_proxy=
- https_proxy=
- NO_PROXY=
- no_proxy=
# AI 服务配置(遵循瑞小美 AI 接入规范)
# 注意API Key 应从 .env 文件或密钥管理服务获取
- AI_PRIMARY_API_KEY=${AI_PRIMARY_API_KEY:-}
- AI_ANTHROPIC_API_KEY=${AI_ANTHROPIC_API_KEY:-}
- AI_PRIMARY_BASE_URL=https://4sapi.com/v1
- AI_FALLBACK_API_KEY=${AI_FALLBACK_API_KEY:-}
- AI_FALLBACK_BASE_URL=https://openrouter.ai/api/v1
# 默认模型:遵循"优先最强"原则,使用 Claude Opus 4.5
- AI_DEFAULT_MODEL=claude-opus-4-5-20251101-thinking
- AI_TIMEOUT=120
volumes:
# 挂载源代码实现热重载(关键配置)
- ./kaopeilian-backend:/app:rw
- /data/kaopeilian/uploads/kpl:/app/uploads:rw # 迁移到数据盘
- ./kaopeilian-backend/logs:/app/logs:rw
- ./kaopeilian-backend/secrets:/app/secrets:ro
# 排除虚拟环境目录,避免冲突
- /app/venv
networks:
- kpl-dev-network
depends_on:
kpl-mysql-dev:
condition: service_healthy
kpl-redis-dev:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
# 开发数据库
kpl-mysql-dev:
image: mysql:8.0.43
container_name: kpl-mysql-dev
restart: unless-stopped
ports:
- "3308:3306"
environment:
MYSQL_ROOT_PASSWORD: nj861021
MYSQL_DATABASE: kaopeilian
MYSQL_CHARACTER_SET_SERVER: utf8mb4
MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
TZ: Asia/Shanghai
volumes:
- kpl_mysql_dev_data:/var/lib/mysql
- ./kaopeilian-backend/scripts/init_database_unified.sql:/docker-entrypoint-initdb.d/init.sql:ro
- ./kaopeilian-backend/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
command: --default-authentication-plugin=mysql_native_password
networks:
- kpl-dev-network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-pnj861021"]
timeout: 20s
retries: 10
start_period: 30s
# 开发 Redis 缓存
kpl-redis-dev:
image: redis:7.2-alpine
container_name: kpl-redis-dev
restart: unless-stopped
ports:
- "6380:6379"
environment:
- TZ=Asia/Shanghai
volumes:
- kpl_redis_dev_data:/data
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
networks:
- kpl-dev-network
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 3
# phpMyAdmin 数据库管理界面(可选)
kpl-phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: kpl-phpmyadmin-dev
restart: unless-stopped
ports:
- "8081:80"
environment:
PMA_HOST: kpl-mysql-dev
PMA_PORT: 3306
PMA_USER: root
PMA_PASSWORD: nj861021
networks:
- kpl-dev-network
depends_on:
kpl-mysql-dev:
condition: service_healthy
profiles:
- admin # 使用 profile 控制是否启动
# 开发网络
networks:
kpl-dev-network:
external: true
name: kpl-dev-network
# 开发数据卷
volumes:
kpl_mysql_dev_data:
driver: local
name: kpl-mysql-dev-data
kpl_redis_dev_data:
driver: local
name: kpl-redis-dev-data
kpl_frontend_node_modules:
driver: local
name: kpl-frontend-node-modules