用最小步骤看到完整效果:
git clone https://github.com/JiayuXu0/FastAPI-Template.git
cd FastAPI-Template
uv sync
cp .env.example .env
uv run aerich init-db
uv run uvicorn src:app --reload --host 0.0.0.0 --port 8000打开 http://localhost:8000/docs,用默认账号登录:
username: admin
password: abcd1234
你将看到 用户管理、角色管理、菜单管理、API 权限、部门管理、文件管理、审计日志 的完整 Swagger 接口,开箱可用。
也可以用脚手架一行创建:
npx create-fastapi-app@latest my-backend→ create-fastapi-app
| 适合 | 不适合 |
|---|---|
| 企业后台 / Admin API | 只想写一个极简单文件 demo |
| SaaS / 多团队权限系统 | 需要完整 React/Vue 前端模板 |
| 内部工具、运营平台、管理后台后端 | 需要微服务治理全家桶 |
| 权限、审计、文件、任务队列都要的服务 | 只需要一个无状态 HTTP 转发层 |
| 学习 FastAPI 分层架构和工程化实践 | 想完全从零手写每个基础模块 |
具体场景:
| 如果你需要 | 这里直接有 |
|---|---|
| 一个能直接开业务的后台 API 底座 | 用户、角色、菜单、API 权限、部门、文件、审计日志 |
| 一个结构清楚的 FastAPI 样板 | API → Service → Repository → Model 三层分离 |
| 一个带生产基础设施的模板 | Redis、PostgreSQL、Docker、Prometheus、Sentry、arq worker |
| 一个适合团队长期维护的起点 | UV、ruff、pytest、coverage、GitHub Actions、配置分层 |
很多 FastAPI template 只解决"项目能跑起来"。这个模板更关注业务开始后不会很快重写基础设施。
| 维度 | 常见 demo / boilerplate | FastAPI Template |
|---|---|---|
| 认证 | 登录接口和 access token | JWT access/refresh、限流、密码哈希、文档 Basic Auth |
| 权限 | 简单 role 字段 | 用户 → 角色 → 菜单/API,权限缓存和刷新机制 |
| 后台模块 | 需要自己补 CRUD | 用户、角色、菜单、部门、API、文件、审计日志开箱可用 |
| 架构 | 路由里混业务和 ORM | API、Service、Repository、Model 职责分离 |
| 运维 | 只有启动命令 | 健康检查、Prometheus 指标、trace id、结构化日志、Sentry |
| 异步任务 | 通常缺失 | arq + Redis worker、任务状态查询、定时任务示例 |
| 工程质量 | 测试和 CI 不完整 | ruff、pytest、coverage、pre-commit、GitHub Actions |
如果它帮你少写一套后台脚手架,欢迎点一个 Star。Star 越多,后续会优先补更多企业后台常见能力。
npx create-fastapi-app@latest my-backend
cd my-backend
uv run uvicorn src:app --reload --host 0.0.0.0 --port 8000适合想快速生成新项目名、少改模板元信息的场景。脚手架项目:create-fastapi-app
git clone https://github.com/JiayuXu0/FastAPI-Template.git
cd FastAPI-Template
uv sync
cp .env.example .env
uv run aerich init-db
uv run uvicorn src:app --reload --host 0.0.0.0 --port 8000启动后可用入口:
| 入口 | 地址 |
|---|---|
| Swagger UI | http://localhost:8000/docs |
| ReDoc | http://localhost:8000/redoc |
| Health | http://localhost:8000/api/v1/base/health |
| Version | http://localhost:8000/api/v1/base/version |
| Metrics | http://localhost:8000/api/v1/base/metrics |
默认管理员:
username: admin
password: abcd1234
重要:首次启动后请立即修改默认密码,并在生产环境替换
SECRET_KEY、SWAGGER_UI_PASSWORD和数据库密码。
cp .env.example .env
# 使用 compose 中的 PostgreSQL 时,将 .env 里的 DB_ENGINE 改为 postgres
docker compose up --buildCompose 会启动:
web: FastAPI 应用postgres: PostgreSQLredis: 缓存与 arq 队列worker: arq 后台任务 worker
| 功能 | 状态 | 说明 |
|---|---|---|
| JWT 登录 | Done | access token + refresh token |
| 登录限流 | Done | 默认 5 次/分钟 |
| 刷新令牌限流 | Done | 默认 10 次/分钟 |
| RBAC | Done | 用户 → 角色 → API/菜单 |
| 超级管理员依赖 | Done | SuperUserRequired |
| API 文档保护 | Done | Swagger/ReDoc Basic Auth |
| 模块 | API 前缀 | 说明 |
|---|---|---|
| 用户管理 | /api/v1/users |
创建、更新、删除、查询、重置密码 |
| 角色管理 | /api/v1/role |
角色 CRUD、菜单/API 授权 |
| 菜单管理 | /api/v1/menu |
多级菜单配置 |
| API 权限 | /api/v1/api |
API 权限表同步与管理 |
| 部门管理 | /api/v1/dept |
组织结构管理 |
| 文件管理 | /api/v1/files |
安全上传与文件映射 |
| 审计日志 | /api/v1/auditlog |
请求行为记录 |
| 任务队列 | /api/v1/tasks |
arq job 状态查询 |
| 能力 | 技术 | 说明 |
|---|---|---|
| ORM | Tortoise ORM | async-first 数据访问 |
| 迁移 | Aerich | 版本化迁移 |
| 缓存 | Redis | TTL、空值保护、抖动、权限缓存失效 |
| 指标 | prometheus-client | /api/v1/base/metrics |
| 错误追踪 | Sentry | 配置 SENTRY_DSN 启用 |
| 队列 | arq | Redis-backed async jobs |
| 日志 | Loguru | JSON 结构化日志、request id |
| CI | GitHub Actions | lint、format、pytest、coverage、security scan |
flowchart TD
Client["Client / Frontend"] --> API["API Layer\nsrc/api/v1"]
API --> Service["Service Layer\nsrc/services"]
Service --> Repo["Repository Layer\nsrc/repositories"]
Repo --> Model["Model Layer\nsrc/models"]
Model --> DB[("SQLite / PostgreSQL")]
API --> Auth["Auth & Permission\nJWT / RBAC"]
Service --> Cache[("Redis Cache")]
API --> Metrics["Prometheus Metrics"]
Service --> Queue["arq Task Queue"]
Queue --> Worker["Worker Process"]
Worker --> DB
核心约定:
- 路由保持薄:只处理参数、依赖和响应。
- 业务放 Service:权限、校验、编排逻辑集中在服务层。
- 数据访问走 Repository:避免在 Service 里散落 ORM 查询。
- 模型只描述数据结构:Tortoise model 与 schema 分离。
- 所有 I/O async-first:数据库、缓存、任务队列都使用异步接口。
FastAPI-Template/
├── src/
│ ├── api/v1/ # API routes
│ │ ├── users/ # User APIs
│ │ ├── roles/ # Role APIs
│ │ ├── menus/ # Menu APIs
│ │ ├── tasks/ # arq job status APIs
│ │ └── ...
│ ├── services/ # Business logic
│ ├── repositories/ # Data access
│ ├── models/ # Tortoise ORM models
│ ├── schemas/ # Pydantic schemas
│ ├── core/ # Middlewares, metrics, dependencies
│ ├── tasks/ # arq worker, queue, jobs
│ ├── utils/ # Cache, JWT, password, helpers
│ └── settings/ # Runtime configuration
├── migrations/ # Aerich migrations
├── tests/ # pytest test suite
├── docs/ # MkDocs documentation
├── docker-compose.yml
├── Dockerfile
└── pyproject.toml
uv sync
uv run uvicorn src:app --reload --host 0.0.0.0 --port 8000uv run aerich init-db
uv run aerich migrate --name "describe_change"
uv run aerich upgrade
uv run aerich historyuv run ruff check src/ tests/
uv run ruff format src/ tests/
uv run pytest
uv run pytest --cov=src --cov-report=htmlPYTHONPATH=src uv run arq tasks.worker.WorkerSettings任务示例:
send_email_taskcleanup_audit_logs_task
.env.example 已包含常用配置。生产环境至少检查这些项:
| 变量 | 建议 |
|---|---|
APP_ENV |
production |
DEBUG |
False |
SECRET_KEY |
openssl rand -hex 32 生成 |
SWAGGER_UI_PASSWORD |
强密码 |
DB_ENGINE |
PostgreSQL 推荐 |
CORS_ORIGINS |
写明确切域名 |
REDIS_URL |
独立 Redis 实例 |
SENTRY_DSN |
生产环境建议启用 |
METRICS_ALLOWED_IPS |
仅开放给内网或监控系统 |
启动服务后:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- OpenAPI JSON: http://localhost:8000/openapi.json(受文档账号保护)
项目还包含 MkDocs 文档系统:
uv sync --group docs
uv run mkdocs serve
uv run mkdocs build在线文档:jiayuxu0.github.io/FastAPI-Template
- 修改默认管理员密码
- 生成强
SECRET_KEY - 设置强
SWAGGER_UI_PASSWORD - 生产环境关闭
DEBUG - 使用 PostgreSQL 而不是 SQLite
- 配置精确
CORS_ORIGINS - 使用 HTTPS
- 限制
/metrics访问来源 - 配置日志采集与 Sentry
- 为文件上传设置合理大小和类型白名单
- 三层架构与 RBAC
- 用户、角色、菜单、API、部门、文件、审计日志
- JWT access/refresh token
- Redis 缓存与权限缓存失效
- Prometheus metrics、健康检查、trace id
- Sentry 集成
- arq 任务队列与 worker
- Dockerfile + docker-compose
- 更完整的任务管理 UI/API
- 多租户隔离示例
- OpenTelemetry tracing
- 更高覆盖率的端到端测试
欢迎提交 Issue、Discussion 和 Pull Request。
git checkout -b feature/your-feature
uv run ruff check src/ tests/
uv run pytest
git commit -m "feat: add your feature"更多说明:
如果这个项目帮你节省了搭建后台基础设施的时间,请给一个 Star。它会帮助更多 FastAPI 开发者发现这个模板。

