从零搭建个人博客:用 FastAPI + SQLite 自建内容管理系统

从零搭建个人博客:用 FastAPI + SQLite 自建内容管理系统

从零搭建个人博客:用 FastAPI + SQLite 自建内容管理系统

在 AI 时代,拥有一个自己的博客不仅是对知识的沉淀,更是个人品牌的基石。今天我们来聊聊如何用最小成本搭建一个功能完备的个人博客。

为什么选择 FastAPI?

FastAPI 是近年来最流行的 Python Web 框架之一,它的优势在于:

  1. 异步原生 — 基于 Starlette,天然支持 async/await
  2. 类型提示 — 内置 Pydantic 数据校验,开发体验极佳
  3. 自动文档 — Swagger UI 开箱即用,调试方便
  4. 高性能 — 基准测试中接近 Go 和 Node.js 的速度

技术选型

组件 选择 理由
Web 框架 FastAPI 异步、高性能、开发快
数据库 SQLite + SQLAlchemy 零配置、单文件、适合博客场景
模板引擎 Jinja2 简单灵活,SEO 友好
Markdown python-markdown + bleach 安全地渲染用户内容
部署 systemd + Nginx 稳定可靠,生产就绪

核心架构

┌──────────┐     ┌────────────┐     ┌──────────┐
│  Nginx   │────▶│  FastAPI   │────▶│  SQLite  │
│ (:80/443)│     │  (:8000)   │     │  (blog.db)│
└──────────┘     └────────────┘     └──────────┘
     │                │
     │           ┌─────────┐
     │           │ Jinja2  │
     │           │ Templates│
     │           └─────────┘

数据模型设计

博客的核心数据模型包括:

  • Post — 文章(标题、正文、摘要、封面、分类、标签、状态、浏览量)
  • Category — 分类(支持排序)
  • Tag — 标签(多对多关联)
  • Comment — 评论(支持嵌套和审核)
  • Option — 站点配置(键值对存储)

安全考虑

自建博客虽然面向自己,但安全问题同样重要:

  1. 密码哈希 — 使用 PBKDF2-SHA256,260,000 次迭代
  2. CSRF 防护 — 所有写操作都需要 CSRF Token
  3. 登录限频 — 5 分钟内 8 次失败锁定
  4. HTML 清洗 — bleach 过滤危险标签和属性
  5. 签名 Cookie — HMAC-SHA256 防篡改

部署方案

Docker 方式(推荐)

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app/ ./app/
RUN mkdir -p /app/data
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

systemd 方式

[Service]
User=blog
WorkingDirectory=/opt/blog
Environment="SECRET_KEY=<your-secret>"
ExecStart=/usr/local/bin/uvicorn app.main:app --host 127.0.0.1 --port 8000
Restart=always

Nginx 反向代理配置:

location / {
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

SEO 优化

一个好的博客还需要考虑搜索引擎优化:

  • RSS Feed — 自动生成,方便订阅
  • Sitemap — XML 格式,帮助索引
  • Meta 标签 — 每篇文章独立 title/description/OG 标签
  • Canonical URL — 避免重复内容
  • robots.txt — 控制爬虫行为

总结

用 FastAPI + SQLite 搭建博客的优势非常明显:

  • 零依赖 — 不需要额外安装数据库服务
  • 易维护 — 单个 .db 文件即可备份整个站点
  • 快速开发 — 从 0 到上线不到一天
  • 功能完备 — 分类、标签、评论、搜索、RSS 一应俱全

💡 提示:如果你也在使用这个博客系统,记得修改默认的 SECRET_KEY 和管理员密码!


本文使用本博客系统撰写并发布,从编辑到上线不到 5 分钟。

评论 (0)

发表评论