添加 Docker 部署支持和环境变量配置
添加了完整的 Docker 部署方案,包括: - 创建 .env.example 环境变量配置模板文件 - 新增 docker-compose.yml 用于全栈服务编排 - 为前后端分别创建 Dockerfile 实现容器化部署 - 添加 nginx.conf 配置前端反向代理 - 在 README.md 中详细说明 Docker 部署流程 - 集成 Celery 任务队列支持异步处理 - 配置多数据库服务 (MongoDB, MySQL, Redis) 的连接 - 实现健康检查和服务依赖管理
This commit is contained in:
203
docker-compose.yml
Normal file
203
docker-compose.yml
Normal file
@@ -0,0 +1,203 @@
|
||||
# ============================================================
|
||||
# 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:
|
||||
Reference in New Issue
Block a user