使用 Full Stack FastAPI Template 搭建现代全栈应用的实战指南
本文将从零开始,带你使用 Full Stack FastAPI Template 快速搭建一套工程化、可生产的全栈 Web 应用。内容涵盖项目简介、技术栈、快速启动、配置说明、本地开发、测试与质量、部署上线、安全与最佳实践、常见问题排查等。
项目简介与特性概览
Full Stack FastAPI Template 是一套开箱即用的现代全栈模板,后端基于 FastAPI + SQLModel + PostgreSQL,前端基于 React + TypeScript + Vite + Chakra UI,内置 Docker Compose、本地/生产部署、Playwright 端到端测试、Pytest、JWT 认证、密码找回、自动生成前端 API 客户端、Traefik 反向代理与自动 HTTPS、GitHub Actions CI/CD 等。
主要特性:
- 后端:FastAPI(Pydantic、SQLModel)、PostgreSQL、JWT 认证、邮件找回
- 前端:React + TS + Vite、Chakra UI、自动生成 API 客户端
- 工程化:Docker Compose(开发/生产)、Traefik 代理与证书、GitHub Actions CI/CD
- 质量保障:Pytest、Playwright、类型校验与代码风格
- 文档完善:交互式 API 文档(Swagger UI)
技术栈
- 后端:
- FastAPI(高性能 Python Web 框架)
- SQLModel(结合 Pydantic 与 SQLAlchemy 的 ORM)
- Pydantic(数据校验与配置)
- PostgreSQL(关系型数据库)
- 前端:
- React + TypeScript + Vite
- Chakra UI(组件库)
- TanStack Query/Router(数据与路由)
- 基建:
- Docker Compose(本地与生产)
- Traefik(反向代理与自动 HTTPS)
- GitHub Actions(CI/CD)
- 测试:
- Pytest(后端)
- Playwright(端到端)
快速开始
你可以有两种方式获得项目骨架:
方式 A:使用 Copier 生成新项目(推荐)
- 安装 Copier(推荐通过 pipx):
pipx install copier
# 或
pip install copier
- 生成新项目目录(以 my-awesome-project 为例):
copier copy https://github.com/fastapi/full-stack-fastapi-template my-awesome-project --trust
- 进入目录并初始化 Git:
cd my-awesome-project
git init && git add . && git commit -m "chore: scaffold from full-stack-fastapi-template"
- 根据提示完善
.env
配置(见下文“配置说明”)。
方式 B:直接克隆模板仓库
git clone https://github.com/fastapi/full-stack-fastapi-template.git my-full-stack
cd my-full-stack
如需保持私有仓库:将远程改为你的私库地址,并添加上游以便后续拉取更新:
git remote set-url origin git@github.com:your_org/your_repo.git
git remote add upstream git@github.com:fastapi/full-stack-fastapi-template.git
后续可通过(不自动提交)方式拉取上游更新并手动合并:
git pull --no-commit upstream master
# 处理冲突后:
git merge --continue
配置说明(.env)
模板内置多份 .env
文件用于开发/部署配置。部署前至少需要修改:
SECRET_KEY
FIRST_SUPERUSER_PASSWORD
POSTGRES_PASSWORD
推荐将敏感信息以环境变量注入(CI/CD 或服务器 Secrets)。
生成安全密钥
python -c "import secrets; print(secrets.token_urlsafe(32))"
复制输出,多次执行以生成不同密钥,用于 SECRET_KEY
、POSTGRES_PASSWORD
等。
运行与开发
1) 使用 Docker Compose 启动开发环境
项目提供了 Docker 化的本地开发体验,一条命令启动后端、前端、数据库与代理。
# 首次启动(构建镜像)
docker compose up --build
# 后续启动
# docker compose up
# 后台运行
# docker compose up -d
常见服务访问(具体端口以仓库版本为准):
- 前端:
http://localhost:5173
或模板给出的端口 - 后端 API 文档(Swagger UI):
http://localhost:8000/docs
- Traefik 仪表盘(如启用):
http://localhost:8080
2) 数据库迁移(如模板集成迁移流程)
多数场景下,模板已在启动时初始化数据库。若需要手动迁移,可在后端容器内执行 Alembic/SQLModel 迁移命令(请以模板当前 README 为准)。
3) 第一次登录与超级用户
部署后,模板会使用 .env
中的 FIRST_SUPERUSER
与 FIRST_SUPERUSER_PASSWORD
创建首位超级用户。你可以用该账号登录前端后台,或通过 API 创建普通用户。
目录结构速览(可能随版本略有差异)
backend/ # 后端 FastAPI 应用
app/
api/ # API 路由与视图
core/ # 核心配置、安全、中间件
models/ # SQLModel 数据模型
db/ # 数据库初始化与(可选)迁移脚本
tests/ # Pytest 用例
frontend/ # 前端 React + TS + Vite
src/
api-client/ # 自动生成的 API 客户端
components/ # UI 组件(Chakra UI)
pages/ # 页面与路由
scripts/ # 辅助脚本
.docker/ (如有) # 容器相关配置
后端开发要点
- 路由与依赖注入:充分利用 FastAPI 的依赖系统进行认证、数据库会话管理、配置注入。
- 数据建模:使用 SQLModel 定义模型与关系,善用 Pydantic 校验输入/输出。
- 认证授权:模板内置 JWT 认证与用户体系,可扩展角色/权限。
- 设置与配置:通过 Pydantic Settings 加载
.env
,分环境管理。 - 文档:自动生成 OpenAPI/Swagger 文档,便于联调与测试。
示例:定义一个 SQLModel 模型与路由(简化示意):
from typing import Optional
from fastapi import APIRouter, Depends
from sqlmodel import SQLModel, Field, Session, select
router = APIRouter()
class Item(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
title: str
description: str = ""
@router.get("/items")
def list_items(session: Session = Depends(get_session)):
return session.exec(select(Item)).all()
前端开发要点
- 技术栈:React + TypeScript + Vite + Chakra UI。
- API 客户端:根据后端 OpenAPI 自动生成,避免手写请求类型。
- 状态管理:推荐使用 TanStack Query 处理服务端数据获取与缓存。
- UI:Chakra UI 提供开箱即用的响应式组件与暗色模式支持。
示例:使用生成的 API 客户端获取数据(简化示意):
import { useQuery } from "@tanstack/react-query";
import { apiClient } from "../api-client";
export function useItems() {
return useQuery({
queryKey: ["items"],
queryFn: () => apiClient.items.listItems(),
});
}
测试与质量保障
后端:Pytest
# 在后端容器或虚拟环境中
pytest -q
端到端:Playwright(前端)
# 安装浏览器依赖(首次)
npx playwright install --with-deps
# 运行 E2E 测试
npm run test:e2e
建议在 CI 中同时运行后端单测与前端 E2E,确保关键路径可用。
部署与上线
模板提供 Docker Compose 生产部署示例,并集成 Traefik 作为反向代理与自动签发 HTTPS 证书。
生产部署步骤(示意)
- 准备服务器与域名,解析到服务器 IP。
- 配置
.env
(生产版),确保SECRET_KEY
、数据库密码、邮件服务等正确。 - 启动服务:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
- 验证:
- 前端域名可访问;
https
生效(Traefik 自动申请证书);- 后端
/docs
可用; - 超级用户可登录后台。
CI/CD(GitHub Actions)
- 模板预置 CI 工作流,提交即进行格式/类型/测试校验。
- 可扩展为推送镜像到容器仓库、触发远程部署/滚动更新。
安全与最佳实践
- 秘钥管理:所有敏感信息通过环境变量与 Secrets 管理,避免入库。
- 最小权限:数据库用户仅授予必需权限;对象存储、消息队列同理。
- 认证与授权:基于 JWT 的登录流程,结合角色/权限控制接口访问。
- CORS 与 CSRF:根据前后端部署域设置 CORS,谨慎暴露跨域;必要时添加 CSRF 保护。
- 依赖更新:使用 Dependabot/ Renovate 定期更新依赖并运行测试。
- 日志与审计:在后端增加结构化日志;在 Traefik/反向代理层保留访问日志。
- 备份与迁移:定期备份 PostgreSQL;制定迁移回滚策略。
常见问题排查(FAQ)
- 容器无法启动或端口被占用:
- 确认 8000/5173/5432/8080 等端口未被其他服务使用;
- 修改 Compose 中的端口映射或停用冲突服务。
- 数据库连接失败:
- 检查
.env
中数据库主机、端口、用户名与密码; - 确认网络与容器依赖启动顺序;
- 查看后端容器日志(
docker compose logs backend -f
)。
- 检查
- 前端无法调用后端:
- 检查前端
.env
的 API 基础地址; - 核对 Traefik 路由规则与 CORS 配置;
- 在浏览器网络面板查看具体错误。
- 检查前端
- JWT 认证失败:
- 确保
SECRET_KEY
正确且未在环境间混用; - 检查 token 过期时间、时区、服务器时钟。
- 确保
- 端到端测试不稳定:
- 在 CI 中增加服务就绪探测与重试机制;
- 使用更稳定的数据夹具与测试隔离。
进阶与扩展建议
- 业务模块化:按照领域驱动设计(DDD)对
api/
、models/
、services/
分层与解耦。 - Observability:引入 Sentry、OpenTelemetry、Prometheus + Grafana 进行可观测性建设。
- 事件驱动:结合消息队列(如 RabbitMQ/Kafka)实现异步任务与事件总线。
- 文件与对象存储:对接 S3 兼容存储,统一上传/签名/权限策略。
- 多环境发布:开发、预发、生产多环境配置与灰度策略。
小结
Full Stack FastAPI Template 将“后端 + 前端 + 数据库 + 代理 + 测试 + 部署”工程化流程打包为可直接落地的骨架,极大降低从零搭建现代全栈应用的门槛。按照本文步骤,你可以在数十分钟内完成一个具备生产能力的全栈项目,并在此基础上快速扩展你的业务需求。
参考: