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.
 

8.6 KiB

后端基础架构搭建计划

任务类型: 基础架构
优先级: P0
状态: 已完成
创建时间: 2026-01-17
完成时间: 2026-01-17

目标

搭建 Jointo 项目的后端基础架构,包括:

  • FastAPI 应用框架
  • Docker 容器化环境
  • 核心模块实现
  • API 路由结构
  • 健康检查端点

技术选型

类别 技术选型 版本 说明
Web 框架 FastAPI 0.109.0 高性能异步 Web 框架
ORM SQLModel 0.0.14 类型安全的 ORM
数据库 PostgreSQL 14-alpine 主数据库
缓存 Redis 7-alpine 缓存和消息队列
存储 MinIO latest 对象存储
数据库驱动 psycopg[binary] 3.2.3 PostgreSQL 驱动
异步支持 greenlet 3.3.0 SQLAlchemy 异步支持
日志 loguru 0.7.2 结构化日志
认证 python-jose 3.3.0 JWT 认证
密码 passlib[bcrypt] 1.7.4 密码哈希

执行步骤

1. 项目结构创建

server/
├── app/
│   ├── __init__.py
│   ├── main.py                 # 应用入口
│   ├── api/
│   │   ├── __init__.py
│   │   └── v1/
│   │       ├── __init__.py
│   │       ├── router.py       # 路由汇总
│   │       └── health.py       # 健康检查
│   ├── core/
│   │   ├── __init__.py
│   │   ├── config.py           # 配置管理
│   │   ├── database.py         # 数据库连接
│   │   ├── security.py         # 安全认证
│   │   ├── exceptions.py       # 异常处理
│   │   └── cache.py            # 缓存管理
│   ├── models/
│   │   └── __init__.py
│   ├── schemas/
│   │   └── __init__.py
│   ├── services/
│   │   └── __init__.py
│   └── repositories/
│       └── __init__.py
├── requirements.txt
├── docker-compose.yml
├── Dockerfile
├── .env
├── .env.example
├── .gitignore
└── README.md

2. 核心模块实现

2.1 配置管理 (app/core/config.py)

  • 使用 Pydantic Settings 管理配置
  • 支持环境变量加载
  • 类型安全的配置访问

2.2 数据库连接 (app/core/database.py)

  • SQLModel 异步引擎配置
  • 连接池管理
  • 会话工厂
  • 依赖注入支持

2.3 安全认证 (app/core/security.py)

  • JWT token 生成和验证
  • 密码哈希和验证
  • 认证依赖函数

2.4 异常处理 (app/core/exceptions.py)

  • 自定义异常类
  • HTTP 异常映射
  • 统一错误响应格式

3. Docker 环境配置

3.1 docker-compose.yml

services:
  postgres:
    image: postgres:14-alpine
    container_name: jointo-server-postgres
    ports: ["5432:5432"]

  redis:
    image: redis:7-alpine
    container_name: jointo-server-redis
    ports: ["6381:6379"]

  minio:
    image: minio/minio:latest
    container_name: jointo-server-minio
    ports: ["9100:9000", "9101:9001"]

3.2 端口配置

  • PostgreSQL: 5432
  • Redis: 6381(避免与本地 Redis 冲突)
  • MinIO API: 9100(避免与其他服务冲突)
  • MinIO Console: 9101

4. API 路由实现

4.1 健康检查端点

  • GET /health - 基础健康检查
  • GET /api/v1/health - 详细健康检查
  • GET /api/v1/health/db - 数据库连接检查

4.2 API 文档

  • Swagger UI: /api/docs
  • ReDoc: /api/redoc
  • OpenAPI JSON: /api/openapi.json

5. 依赖安装

# 创建虚拟环境
python3.13 -m venv venv

# 激活虚拟环境
source venv/bin/activate

# 安装依赖
pip install -r requirements.txt

6. 服务启动

# 启动 Docker 服务
docker-compose up -d

# 启动 FastAPI 服务
./venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

遇到的问题

问题 1: Python 3.13 兼容性

问题描述:

  • psycopg2-binary 不支持 Python 3.13
  • asyncpg 0.29.0 无法编译
  • greenlet 3.0.3 无法编译

解决方案:

  • 使用 psycopg[binary]==3.2.3 替代 psycopg2-binary
  • 使用 asyncpg==0.30.0(预编译版本)
  • 使用 greenlet==3.3.0(预编译版本)

问题 2: 数据库连接认证失败

