Appearance
快速上手(Quick Start)
源自仓库
README.md(2026-09-17 适配知识库);最新精确状态见 知识库首页 与根级 CLAUDE.md 变更记录。
沐禾健康 V2 后端 — OAuth 双 token + admin MIS + RN Web FastAPI + Python 3.12 + SQLModel + PostgreSQL 16 + Redis 7 + Celery
架构总览
mermaid
graph TB
C[客户端<br/>uniapp / 小程序 / RN Web 管理后台]
C -->|HTTPS| GW[Nginx]
GW --> APP[FastAPI · uvicorn<br/>24 业务模块 + admin MIS + 设备线]
APP --> DDD
subgraph DDD [DDD 4 层]
I[interface 路由/Schema] --> A[application UseCase+Port]
A --> D[domain 实体/状态机 零依赖]
A -.端口.-> INF[infrastructure 适配器]
end
INF --> PG[(PostgreSQL 16)]
INF --> RD[(Redis 7)]
APP --> SMS[腾讯云 SMS / Mock]
APP --> CEL[Celery Worker/Beat]
subgraph CI [CNB cnb.cool]
PIPE[Pipeline lint→test→制品]
ART[Docker 制品<br/>qm-serverv2-api:latest]
PIPE --> ART
ART -.compose pull.-> APP
endQuick Start(5 步)
1. 克隆与初始化
bash
git clone <repo-url>
cd QM-ServerV2
cp .env.example .env
pip install uv && uv sync2. 起本地基础设施(PG + Redis)
bash
docker compose up -d # qm-postgres (5432) + qm-redis (6379)3. 跑迁移
bash
# 生产:alembic 迁移链
uv run alembic upgrade head
# dev(快速):临时 init_db()
V2_USE_PRISMA=1 uv run python -c "from src.app.oauth.infrastructure.persistence.db import init_db; import asyncio; asyncio.run(init_db())"4. 启服务
bash
# mock 模式(默认,无需 PG/Redis)
uv run python -m uvicorn main:app --port 3001
# 真库模式(PG + Redis)
V2_USE_PRISMA=1 V2_USE_REDIS=1 uv run python -m uvicorn main:app --port 3001
# Celery worker(异步任务)
uv run celery -A src.app.shared.celery_app worker --loglevel=info
# Celery beat(定时任务)
uv run celery -A src.app.shared.celery_app beat --loglevel=info5. 验证
bash
curl http://localhost:3001/health
# {"code":"0","msg":"ok","data":{"status":"healthy"}}命令清单
bash
# 测试
uv run pytest # 全部测试(含覆盖率门禁 80%)
uv run pytest tests/unit/ # 仅单测
# 工具链
uv run ruff check . # lint
uv run mypy src # 类型检查
uv run pre-commit run --all-files # 全套 git hooks
# 守卫(防 DDD 分层 + OATH-M-006 退化)
python3 scripts/check_layers.py # DDD 4 层守卫
python3 scripts/check_exception_handlers.py # 顺序守卫
# admin-web 前端
cd admin-web && pnpm install && pnpm dev # RN Web dev server
# 知识库
cd docs && pnpm install && pnpm docs:dev # VitePress 本地预览项目结构(顶层)
QM-ServerV2/
├── src/
│ ├── main.py # FastAPI 入口 + lifespan + ExceptionHandler
│ └── app/ # 24 业务模块 + admin MIS + 设备线(各模块 CLAUDE.md = 模块手册)
├── tests/ # 分层测试(unit / integration)
├── docs/ # 本知识库(VitePress)
├── alembic/ # 迁移链
├── scripts/ # 守卫 / bump / 部署脚本
├── .cnb/ # CNB Pipeline
└── docker-compose.yml # 本地 PG + Redis各模块详细手册见 模块手册。
CNB 平台(cnb.cool)
托管于 cnb.cool/qingmu2026/qm-serverv2,CI/CD 由 CNB Pipeline 驱动:
| 事件 | 触发 | 流程 |
|---|---|---|
| main push | 自动 | lint → test(pg/redis service)→ Docker 制品构建&推送 |
| git tag(v*) | 自动 | release 版本制品构建&推送 |
| feat/* push | 自动 | 仅 lint + test |
Docker 制品:docker.cnb.cool/qingmu2026/qm-serverv2/qm-serverv2-api:latest
服务器部署一行命令:
bash
cd /srv/qm-serverv2 && docker compose pull && docker compose up -d && curl -s localhost:3001/health贡献规范
- DDD 4 层范式(端口契约 + PickRepo + factory)
- 业务码优先(HTTP 200 + code 40101xxx/40201xxx/40301xxx/4040xxxx)
cz_函数前缀(项目命名约定)- 测试 ≥ 80%(pyproject.toml 强制)
- Conventional Commits(feat / fix / refactor / chore / docs / test)
著作人:外星动物(常智)· WeChat iotchange · Email 14455975@qq.comLicense:Proprietary — 沐禾健康内部使用