← 返回博客

为什么要自己搭博客

作为一个信息管理与信息系统专业的学生,我一直想有一个属于自己的技术博客。相比 CSDN、掘金等平台,自建博客有几个好处:

  • 完全可控 — 样式、功能、内容都由自己决定
  • 技术展示 — 博客本身就是一件作品,面试时有说服力
  • 没有广告 — 读者体验更好
  • 学习过程 — 从开发到部署,涉及的技能栈很全面

技术选型

经过对比,我选择了以下技术方案:

| 需求 | 方案 | 理由 | |---|---|---| | Web 框架 | Flask | Python 生态,轻量灵活 | | 内容存储 | Markdown 文件 | 无需数据库,Git 即可版本管理 | | Markdown 渲染 | mistune | Python 原生,性能好 | | WSGI 服务器 | Gunicorn | 生产级,稳定可靠 | | 反向代理 | Nginx | 行业标准,静态文件缓存 | | 云服务器 | 阿里云 ECS | 国内访问快,学生优惠 | | 部署方式 | systemd 管理进程 | 开机自启,崩溃自动重启 |

开发过程

1. 项目结构

blog/
├── app.py              # Flask 主程序
├── wsgi.py             # Gunicorn 入口
├── content/articles/   # Markdown 文章
├── templates/          # Jinja2 模板
├── static/             # CSS / 图片
└── requirements.txt    # 依赖清单

2. 核心功能

  • Markdown 文章加载与渲染(python-frontmatter + mistune)
  • 标签分类与筛选
  • 文章上下篇导航
  • 响应式设计(手机/平板/桌面均可浏览)
  • Portfolio 风格首页(Hero + 技能 + 项目 + 最新文章)

3. 部署流程

# 服务器安装依赖
dnf install -y python3.11 nginx
pip install flask mistune gunicorn python-frontmatter

# 配置 Nginx 反向代理 / → Gunicorn :5000

# systemd 管理 Gunicorn 进程
systemctl enable --now blog

遇到的问题

  1. 浏览器缓存 CSS — 更新样式后用户看到的是旧版本,解决方案是在 CSS 链接后加版本号 style.css?v=2
  2. 阿里云安全组 — 默认只开 22 端口,需要手动在控制台开放 80 端口
  3. 备案期间限制 — 备案通过前只能用 IP 地址访问,所有配置文件里不能出现域名

后续计划

  • 持续更新数据分析相关的技术文章
  • 添加更多项目展示卡片
  • 备案通过后绑定域名并配置 HTTPS