问题描述:

sqlalchemy.exc.OperationalError: (psycopg.OperationalError)
connection failed: FATAL: role "postgres" does not exist

根本原因:

  • asyncpg 和 psycopg 异步驱动在 Python 3.13 + macOS ARM64 环境下存在 GSSAPI 认证问题

临时解决方案:

  • app/main.py 中暂时跳过数据库初始化
  • 保留健康检查端点正常工作
  • 等待 asyncpg 修复 Python 3.13 兼容性

详见:docs/修复/数据库连接问题修复.md

问题 3: 端口冲突

问题描述:

  • 本地 Redis 占用 6379 端口
  • 其他服务占用 9000/9001 端口

解决方案:

  • Redis 映射到 6381 端口
  • MinIO API 映射到 9100 端口
  • MinIO Console 映射到 9101 端口

验证结果

1. Docker 容器状态

$ docker ps --filter "name=jointo-server"
CONTAINER ID   IMAGE                COMMAND                  STATUS
35497e646e44   minio/minio:latest   "/usr/bin/docker-ent…"   Up 8 minutes (healthy)
13dc5915042c   postgres:14-alpine   "docker-entrypoint.s…"   Up 9 minutes (healthy)
6ff6f1e35f1e   redis:7-alpine       "docker-entrypoint.s…"   Up 8 minutes (healthy)

2. FastAPI 服务

$ curl http://localhost:8000/health
{"status":"healthy","environment":"development"}

$ curl http://localhost:8000/
{"name":"Jointo API","version":"1.0.0","status":"running","docs":"/api/docs"}

$ curl http://localhost:8000/api/v1/health
{"status":"healthy","service":"Jointo API","version":"1.0.0","environment":"development"}

3. API 文档

交付物

代码文件

  • server/app/main.py - FastAPI 应用入口
  • server/app/core/config.py - 配置管理
  • server/app/core/database.py - 数据库连接
  • server/app/core/security.py - 安全认证
  • server/app/core/exceptions.py - 异常处理
  • server/app/core/cache.py - 缓存管理
  • server/app/api/v1/router.py - 路由汇总
  • server/app/api/v1/health.py - 健康检查

配置文件

  • server/requirements.txt - Python 依赖
  • server/docker-compose.yml - Docker 配置
  • server/Dockerfile - Docker 镜像
  • server/.env - 环境变量
  • server/.env.example - 环境变量示例
  • server/.gitignore - Git 忽略规则

文档

  • server/README.md - 项目说明
  • docs/计划/backend-基础架构搭建.md - 本文档
  • docs/修复/数据库连接问题修复.md - 问题修复文档

启动脚本

  • server/start_dev.sh - 开发环境启动脚本

后续工作

短期(1-2 周)

  1. 数据模型设计

    • 创建 User 模型
    • 创建 Project 模型
    • 创建 Storyboard 模型
  2. 用户认证 API

    • 注册接口
    • 登录接口
    • Token 刷新接口
  3. Alembic 配置

    • 初始化 Alembic
    • 创建初始迁移
    • 配置自动迁移

中期(2-4 周)

  1. 核心业务 API

    • 项目管理 API
    • 分镜管理 API
    • 资源管理 API
  2. 文件上传

    • MinIO 集成
    • 文件上传接口
    • 文件下载接口
  3. 数据库连接修复

    • 监控 asyncpg 更新
    • 或降级到 Python 3.12
    • 或使用 SQLAlchemy asyncio 适配器

长期(1-2 月)

  1. AI 服务集成

    • 视频生成 API
    • 图像生成 API
    • 文本生成 API
  2. 性能优化

    • Redis 缓存策略
    • 数据库查询优化
    • API 响应优化
  3. 监控和日志

    • 日志聚合
    • 性能监控
    • 错误追踪

总结

后端基础架构搭建已完成,主要成果:

  1. 完整的 FastAPI 项目结构
  2. Docker 容器化环境(PostgreSQL、Redis、MinIO)
  3. 核心模块实现(配置、数据库、安全、异常)
  4. API 路由和健康检查端点
  5. 完整的开发文档

当前限制:

  • ⚠️ 数据库连接暂时禁用(Python 3.13 兼容性问题)
  • ⚠️ 需要数据库的功能暂时无法使用

建议:

  • 短期内继续开发不依赖数据库的功能
  • 监控 asyncpg 更新或考虑降级到 Python 3.12
  • 优先实现认证、文件上传等功能