后端初始化结构

This commit is contained in:
zly
2025-11-22 21:29:00 +08:00
parent 9fa602f21b
commit e68ad06829
26 changed files with 1350 additions and 0 deletions

297
web/ws/backend/README.md Normal file
View File

@@ -0,0 +1,297 @@
# FastAPI 后端项目
PBMDB (Plant Beneficial Microbe Database) 农业有益微生物综合信息数据库后端 API 服务。
## 📁 项目结构
```
backend/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI 应用入口
│ ├── api/
│ │ ├── __init__.py
│ │ └── v1/
│ │ ├── __init__.py
│ │ ├── router.py # API 路由汇总
│ │ └── endpoints/
│ │ ├── __init__.py
│ │ ├── strains.py # 菌种资源 API
│ │ ├── genomes.py # 基因组学数据 API
│ │ ├── genes.py # 基因资源 API
│ │ ├── upload.py # 数据汇交上传 API
│ │ └── analysis.py # 智能分析 API
│ ├── core/
│ │ ├── __init__.py
│ │ ├── config.py # 应用配置
│ │ └── security.py # 认证安全
│ ├── models/ # SQLAlchemy 数据模型
│ │ └── __init__.py
│ ├── schemas/ # Pydantic 数据模式
│ │ └── __init__.py
│ └── services/ # 业务逻辑层
│ └── __init__.py
├── requirements.txt # Python 依赖
├── Dockerfile # Docker 构建文件
├── .env.example # 环境变量示例
└── README.md # 本文件
```
## 🚀 技术栈
- **FastAPI**: 现代、高性能 Python Web 框架
- **Uvicorn**: ASGI 服务器
- **SQLAlchemy**: ORM 数据库工具
- **PostgreSQL**: 关系型数据库
- **Pydantic**: 数据验证和设置管理
## 🎯 核心功能模块
### 1. 菌种资源 (`/api/v1/strains`)
- 菌种列表查询(分类、搜索、分页)
- 菌种详情展示
- 菌种分类树
### 2. 基因组学数据 (`/api/v1/genomes`)
- 基因组数据列表(基因组学/转录组学/其他组学)
- 基因组详情
- 物种分类树
### 3. 基因资源 (`/api/v1/genes`)
- 基因列表查询(功能分类)
- 基因详情
- 功能基因分类
### 4. 数据汇交 (`/api/v1/upload`)
- 基因组数据上传
- 宏基因组数据上传
- 原始测序数据上传
- 上传口令验证
- 上传状态查询
### 5. 智能分析 (`/api/v1/analysis`)
- 智能问答(基于知识图谱)
- 基因挖掘(序列比对)
- 菌株评估
- 知识图谱查询
- 分析任务状态查询
## ⚙️ 环境配置
### 1. 创建环境变量文件
```bash
cd /vol1/1000/docker_server/traefik/web/ws/backend
cp .env.example .env
```
编辑 `.env` 文件:
```bash
# 项目信息
PROJECT_NAME=PBMDB API
VERSION=1.0.0
# 数据库配置
DATABASE_URL=postgresql://webws_admin:your_password@postgres:5432/webws_database
# 安全配置
SECRET_KEY=your-secret-key-here-change-in-production
# CORS 配置
ALLOWED_ORIGINS=https://amiap.hzau.edu.cn,http://localhost:3000
# 文件上传配置
MAX_UPLOAD_SIZE=104857600
UPLOAD_DIR=/app/uploads
```
## 🏃 本地开发
### 使用虚拟环境
```bash
cd /vol1/1000/docker_server/traefik/web/ws/backend
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# 运行开发服务器
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
```
访问:
- API 文档: http://localhost:8000/docs
- ReDoc 文档: http://localhost:8000/redoc
- 健康检查: http://localhost:8000/health
## 🐳 Docker 部署
### 1. 更新 docker-compose.yml
`/vol1/1000/docker_server/traefik/web/ws/docker-compose.yml` 中添加后端服务:
```yaml
services:
# ... 现有服务 ...
backend:
build: ./backend
container_name: webws-backend
restart: unless-stopped
environment:
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}
volumes:
- ./backend/uploads:/app/uploads
networks:
- frontend
depends_on:
- postgres
labels:
- "traefik.enable=true"
# HTTP 路由 - 重定向到 HTTPS
- "traefik.http.routers.webws-api-http.rule=Host(`amiap.hzau.edu.cn`) && PathPrefix(`/ABM/api`)"
- "traefik.http.routers.webws-api-http.entrypoints=web"
- "traefik.http.routers.webws-api-http.priority=100"
- "traefik.http.routers.webws-api-http.middlewares=redirect-to-https"
# HTTPS 路由
- "traefik.http.routers.webws-api-https.rule=Host(`amiap.hzau.edu.cn`) && PathPrefix(`/ABM/api`)"
- "traefik.http.routers.webws-api-https.entrypoints=websecure"
- "traefik.http.routers.webws-api-https.priority=100"
- "traefik.http.routers.webws-api-https.tls.certresolver=myresolver"
# StripPrefix 中间件(移除 /ABM/api 前缀)
- "traefik.http.routers.webws-api-https.middlewares=api-stripprefix"
- "traefik.http.middlewares.api-stripprefix.stripprefix.prefixes=/ABM/api"
- "traefik.http.services.webws-api.loadbalancer.server.port=8000"
```
### 2. 构建并启动
```bash
cd /vol1/1000/docker_server/traefik/web/ws
# 构建镜像
docker compose build backend
# 启动服务
docker compose up -d backend
# 查看日志
docker compose logs -f backend
```
## 📡 API 访问地址
部署后API 通过以下地址访问:
- **外部访问**: https://amiap.hzau.edu.cn/ABM/api/
- **API 文档**: https://amiap.hzau.edu.cn/ABM/api/docs
- **容器间访问**: http://webws-backend:8000/
## 🔧 路由说明
### URL 路径处理
由于使用了 Traefik `StripPrefix` 中间件,路径会自动处理:
**用户访问**: `https://amiap.hzau.edu.cn/ABM/api/strains/`
**FastAPI 接收**: `/api/v1/strains/` (已移除 `/ABM/api`)
### 路由优先级
```
Priority 100: /ABM/api/** → 后端 API 服务
Priority 47: /ABM/** → Nginx 静态文件服务
```
不会产生冲突Traefik 优先匹配更高优先级和更具体的路径。
## 📊 数据库迁移
### 使用 Alembic
```bash
# 进入容器
docker compose exec backend bash
# 初始化迁移(首次)
alembic init alembic
# 创建迁移
alembic revision --autogenerate -m "Initial migration"
# 执行迁移
alembic upgrade head
```
## 🧪 测试 API
### 使用 curl
```bash
# 健康检查
curl https://amiap.hzau.edu.cn/ABM/api/health
# 获取菌种列表
curl https://amiap.hzau.edu.cn/ABM/api/api/v1/strains/
# 获取基因组数据
curl https://amiap.hzau.edu.cn/ABM/api/api/v1/genomes/
```
### 使用 Swagger UI
访问 https://amiap.hzau.edu.cn/ABM/api/docs 进行交互式测试。
## 📝 开发指南
### 添加新的 API 端点
1.`app/api/v1/endpoints/` 下创建新文件
2. 定义路由和处理函数
3.`app/api/v1/router.py` 中注册路由
### 添加数据模型
1.`app/models/` 下创建 SQLAlchemy 模型
2.`app/schemas/` 下创建 Pydantic 模式
3. 运行数据库迁移
### 添加业务逻辑
`app/services/` 下创建服务层代码,保持控制器简洁。
## 🔒 安全注意事项
1. **生产环境**必须修改 `SECRET_KEY`
2. 使用环境变量管理敏感信息
3. 启用 HTTPS已配置
4. 实现完整的认证系统(待实现)
5. 添加请求频率限制
## 🚀 性能优化
1. 使用数据库连接池
2. 启用查询缓存Redis
3. 异步文件处理
4. 压缩响应数据
5. CDN 加速静态资源
## 📚 相关文档
- [FastAPI 官方文档](https://fastapi.tiangolo.com/)
- [Pydantic 文档](https://docs.pydantic.dev/)
- [SQLAlchemy 文档](https://docs.sqlalchemy.org/)
- [Uvicorn 文档](https://www.uvicorn.org/)
## 📞 联系方式
如有问题,请联系项目维护团队。