添加了完整的 Docker 部署方案,包括: - 创建 .env.example 环境变量配置模板文件 - 新增 docker-compose.yml 用于全栈服务编排 - 为前后端分别创建 Dockerfile 实现容器化部署 - 添加 nginx.conf 配置前端反向代理 - 在 README.md 中详细说明 Docker 部署流程 - 集成 Celery 任务队列支持异步处理 - 配置多数据库服务 (MongoDB, MySQL, Redis) 的连接 - 实现健康检查和服务依赖管理
203 lines
5.6 KiB
YAML
203 lines
5.6 KiB
YAML
# ============================================================
|
|
# FilesReadSystem Docker Compose
|
|
# 全栈 AI 文档理解与数据融合系统
|
|
# ============================================================
|
|
version: "3.8"
|
|
|
|
services:
|
|
# ==================== 数据库服务 ====================
|
|
|
|
mongodb:
|
|
image: mongo:7.0
|
|
container_name: filesread_mongodb
|
|
restart: unless-stopped
|
|
ports:
|
|
- "27017:27017"
|
|
environment:
|
|
MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USER:-admin}
|
|
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD:-20060825fhy}
|
|
MONGO_INITDB_DATABASE: ${MONGODB_DB_NAME:-document_system}
|
|
volumes:
|
|
- mongodb_data:/data/db
|
|
networks:
|
|
- filesread_network
|
|
healthcheck:
|
|
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')", "--quiet"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 30s
|
|
|
|
mysql:
|
|
image: mysql:8.0
|
|
container_name: filesread_mysql
|
|
restart: unless-stopped
|
|
ports:
|
|
- "3306:3306"
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD:-123456}
|
|
MYSQL_DATABASE: ${MYSQL_DATABASE:-document}
|
|
volumes:
|
|
- mysql_data:/var/lib/mysql
|
|
networks:
|
|
- filesread_network
|
|
healthcheck:
|
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_PASSWORD:-123456}"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 30s
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: filesread_redis
|
|
restart: unless-stopped
|
|
ports:
|
|
- "6379:6379"
|
|
volumes:
|
|
- redis_data:/data
|
|
networks:
|
|
- filesread_network
|
|
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD:-}
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
# ==================== 应用服务 ====================
|
|
|
|
backend:
|
|
build:
|
|
context: ./backend
|
|
dockerfile: Dockerfile
|
|
container_name: filesread_backend
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8000:8000"
|
|
environment:
|
|
# 应用配置
|
|
APP_NAME: FilesReadSystem
|
|
DEBUG: ${DEBUG:-false}
|
|
API_V1_STR: /api/v1
|
|
|
|
# MongoDB 配置 (使用 docker-compose 服务名)
|
|
MONGODB_URL: mongodb://${MONGO_ROOT_USER:-admin}:${MONGO_ROOT_PASSWORD:-20060825fhy}@mongodb:27017/admin
|
|
MONGODB_DB_NAME: ${MONGODB_DB_NAME:-document_system}
|
|
|
|
# MySQL 配置
|
|
MYSQL_HOST: mysql
|
|
MYSQL_PORT: 3306
|
|
MYSQL_USER: root
|
|
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-123456}
|
|
MYSQL_DATABASE: ${MYSQL_DATABASE:-document}
|
|
MYSQL_CHARSET: utf8mb4
|
|
|
|
# Redis 配置
|
|
REDIS_URL: redis://:${REDIS_PASSWORD:-}@redis:6379/0
|
|
|
|
# LLM AI 配置
|
|
LLM_API_KEY: ${LLM_API_KEY}
|
|
LLM_BASE_URL: ${LLM_BASE_URL:-https://api.deepseek.com}
|
|
LLM_MODEL_NAME: ${LLM_MODEL_NAME:-deepseek-chat}
|
|
|
|
# Supabase 配置
|
|
SUPABASE_URL: ${SUPABASE_URL}
|
|
SUPABASE_ANON_KEY: ${SUPABASE_ANON_KEY}
|
|
SUPABASE_SERVICE_KEY: ${SUPABASE_SERVICE_KEY}
|
|
|
|
# Embedding / RAG 配置
|
|
EMBEDDING_MODEL: ${EMBEDDING_MODEL:-all-MiniLM-L6-v2}
|
|
FAISS_INDEX_DIR: /app/data/faiss
|
|
|
|
# 文件路径配置
|
|
UPLOAD_DIR: /app/data/uploads
|
|
MAX_UPLOAD_SIZE: 104857600
|
|
|
|
# Celery 配置
|
|
CELERY_BROKER_URL: redis://:${REDIS_PASSWORD:-}@redis:6379/1
|
|
CELERY_RESULT_BACKEND: redis://:${REDIS_PASSWORD:-}@redis:6379/2
|
|
volumes:
|
|
- backend_data:/app/data
|
|
networks:
|
|
- filesread_network
|
|
depends_on:
|
|
mongodb:
|
|
condition: service_healthy
|
|
mysql:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import httpx; httpx.get('http://localhost:8000/health')"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 40s
|
|
|
|
celery_worker:
|
|
build:
|
|
context: ./backend
|
|
dockerfile: Dockerfile
|
|
container_name: filesread_celery
|
|
restart: unless-stopped
|
|
command: celery -A app.celery_app worker --loglevel=info --prefetch-multiplier=1
|
|
environment:
|
|
# Celery 配置
|
|
CELERY_BROKER_URL: redis://:${REDIS_PASSWORD:-}@redis:6379/1
|
|
CELERY_RESULT_BACKEND: redis://:${REDIS_PASSWORD:-}@redis:6379/2
|
|
|
|
# 复用后端的数据库配置
|
|
MONGODB_URL: mongodb://${MONGO_ROOT_USER:-admin}:${MONGO_ROOT_PASSWORD:-20060825fhy}@mongodb:27017/admin
|
|
MONGODB_DB_NAME: ${MONGODB_DB_NAME:-document_system}
|
|
MYSQL_HOST: mysql
|
|
MYSQL_PORT: 3306
|
|
MYSQL_USER: root
|
|
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-123456}
|
|
MYSQL_DATABASE: ${MYSQL_DATABASE:-document}
|
|
REDIS_URL: redis://:${REDIS_PASSWORD:-}@redis:6379/0
|
|
|
|
# LLM 配置
|
|
LLM_API_KEY: ${LLM_API_KEY}
|
|
LLM_BASE_URL: ${LLM_BASE_URL:-https://api.deepseek.com}
|
|
LLM_MODEL_NAME: ${LLM_MODEL_NAME:-deepseek-chat}
|
|
|
|
# Embedding 配置
|
|
EMBEDDING_MODEL: ${EMBEDDING_MODEL:-all-MiniLM-L6-v2}
|
|
FAISS_INDEX_DIR: /app/data/faiss
|
|
volumes:
|
|
- backend_data:/app/data
|
|
networks:
|
|
- filesread_network
|
|
depends_on:
|
|
- redis
|
|
- mongodb
|
|
- mysql
|
|
|
|
frontend:
|
|
build:
|
|
context: ./frontend
|
|
dockerfile: Dockerfile
|
|
container_name: filesread_frontend
|
|
restart: unless-stopped
|
|
ports:
|
|
- "80:80"
|
|
environment:
|
|
VITE_APP_ID: ${VITE_APP_ID:-}
|
|
VITE_SUPABASE_URL: ${SUPABASE_URL}
|
|
VITE_SUPABASE_ANON_KEY: ${SUPABASE_ANON_KEY}
|
|
VITE_BACKEND_API_URL: /api/v1
|
|
networks:
|
|
- filesread_network
|
|
depends_on:
|
|
- backend
|
|
|
|
networks:
|
|
filesread_network:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
mongodb_data:
|
|
mysql_data:
|
|
redis_data:
|
|
backend_data: |