You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202326010/docker-compose.yml

224 lines
6.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

version: '3.8'
services:
# -----------------------------------------------------------------------------
# 1. 基础设施服务 (数据库 & 缓存)
# -----------------------------------------------------------------------------
# PostgreSQL (后端业务数据库)
postgres-meta:
image: postgres:15
container_name: meta_postgres
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_DB: auto_db_deployment
POSTGRES_USER: admin
POSTGRES_PASSWORD: secure_2025
command: >
postgres -c listen_addresses='*' -c max_connections=100
volumes:
- postgres_data:/var/lib/postgresql/data
# 如果你有初始化脚本,请取消下面的注释
# - ./init-db/postgres-init.sh:/docker-entrypoint-initdb.d/init.sh:ro
networks:
- app-network
# MySQL (用户生成的数据库实例资源池)
mysql-user:
image: mysql:8.0
container_name: user_mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root_secure_2025
TZ: Asia/Shanghai
command: --skip-name-resolve=OFF
volumes:
- mysql_data:/var/lib/mysql
networks:
- app-network
postgres-user:
image: postgres:15
container_name: user_postgres
restart: always
ports:
- "2345:5432"
environment:
TZ: Asia/Shanghai
POSTGRES_PASSWORD: root_secure_2025
volumes:
- postgres_user_data:/var/lib/postgresql/data
networks:
- app-network
# Redis (缓存 & 消息队列)
redis:
image: redis:7-alpine
container_name: redis
restart: always
ports:
- "6379:6379"
# 注意:你的 backend/app/celery_app.py 中硬编码了 redis://redis:6379/0 (无密码)
# 为了匹配代码,这里暂时去掉 --requirepass或者你需要修改代码中的 broker URL
command: redis-server --bind 0.0.0.0 --appendonly yes --notify-keyspace-events Ex
volumes:
- redis_data:/data
networks:
- app-network
# ChromaDB (向量数据库,用于 RAG 检索)
chromadb:
image: chromadb/chroma:0.5.23
container_name: chromadb
restart: always
ports:
- "8100:8000"
environment:
- IS_PERSISTENT=TRUE
- PERSIST_DIRECTORY=/chroma/chroma
- ANONYMIZED_TELEMETRY=FALSE
volumes:
- chroma_data:/chroma/chroma
networks:
- app-network
# -----------------------------------------------------------------------------
# 2. 应用服务 (后端 & 任务队列 & 前端)
# -----------------------------------------------------------------------------
# 后端 API 服务 (FastAPI)
backend:
build:
context: ./src/backend
dockerfile: Dockerfile.dev
container_name: backend
ports:
- "8000:8000"
volumes:
- ./src/backend:/app
environment:
# 时区设置
- TZ=Asia/Shanghai
# Fix import errors by adding inner app directory to PYTHONPATH
- PYTHONPATH=/app/app
# --- Pydantic BaseSettings 覆盖配置 (使用双下划线映射嵌套配置) ---
# 覆盖 config.yaml 中的 db 部分
- DB__HOST=postgres-meta
- DB__PORT=5432
- DB__USERNAME=admin
- DB__PASSWORD=secure_2025
- DB__DATABASE=auto_db_deployment
# 覆盖 config.yaml 中的 redis_client 部分
- REDIS__HOST=redis
- REDIS__PORT=6379
# ChromaDB 配置
- CHROMA__HOST=chromadb
- CHROMA__PORT=8000
# 覆盖 config.yaml 中的 app 部分
- APP__HOST=0.0.0.0
# MySQL 用户数据库配置 (Docker 内部网络)
- MYSQL__HOST=mysql-user
- MYSQL__PORT=3306
# PostgreSQL 用户数据库配置 (Docker 内部网络)
- POSTGRESQL__HOST=postgres-user
- POSTGRESQL__PORT=5432
# 如果代码中有逻辑读取这些非标准变量,保留它们以防万一
- POSTGRES_SERVER=postgres-meta
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=secure_2025
- REDIS_HOST=redis
command: uvicorn app.server:my_app --host 0.0.0.0 --port 8000 --reload --proxy-headers --forwarded-allow-ips='*'
depends_on:
- postgres-meta
- redis
- chromadb
networks:
- app-network
# Celery Worker (异步任务处理)
celery_worker:
build:
context: ./src/backend
dockerfile: Dockerfile.dev
container_name: celery
environment:
# Fix import errors
- PYTHONPATH=/app/app
# 同样注入配置以确保 Worker 能连接到正确的 DB 和 Redis
- DB__HOST=postgres-meta
- DB__PORT=5432
- DB__USERNAME=admin
- DB__PASSWORD=secure_2025
- DB__DATABASE=auto_db_deployment
- REDIS__HOST=redis
- REDIS__PORT=6379
# 显式覆盖 Celery Broker URL (以防代码没读配置)
- CELERY_BROKER_URL=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/0
# ChromaDB 配置
- CHROMA__HOST=chromadb
- CHROMA__PORT=8000
# MySQL 用户数据库配置 (Docker 内部网络)
- MYSQL__HOST=mysql-user
- MYSQL__PORT=3306
# PostgreSQL 用户数据库配置 (Docker 内部网络)
- POSTGRESQL__HOST=postgres-user
- POSTGRESQL__PORT=5432
working_dir: /app/app
# 启动命令 (添加 -Q celery 确保监听默认队列)
command: celery -A celery_app worker --loglevel=info -Q celery,default,ai_tasks
depends_on:
- redis
- backend
volumes:
- ./src/backend:/app
networks:
- app-network
# 前端服务 (React + Vite)
frontend:
build:
context: ./src/frontend
dockerfile: Dockerfile.dev
container_name: frontend
ports:
- "3000:3000"
volumes:
- ./src/frontend:/app
- /app/node_modules
environment:
# 浏览器访问的后端地址
- VITE_API_BASE_URL=/api
# 如果你需要传入 Gemini Key
# - GEMINI_API_KEY=${GEMINI_API_KEY}
depends_on:
- backend
networks:
- app-network
# -----------------------------------------------------------------------------
# 数据卷 & 网络定义
# -----------------------------------------------------------------------------
volumes:
postgres_data:
mysql_data:
postgres_user_data:
redis_data:
chroma_data:
networks:
app-network:
driver: bridge