Files
FilesReadSystem/docker-compose.yml
KiriAky 107 d2e3c2db3e 添加 Docker 部署支持和环境变量配置
添加了完整的 Docker 部署方案,包括:
- 创建 .env.example 环境变量配置模板文件
- 新增 docker-compose.yml 用于全栈服务编排
- 为前后端分别创建 Dockerfile 实现容器化部署
- 添加 nginx.conf 配置前端反向代理
- 在 README.md 中详细说明 Docker 部署流程
- 集成 Celery 任务队列支持异步处理
- 配置多数据库服务 (MongoDB, MySQL, Redis) 的连接
- 实现健康检查和服务依赖管理
2026-04-21 20:39:12 +08:00

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: