Files
course-agent-od/docker-compose.yml
T
pengxiao b8253b86a0 feat: global exception handler, concurrent VLM, and docker security
- Add global FastAPI exception handler for unhandled errors
- Add get_current_user_obj() dependency for cleaner auth patterns
- Switch VLM image description from serial to asyncio.gather concurrency
- Extract score conversion to shared score_utils module
- Docker: use env vars for passwords, remove hardcoded API key default
- Add .gitattributes and update .gitignore for tar.gz and tsbuildinfo

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 15:53:18 +08:00

115 lines
3.2 KiB
YAML

services:
# PostgreSQL数据库
db:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_DB: course_agent_db
POSTGRES_USER: user
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password}
POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./backend/init_postgres.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5433:5432" # 外部端口改为5433,避免与本地PostgreSQL冲突
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d course_agent_db"]
interval: 5s
timeout: 5s
retries: 5
deploy:
resources:
limits:
memory: 1G
reservations:
memory: 512M
# 整合的前后端服务(单容器)
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000" # 后端API
- "8001:8001" # 前端应用
environment:
# 数据库配置
DATABASE_URL: postgresql+psycopg://user:${POSTGRES_PASSWORD:-password}@db:5432/course_agent_db
# JWT配置
SECRET_KEY: ${SECRET_KEY:-your-super-secret-key-change-in-production}
ALGORITHM: HS256
ACCESS_TOKEN_EXPIRE_MINUTES: 30
# 硅基流动API配置
SILICONFLOW_API_KEY: ${SILICONFLOW_API_KEY:?请设置 SILICONFLOW_API_KEY 环境变量}
SILICONFLOW_BASE_URL: ${SILICONFLOW_BASE_URL:-https://api.siliconflow.cn/v1}
SILICONFLOW_MODEL: ${SILICONFLOW_MODEL:-Qwen/Qwen3-30B-A3B-Thinking-2507}
# 向量数据库配置
VECTOR_STORE_PATH: /app/vector_store
EMBEDDING_MODEL: shibing624/text2vec-base-chinese
HF_ENDPOINT: https://hf-mirror.com
# 应用配置
APP_NAME: 国土空间规划课程智能体
APP_VERSION: 0.1.0
DEBUG: ${DEBUG:-False}
HOST: 0.0.0.0
# 后端端口在uvicorn命令中指定,不需要PORT环境变量
# CORS配置
ALLOWED_ORIGINS: ${ALLOWED_ORIGINS:-http://localhost:8001,http://127.0.0.1:8001}
# 文件上传配置
UPLOAD_DIR: /app/uploads
MAX_FILE_SIZE: 10485760
ALLOWED_EXTENSIONS: ".pdf,.docx,.txt,.md"
# 知识库配置
KNOWLEDGE_BASE_DIR: /app/data/knowledge_base
ENABLE_FILE_WATCHER: True
# 日志配置
LOG_LEVEL: INFO
LOG_FILE: /app/logs/app.log
# 时区配置
TZ: Asia/Shanghai
# 前端配置
NEXT_PUBLIC_BACKEND_URL: http://localhost:8000
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET:-your-nextauth-secret-change-in-production}
NEXTAUTH_URL: http://localhost:8001
PORT: 8001 # Next.js前端端口
HOSTNAME: 0.0.0.0
volumes:
- ./data:/app/data
- ./runtime:/app/runtime
depends_on:
db:
condition: service_healthy
restart: always
healthcheck:
test: ["CMD", "sh", "-c", "curl -f http://localhost:8000/health && curl -f http://localhost:8001"]
interval: 30s
timeout: 10s
retries: 3
deploy:
resources:
limits:
memory: 4G
cpus: '2.0'
reservations:
memory: 2G
cpus: '1.0'
volumes:
postgres_data:
networks:
default:
driver: bridge