51 lines
1.9 KiB
Markdown
51 lines
1.9 KiB
Markdown
# Phase 2:后端基础 API + 数据库迁移
|
||
|
||
## 新增内容
|
||
|
||
- **ORM**:`app/models/`(User, ChatSession, Message, Ticket),SQLAlchemy 2.x
|
||
- **数据库**:`app/database.py` 异步会话,`get_db` 依赖
|
||
- **迁移**:Alembic,`alembic/versions/001_init_tables.py`、`002_seed_admin.py`
|
||
- **认证**:`app/services/auth_service.py`(bcrypt + JWT),`app/deps.py`(get_current_user_id)
|
||
- **登录**:`POST /api/auth/login` 查 User 表并校验密码,返回 JWT
|
||
|
||
## 本地启动与迁移
|
||
|
||
1. 启动 DB(或整栈):
|
||
```bash
|
||
docker-compose up -d db
|
||
```
|
||
2. 在 `backend/` 下执行迁移(需已配置 `DATABASE_URL_SYNC`,如从项目根 `.env` 加载):
|
||
```bash
|
||
cd backend
|
||
# 若 .env 在项目根,可:export $(grep -v '^#' ../.env | xargs) 或复制 .env 到 backend/
|
||
alembic upgrade head
|
||
```
|
||
3. 启动后端:
|
||
```bash
|
||
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
||
```
|
||
|
||
## 验证
|
||
|
||
- **健康检查**:`curl http://localhost:8000/api/health` → `code: 0, data.status: "up"`
|
||
- **登录**:`curl -X POST http://localhost:8000/api/auth/login -H "Content-Type: application/json" -d "{\"username\":\"admin\",\"password\":\"admin\"}"`
|
||
- 迁移并 seed 后应返回 `code: 0` 且 `data.access_token` 为 JWT
|
||
- **测试**:`pytest tests/test_health.py tests/test_auth.py -v`
|
||
|
||
## 关键配置项
|
||
|
||
- `DATABASE_URL`:异步连接串,供 FastAPI 使用(如 `postgresql+asyncpg://...`)
|
||
- `DATABASE_URL_SYNC`:同步连接串,供 Alembic 使用(如 `postgresql://...`)
|
||
- `JWT_SECRET`:生产环境必须修改
|
||
- `JWT_EXPIRE_MINUTES`:token 有效期(分钟)
|
||
|
||
## Docker 内迁移
|
||
|
||
若后端在 Docker 内启动,可在首次启动时自动迁移(可选)。例如在 `backend/Dockerfile` 或启动脚本中:
|
||
|
||
```bash
|
||
alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port 8000
|
||
```
|
||
|
||
需保证容器内能访问 `DATABASE_URL_SYNC` 且指向 `db:5432`。
|