Personal blog teaching project
教学项目:从 0 到 1 做实用好玩的个人博客¶
一、项目定位¶
这个项目不是只做一个博客页面,而是通过“个人博客”这个场景,完整学习一次真实 Web 应用从开发到上线的全过程。
你最终要完成一个可以通过域名访问的个人博客网站,并在过程中学习:
- Git 与 GitHub 协作
- Web 基础、HTTP、DNS、浏览器渲染
- React 前端开发
- FastAPI 后端开发
- 数据库设计与 ORM
- 登录鉴权
- 评论、点赞、收藏等用户互动
- Docker 容器化部署
- 云服务器、Nginx、域名解析、HTTPS
- CI/CD 自动化构建和部署
- 搜索、统计、缓存、AI 自动化、MCP、安全主题小游戏等扩展模块
一句话总结:
用个人博客这个项目,把一个真实互联网应用从 0 到 1 做出来。
二、最终成果目标¶
1. 最终交付物¶
一个可访问、可发布文章、可评论互动、可部署迁移的个人博客网站。
2. 最低可接受标准¶
要求
- 搭建起基本的全栈博客框架
- 能发布、存储、展示博客文章
- 能展示个人介绍、照片、兴趣、经历等信息
- 有评论区
- 有登录鉴权
- 用户可以评论、点赞、收藏
- 后端和数据库能够通过 Docker 一键部署
- 网站部署到云服务器
- 网站能够通过域名访问
3. 推荐完成效果¶
| 角色 / 层面 | 功能1 | 功能2 | 功能3 | 功能4 | 功能5 |
|---|---|---|---|---|---|
| 游客 | 查看首页 | 查看个人介绍 | 浏览文章列表 | 查看文章详情 | 查看评论 |
| 登录用户 | 注册 | 登录 | 评论 | 点赞 | 收藏 |
| 管理员 | 登录后台 | 发布文章 | 编辑文章 | 删除文章 | 管理评论 |
| 系统层面 | 数据持久化到数据库 | Docker Compose 一键启动 | 部署到云服务器 | 绑定域名 | 配置 CI/CD |
三、推荐技术栈¶
推荐技术栈:
1. 前端¶
推荐使用:
- React
- Vite
- TypeScript
- React Router
- Axios / Fetch
- Tailwind CSS / Ant Design
前端负责:
- 博客首页
- 个人介绍页
- 文章列表页
- 文章详情页
- 登录注册页
- 评论、点赞、收藏交互
- 管理后台页面
2. 后端¶
推荐使用:
- FastAPI
- Uvicorn
- SQLAlchemy
- Pydantic
- JWT
- Alembic
后端负责:
- API 服务
- 用户注册和登录
- 文章增删改查
- 评论、点赞、收藏
- 文件上传
- 搜索接口
- 数据统计接口
- AI 自动化接口
- MCP 工具接口
3. 数据库¶
推荐使用:
- PostgreSQL:适合正式项目
- SQLite:适合前期快速学习
数据库存储:
- 用户
- 文章
- 评论
- 点赞
- 收藏
- 图片信息
- 访问统计
4. 部署¶
推荐使用:
- Docker
- Docker Compose
- Nginx
- 云服务器
- 域名解析
- GitHub Actions
部署链路:
四、需要学习什么¶
1. Git¶
需要掌握:
git initgit addgit commitgit statusgit loggit branchgit checkoutgit mergegit pullgit push- GitHub 创建仓库
- 分支开发
- Pull Request
.gitignore
目标:
- 项目代码托管到 GitHub
- 每完成一个功能提交一次
- 能用分支开发功能
- 能配合 GitHub Actions 做自动构建和部署
常用命令:
git init
git add .
git commit -m "init blog project"
git remote add origin <你的仓库地址>
git push -u origin main
2. Web 基础¶
需要理解:
- HTTP 请求和响应
- DNS 域名解析
- IP 和端口
- GET / POST / PUT / DELETE
- 状态码 200 / 401 / 403 / 404 / 500
- REST API
- JSON
- Cookie、Token、JWT
- CORS 跨域
- Nginx 的作用
- 浏览器渲染过程
一次访问流程:
用户访问 blog.example.com
↓
DNS 找到服务器 IP
↓
Nginx 接收请求
↓
页面请求返回前端文件
↓
/api 请求转发给 FastAPI
↓
FastAPI 查询数据库
↓
返回 JSON
↓
React 渲染页面
3. React 前端¶
需要掌握:
- 组件、Props、State
useState、useEffect- React Router
- 表单处理
- 调用后端 API
- 保存登录状态
- 响应式布局
建议页面:
/ 首页
/about 个人介绍
/posts 文章列表
/posts/:id 文章详情
/login 登录
/register 注册
/admin 后台首页
/admin/posts 文章管理
/admin/posts/new 新建文章
/admin/posts/:id/edit 编辑文章
4. FastAPI 后端¶
需要掌握:
- FastAPI 路由
- 请求参数
- 响应模型
- Pydantic 数据校验
- SQLAlchemy
- JWT 鉴权
- 文件上传
- CORS
- API 分层设计
推荐目录:
backend/
app/
main.py
core/
config.py
security.py
db/
session.py
models.py
schemas/
user.py
post.py
comment.py
api/
auth.py
posts.py
comments.py
likes.py
favorites.py
services/
post_service.py
user_service.py
requirements.txt
Dockerfile
5. 数据库¶
需要掌握:
- 表、字段、主键、外键、索引
- 一对多、多对多
- 基础 SQL
- ORM
核心表:
users
- id
- username
- email
- password_hash
- avatar_url
- role
- created_at
posts
- id
- title
- summary
- content
- cover_url
- author_id
- status
- created_at
- updated_at
comments
- id
- post_id
- user_id
- content
- created_at
likes
- id
- post_id
- user_id
- created_at
favorites
- id
- post_id
- user_id
- created_at
统计表:
五、主线功能如何实现¶
1. 上传和存储博客文章¶
这里可以理解为:管理员在后台发布文章,文章保存到数据库。
前端要做:
- 标题输入框
- 摘要输入框
- 正文编辑器
- 封面图上传
- 发布按钮
建议文章格式:
- 使用 Markdown 编写
- 后端保存 Markdown 原文
- 前端使用 Markdown 渲染库展示
可用库:
后端 API:
GET /api/posts 获取文章列表
GET /api/posts/{id} 获取文章详情
POST /api/posts 创建文章,需要管理员登录
PUT /api/posts/{id} 更新文章,需要管理员登录
DELETE /api/posts/{id} 删除文章,需要管理员登录
数据库字段:
最低实现流程:
2. 展示个人介绍、照片、兴趣、经历¶
简单方式:
- 直接写在前端
/about页面 - 适合第一版快速完成
内容包括:
- 头像
- 昵称
- 个人简介
- 技能栈
- 兴趣爱好
- 项目经历
- 联系方式
进阶方式:
- 存到数据库
- 后台可以编辑
数据库表:
接口:
建议先写死在前端,后期再改成后台可编辑。
3. 评论区¶
评论区依赖用户登录。
前端要做:
- 评论列表
- 评论输入框
- 发表评论按钮
- 未登录时提示登录
后端 API:
GET /api/posts/{post_id}/comments
POST /api/posts/{post_id}/comments
DELETE /api/comments/{comment_id}
数据库表:
权限规则:
- 所有人可以看评论
- 登录用户可以发评论
- 评论作者可以删除自己的评论
- 管理员可以删除任何评论
4. 通过域名访问¶
需要完成:
- 购买域名
- 购买云服务器
- 部署项目
- 配置 Nginx
- 配置 DNS 解析
- 配置 HTTPS
DNS 解析:
Nginx 负责:
- 返回前端页面
- 将
/api转发给 FastAPI - 处理 HTTPS
- 缓存静态资源
示例:
六、基础功能如何实现¶
1. CI/CD¶
CI/CD 是代码提交后自动构建、测试或部署。
CI 最低要求:
- 安装前端依赖
- 构建前端
- 安装后端依赖
- 执行后端测试
文件位置:
流程:
CD 进阶要求:
2. Docker 容器打包¶
最低要求:
推荐完整方案:
项目结构:
启动命令:
目标:
换一台服务器,只要安装 Docker,复制代码和环境变量,就能一键启动整个博客。
3. 登录鉴权¶
推荐使用 JWT。
流程:
后端 API:
前端保存:
请求头:
需要登录的操作:
- 发表评论
- 点赞
- 收藏
- 创建文章
- 编辑文章
- 删除文章
管理员专属操作:
- 创建文章
- 编辑文章
- 删除文章
- 管理评论
4. 评论、点赞、收藏¶
点赞表:
点赞接口:
收藏表:
收藏接口:
评论接口:
注意:
- 一个用户对一篇文章只能点赞一次
- 一个用户对一篇文章只能收藏一次
- 数据库应添加
user_id + post_id唯一约束
七、支线功能如何实现¶
支线功能建议在主线完成后再做,挑 1 到 3 个深入即可。
1. 缓存机制¶
可使用 Redis。
适合缓存:
- 首页文章列表
- 热门文章
- 文章详情
- 访问统计
流程:
缓存 key:
文章更新后要清理相关缓存。
2. CDN¶
CDN 用于加速静态资源。
可加速:
- 前端 JS/CSS
- 图片
- 文章封面
- 用户头像
实现方式:
- 阿里云 OSS + CDN
- 腾讯云 COS + CDN
- 火山引擎对象存储 + CDN
建议前期先用服务器本地 /uploads,后期再迁移对象存储。
3. 数据埋点和统计¶
可统计:
- PV
- UV
- 热门文章
- 用户点击行为
- 来源页面
- 访问设备
前端进入页面时请求:
请求内容:
数据库表:
后台展示:
- 总访问量
- 今日访问量
- 热门文章 Top 10
- 评论数量
- 点赞数量
- 收藏数量
4. 用户数据分析与推荐¶
用户数据分析可以看:
- 用户最常看哪类文章
- 用户点赞过哪些文章
- 用户收藏过哪些文章
- 用户评论活跃度
文章标签表:
简单推荐逻辑:
- 找到用户点赞、收藏、浏览过的文章
- 统计这些文章的标签
- 找出用户最感兴趣的标签
- 推荐相同标签下用户没看过的文章
接口:
5. 文章搜索¶
关键词搜索:
更好的方案:
- PostgreSQL Full Text Search
- Meilisearch
- Elasticsearch
接口:
语义搜索流程:
6. MCP 暴露¶
MCP 可以理解为:
给 AI Agent 提供一套标准工具,让它能管理你的博客。
可以暴露:
建议主线完成后再做 MCP。
7. AI 自动化模块¶
每日新闻 Digest:
GitHub Trending 自动解读:
AI 技术论文 Digest:
需要学习:
- cron / APScheduler
- 外部 API
- LLM API
- 后端自动创建文章
8. 安全主题小游戏¶
作为信息安全专业学生,小游戏建议和安全知识结合,这样既好玩,也能体现专业特色。
推荐方向:
- XSS 防御挑战:判断输入是否存在脚本注入风险
- SQL 注入闯关:识别危险 SQL 拼接,并选择正确参数化写法
- 密码强度挑战:根据规则判断密码强度,并给出改进建议
- 钓鱼邮件识别:从邮件内容、链接、域名中识别钓鱼风险
- 日志分析挑战:从访问日志中找出异常 IP、爆破行为或扫描行为
- CTF 选择题闯关:Web 安全、密码学、网络安全、Linux 基础等题库
第一次做建议选择:
原因:
- 规则清晰,容易做成题库
- 适合前端交互
- 后端只需要记录分数和排行榜
- 能直观体现信息安全专业特色
需要实现:
- 前端小游戏页面
- 后端提交分数接口
- 数据库排行榜表
- 排行榜页面
- 题库数据
- 答题结果解析
数据库表:
security_game_questions
- id
- game_name
- question
- options
- answer
- explanation
- difficulty
- category
security_game_scores
- id
- user_id
- game_name
- score
- correct_count
- total_count
- duration_seconds
- created_at
接口:
GET /api/security-games/{game_name}/questions
POST /api/security-games/{game_name}/submit
GET /api/security-games/{game_name}/leaderboard
前端页面可以包含:
- 题目卡片
- 选项按钮
- 倒计时
- 即时反馈
- 答案解析
- 最终得分
- 排行榜
示例玩法:
9. 数字化小人¶
可以做成博客虚拟助手:
- 首页右下角显示虚拟角色
- 点击后出现聊天框
- 可以介绍你是谁
- 可以回答博客内容问题
- 可以推荐文章
简单实现:
进阶方向:
- RAG
- 语音合成
- 表情动作
- 文章推荐
八、8 周推进路线¶
第 1 周:Git 从 0 到进阶¶
目标:
- 会用 Git 管理代码
- 建好 GitHub 仓库
- 建立项目目录结构
要做:
- 创建 GitHub 仓库
- 创建
frontend和backend目录 - 写 README
- 完成第一次 commit
- 学会 branch 和 merge
交付物:
第 2 周:VibeCoding 安装及初步实践¶
目标:
- 学会用 AI 辅助写代码
- 能让 AI 帮你生成页面、接口、测试
- 能看懂和修改 AI 生成的代码
要做:
- 安装 VS Code / Cursor / Claude Code / Codex 等工具
- 学会描述需求
- 学会让 AI 分步骤实现
- 学会 review AI 代码
练习:
- 让 AI 帮你生成博客首页
- 让 AI 帮你设计数据库表
- 让 AI 帮你写 FastAPI 文章接口
第 3 周:网络基础、互联网认识、Web 渲染原理¶
目标:
- 理解网站如何被访问
- 理解前后端如何通信
要做:
- 用 FastAPI 写 hello API
- 用 React 调用 API
- 打开浏览器 DevTools 查看 Network
- 理解一次请求过程
交付物:
第 4 周:前端 React 学习与实践¶
目标:
- 完成博客前端主体
要做:
- 首页
- 个人介绍页
- 文章列表页
- 文章详情页
- 登录页
- 注册页
- 后台文章编辑页
这一周可以先使用 mock 数据。
交付物:
第 5 周:数据库及后端学习与实践¶
目标:
- 完成核心后端 API
- 前后端真正打通
要做:
- 用户注册
- 用户登录
- JWT 鉴权
- 文章增删改查
- 评论
- 点赞
- 收藏
核心接口:
POST /api/auth/register
POST /api/auth/login
GET /api/auth/me
GET /api/posts
GET /api/posts/{id}
POST /api/posts
PUT /api/posts/{id}
DELETE /api/posts/{id}
GET /api/posts/{id}/comments
POST /api/posts/{id}/comments
POST /api/posts/{id}/like
DELETE /api/posts/{id}/like
POST /api/posts/{id}/favorite
DELETE /api/posts/{id}/favorite
GET /api/me/favorites
交付物:
第 6 周:Docker、CI/CD、域名和部署¶
目标:
- 让博客真正上线
要做:
- 写 Dockerfile
- 写
docker-compose.yml - 配置 PostgreSQL
- 配置 Nginx
- 购买云服务器
- 配置安全组
- 部署项目
- 绑定域名
- 配置 HTTPS
- 配置 GitHub Actions
最低启动命令:
交付物:
第 7 周:进阶内容¶
目标:
- 选择 1 到 3 个支线模块深入做
推荐组合:
实用型:文章搜索 + 数据统计 + 缓存机制
AI 型:GitHub Trending 自动解读 + AI 技术论文 Digest + 语义搜索
安全特色型:安全主题小游戏排行榜 + 数据统计 + 文章推荐
第一次做建议:
第 8 周:最终调试与完善¶
目标:
- 修 bug
- 优化体验
- 补文档
- 准备展示
要做:
- 测试所有页面
- 测试登录注册
- 测试文章发布
- 测试评论、点赞、收藏
- 测试移动端样式
- 检查 Docker 部署
- 检查域名访问
- 整理 README
- 准备演示材料
最终 README 应包含:
- 项目介绍
- 技术栈
- 功能列表
- 本地启动方式
- Docker 部署方式
- 环境变量说明
- 数据库说明
- 接口说明
- 线上访问地址
- 项目截图
- 未来计划
九、功能优先级¶
第一优先级:必须完成¶
第二优先级:增强完整度¶
第三优先级:体现亮点¶
十、最小可行版本 MVP¶
游客:
- 看首页
- 看个人介绍
- 看文章列表
- 看文章详情
- 看评论
登录用户:
- 注册
- 登录
- 评论
- 点赞
- 收藏
管理员:
- 登录后台
- 发布文章
- 编辑文章
- 删除文章
系统:
- 数据存在 PostgreSQL
- Docker Compose 一键启动
- 部署到云服务器
- 域名访问
完成这个 MVP,就已经是一个合格的从 0 到 1 博客项目。
十一、推荐项目结构¶
personal-blog/
frontend/
src/
pages/
components/
api/
router/
store/
package.json
Dockerfile
backend/
app/
main.py
api/
core/
db/
models/
schemas/
services/
tests/
requirements.txt
Dockerfile
nginx/
nginx.conf
docs/
api.md
deploy.md
database.md
.github/
workflows/
ci.yml
deploy.yml
docker-compose.yml
README.md
.env.example
十二、每日推进建议¶
推荐每天按这个比例安排:
每完成一个功能,记录:
这样最后不仅有项目,还有完整的学习过程。
十三、验收清单¶
1. 功能达标¶
- 可以访问首页
- 可以查看个人介绍
- 可以查看文章列表
- 可以查看文章详情
- 管理员可以发布文章
- 管理员可以编辑文章
- 管理员可以删除文章
- 用户可以注册
- 用户可以登录
- 用户可以评论
- 用户可以点赞
- 用户可以收藏
2. 工程达标¶
- 代码托管在 GitHub
- 前后端目录清晰
- 数据库表设计合理
- 接口命名清楚
- 有 README
- 有 Dockerfile
- 有
docker-compose.yml - 能一键启动
- 有 CI/CD
3. 部署达标¶
- 项目部署到云服务器
- 域名能访问
- 后端接口能访问
- 数据库数据能持久化
- 服务器重启后服务能恢复
- 配置 HTTPS
4. 进阶达标¶
- 有文章搜索
- 有数据统计
- 有缓存机制
- 有 AI 自动化模块
- 有安全主题小游戏或 MCP
- 有推荐系统或语义搜索
十四、最终总结¶
这个项目的核心不是“写几页博客页面”,而是用博客这个场景,把一个真实全栈项目从开发、存储、登录、交互、部署、自动化和扩展完整走一遍。
建议先完成主线:
再从支线中挑亮点:
只要主线扎实、部署真实、支线有一个亮点做深,这个教学项目就既实用,也足够好玩。