📋 文章目录
- 项目背景与定位
- 项目定位
- 技术选型与架构设计
- 为什么选择 Monorepo?
- 核心技术栈
- 项目架构
- 项目结构
- 核心功能模块
- 1. Web 应用(前端知识库)
- 文档展示系统实现
- 文档加载逻辑
- 文档列表页面
- 文档详情页面
- 2. Admin 应用(技术演示平台)
- 3. FastAPI 后端服务
- 计划中的功能
- FastAPI 实现代码示例
- 路由定义(商品 API)
- Pydantic 数据验证
- 3. 共享组件库(packages/ui)
- 知识库内容体系
- 文档结构
- 最新优化内容
- 学习路径推荐
- 初学者路径
- 进阶开发者路径
- 面试冲刺路径
- 技术亮点与最佳实践
- 1. 前端:Turborepo 构建优化
- 2. 后端:FastAPI 异步架构
- 3. 后端:分层架构设计
- 4. 安全机制:多层级防护
- 2. MDX/Markdown 渲染方案
- 3. Workspace 协议
- 4. 环境变量管理
- 5. 组件开发流程
- 开发体验优化
- 1. 统一的代码规范
- 2. 类型安全保障
- 3. 实用工具脚本
- 部署与运维
- 前端部署:Vercel
- 后端部署:Docker + Linux
- 数据库设计
- MySQL 关系型数据库
- Redis 缓存策略
- 开发环境启动
- 项目收益与反思
- 收益
- 反思与改进
- 未来规划
- 前端优化
- 后端优化
- 运维优化
- 项目局限性
- 总结
- 项目地址
- 在线体验
- 技术栈
基于 Turborepo + Next.js 14 + FastAPI 的全栈开发实践,适合中小型项目的架构设计和部署方案。

