Files
course-agent-od/docker-compose.yml
T
pengxiao ddbb79b9f6 Initial commit: 国土空间规划课程智能体 v1.0
单容器 Docker 架构的国土空间规划课程智能问答系统,集成 FastAPI 后端与 Next.js 前端。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 09:40: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: 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: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:-sk-pvvtosiglncktlucwarxilvsypqcttqizgpcfdvodgcuaezn}
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