为什么要自己搭博客
作为一个信息管理与信息系统专业的学生,我一直想有一个属于自己的技术博客。相比 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
遇到的问题
- 浏览器缓存 CSS — 更新样式后用户看到的是旧版本,解决方案是在 CSS 链接后加版本号
style.css?v=2 - 阿里云安全组 — 默认只开 22 端口,需要手动在控制台开放 80 端口
- 备案期间限制 — 备案通过前只能用 IP 地址访问,所有配置文件里不能出现域名
后续计划
- 持续更新数据分析相关的技术文章
- 添加更多项目展示卡片
- 备案通过后绑定域名并配置 HTTPS