项目背景与定位
在多年的开发实践中,我发现自己积累的技术知识点往往零散分布在各个项目和学习笔记中。为了系统化梳理这些知识,我决定构建一个技术知识库平台。
核心需求:
- 统一管理学习笔记和技术文档
- 支持在线编辑和实时预览
- 提供优雅的文档展示体验
- 作为一个技术实践项目,探索全栈开发最佳实践
这个项目不仅满足了个人知识管理的需求,也希望通过开源分享,给其他开发者提供参考。
项目定位
这是一个中小型全栈项目,重点展示:
- Monorepo 架构在非超大规模项目中的应用
- Next.js 14 + FastAPI 的技术选型和开发实践
- Docker 容器化部署到生产环境的完整流程
- 技术知识库系统的设计与实现
适合场景:
- 个人技术博客和知识库
- 小团队的全栈项目架构参考
- 学习 Next.js 14 和 FastAPI 的实践案例
技术选型与架构设计
为什么选择 Monorepo?
在项目初期,我面临一个关键决策:是采用传统的多仓库(Multi-repo)架构,还是选择 Monorepo?
最终选择 Turborepo + Monorepo 架构,主要基于以下考量:
| 维度 | Multi-repo | Monorepo |
|---|---|---|
| 代码共享 | 需要发布 npm 包 | workspace 直接引用 |
| 版本管理 | 各仓库独立版本 | 统一版本控制 |
| CI/CD | 多个流水线 | 单一构建流程 |
| 依赖管理 | 容易版本冲突 | 统一依赖管理 |
| 跨包测试 | 困难 | 简单直接 |
核心技术栈
项目架构
项目结构
核心功能模块
1. Web 应用(前端知识库)
Web 应用是项目的主入口,提供完整的面试知识库浏览和搜索功能:
- 知识库导航:结构化的文档分类展示
- 文档渲染:基于
next-mdx-remote的 Markdown 实时渲染 - 自动加载:从 Admin API 或本地文件系统获取文档
- 代码高亮:优雅的代码块展示和语法高亮
- 搜索功能:基于关键词的快速检索
- 响应式设计:适配移动端和桌面端
文档展示系统实现
文档加载逻辑
文档内容通过 Admin API 获取,构建时回退到本地文件系统:
文档列表页面
文档详情页面
2. Admin 应用(技术演示平台)
Admin 应用是一个企业级技术演示平台,用于展示和验证多种前端/后端技术:
- 文档编辑器:在线编辑
docs/目录下的 Markdown 文档- 实时文档列表展示
- 在线 Markdown 编辑
- 创建新文档
- 实时预览效果
- 通过 Admin API 向 Web 应用提供文档内容
- 双认证系统:NextAuth.js 和 Passport.js 两种认证方式对比演示
- 安全验证:CSRF 保护、Lusca 安全中间件
- 缓存演示:Redis 连接和缓存操作
- API 集成:FastAPI 服务代理和跨服务通信
- 管理后台模板:Dashboard UI 和统计数据展示
3. FastAPI 后端服务
FastAPI 后端提供完整的 RESTful API 服务:
- 商品管理 API:完整的 CRUD 操作
- 商品列表查询(分页、搜索)
- 商品详情获取
- 商品创建和更新(需管理员权限)
- 商品删除(需管理员权限)
- 认证 API:JWT 认证和用户管理
- 登录认证
- Token 验证
- 权限控制
- 文档 API:知识库文档服务
- 文档列表和详情
- 文档操作日志
- 编辑权限控制
- 实时预览
- Redis API:缓存操作演示
- 键值存储
- 缓存管理
- 系统 API:健康检查和系统信息
计划中的功能
以下功能已规划实现,当前处于开发阶段:
- 实时通信:WebSocket 支持(计划中)
- 健康度评分系统
- 在线状态推送
- 安全机制:
- JWT 令牌认证
- 速率限制(防止 DDoS)
- 可疑访问检测和告警
- CORS 跨域配置
- 性能优化:
- Redis 缓存层
- 数据库连接池
- 异步 I/O 处理
- Gzip 压缩响应
FastAPI 实现代码示例
路由定义(商品 API)
Pydantic 数据验证
3. 共享组件库(packages/ui)
在 Monorepo 架构中,共享组件库是提升开发效率的关键:
知识库内容体系
文档结构
整个知识库文档按难度和领域进行分类,形成完整的学习路径:
最新优化内容
case1.md 综合题库优化亮点:
- 格式修正:修正编号错误,统一的文档结构
- 代码示例:每个问题都添加了详细的 TypeScript 代码
- 对比表格:多种技术方案的横向对比(如 LRU vs LFU、gRPC vs REST)
- 实战案例:第 8 题提供 3 个完整的 STAR 法则案例
- 完整实现:LRU/LFU 缓存的完整 TypeScript 实现
- 质量监控:WebSocket 健康度评分系统
学习路径推荐
初学者路径
进阶开发者路径
面试冲刺路径
技术亮点与最佳实践
1. 前端:Turborepo 构建优化
优势:
- 智能缓存机制,避免重复构建
- 并行执行任务,提升构建速度
- 依赖关系自动分析
2. 后端:FastAPI 异步架构
优势:
- 原生异步支持,高并发性能
- 自动生成 OpenAPI 文档(Swagger)
- 类型注解驱动的数据验证(Pydantic)
- 内置依赖注入系统
3. 后端:分层架构设计
优势:
- 职责分离,易于维护和测试
- 业务逻辑独立于 API 接口
- 可复用的服务层
- 灵活的中间件扩展
4. 安全机制:多层级防护
防护措施:
- ✅ JWT 令牌认证
- ✅ 速率限制(防止滥用)
- ✅ 可疑访问检测
- ✅ CORS 跨域控制
- ✅ SQL 注入防护(ORM)
- ✅ XSS 防护(输入验证)
2. MDX/Markdown 渲染方案
使用 next-mdx-remote + @tailwindcss/typography 实现优雅的文档渲染:
支持的 Markdown 特性:
- ✅ 标题(H1-H6)
- ✅ 代码块和语法高亮
- ✅ 表格
- ✅ 引用块
- ✅ 列表(有序/无序)
- ✅ 粗体、斜体
- ✅ 链接和图片
- ✅ 分隔线
3. Workspace 协议
使用 workspace:* 协议可以实现:
- 开发时实时引用源码
- 构建时自动链接
- 版本统一管理
4. 环境变量管理
项目支持多环境配置:
5. 组件开发流程
使用 Storybook 进行组件开发:
优势:
- 组件独立开发
- 实时预览效果
- 文档自动生成
开发体验优化
1. 统一的代码规范
2. 类型安全保障
TypeScript 配置支持路径别名:
3. 实用工具脚本
部署与运维
前端部署:Vercel
项目配置了 Vercel 自动部署:
部署环境:
- Web 应用:https://web.erishen.cn
- Admin 应用:https://admin.erishen.cn
部署特点:
- ✅ 自动化 CI/CD(Git 推送自动部署)
- ✅ Serverless 函数(按需付费)
- ✅ 全球 CDN 加速
- ✅ 自动 HTTPS 证书
后端部署:Docker + Linux
FastAPI 后端采用 Docker 容器化部署到 Linux 服务器:
部署环境:
- FastAPI 服务:https://api.erishen.cn
部署特点:
- ✅ Docker 容器化(环境一致性)
- ✅ 容器自动重启(
restart: always) - ✅ 健康检查(自动恢复)
- ✅ Nginx 反向代理
- ✅ SSL/TLS 加密通信
数据库设计
MySQL 关系型数据库
Redis 缓存策略
缓存策略:
- 商品列表:5 分钟(热点数据)
- 用户会话:30 分钟
- 文档内容:10 分钟
- 系统配置:1 小时
开发环境启动
项目收益与反思
收益
- 全栈技术沉淀:系统梳理了前后端知识体系
- 工程化实践:掌握了 Monorepo + Docker 完整架构
- 学习效率:快速查找技术相关知识点
- 分享价值:帮助他人学习成长
- 文档系统:优雅的 Markdown 展示体验
- 实战经验:完成完整的产品开发流程
反思与改进
- 文档维护成本:内容更新需要持续投入
- 性能优化:大文档加载体验有待优化(可考虑分块加载)
- 社区参与:缺乏互动机制和用户反馈
- 搜索功能:可以增加全文搜索和智能推荐
- 后端监控:需要添加性能监控和告警系统
- 容器编排:未来可考虑 Kubernetes 集群部署
未来规划
前端优化
- [ ] 添加全文搜索功能(ElasticSearch)
- [ ] 支持文档评论和互动
- [ ] 实现深色模式
- [ ] 添加阅读进度和书签功能
- [ ] 支持导出 PDF
- [ ] 数据埋点,用户访问信息记录
后端优化
- [ ] WebSocket 实时通信功能(计划中)
- [ ] 健康度评分系统(计划中)
- [ ] 添加性能监控(Prometheus + Grafana)
- [ ] 实现分布式追踪(Jaeger)
- [ ] 添加消息队列(RabbitMQ/Celery)
- [ ] 优化数据库查询(读写分离)
- [ ] 实现 GraphQL API(计划中)
运维优化
- [ ] CI/CD 自动化流程优化
- [ ] 容器编排迁移到 Kubernetes
- [ ] 自动化测试覆盖率提升
- [ ] 灰度发布和回滚机制
项目局限性
为了保持文章的真实性,这里也说明一下当前项目的局限性:
- 项目规模较小:这不是一个超大规模的系统,API 数量和业务复杂度有限
- 缺少单元测试:当前项目还没有完整的单元测试覆盖
- 未实现所有计划功能:WebSocket、性能监控等功能仍在规划中
- 性能数据缺失:没有做过高并发压力测试和性能基准测试
- 团队协作场景未验证:主要是个人项目,多团队协作的场景未充分验证
这个案例更适合作为中小型项目的架构参考,而不是超大规模系统的解决方案。如果你的项目规模更大,需要考虑更复杂的架构设计。
总结
这个项目是我的一个全栈开发实践案例,通过构建技术知识库,我总结了以下几点经验:
- Monorepo 适合中小团队:代码共享、统一依赖,但在超大规模项目时要谨慎评估
- 技术选型要务实:Next.js 14 + FastAPI 对于中小型项目是高效的选择
- 工程化很重要:Turborepo、Docker、CI/CD 能显著提升开发效率和部署可靠性
- 从简单开始迭代:先实现核心功能,再逐步完善(如后续计划添加的 WebSocket)
- 安全意识要贯穿始终:即使小型项目,也要做好基础安全防护
项目已部署并稳定运行,包含了从开发到部署的完整流程。通过这个案例,我希望展示:
- 如何用现代化技术栈快速构建全栈应用
- 中小型项目的架构设计思路
- Docker 容器化部署的实际操作
这个项目还有很大的改进空间(如单元测试、性能监控、WebSocket 功能等),但作为一个可用系统的实现案例,希望能给其他开发者一些参考。如果你对项目有任何建议或想法,欢迎交流讨论!
项目地址
在线体验
- 🌐 Web 应用:https://web.erishen.cn
- 🛠️ 管理后台:https://admin.erishen.cn
- 📚 文档列表:https://web.erishen.cn/docs
- 🔌 API 服务:https://api.erishen.cn
- 📖 API 文档:https://api.erishen.cn/docs
技术栈
- 前端:Next.js 14 + React 18 + TypeScript 5 + Turborepo
- 后端:FastAPI + Python 3.10 + Pydantic v2 + SQLAlchemy
- 数据库:MySQL 8.0 + Redis
- 部署:Vercel + Docker + Nginx
发表回复