# ============================================================ # 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: