今天做了什么:从零搭建个人技术博客

起因

一直想有一个自己的技术博客,用来记录学习心得、整理踩过的坑、沉淀技术方案。之前用 Halo 搭过,但觉得太重——Java 应用一跑就是几百兆内存,对于一台 2G 的小服务器来说太奢侈了。

今天下定决心,把整个站点从零重构一遍,目标是轻量、可控、完全属于自己的。

技术选型

最终方案如下:

组件 选型 说明
服务器 阿里云 ECS
面板 1Panel 容器化管理,省心
数据库 MariaDB 与小程序共用一个实例
后端 Node.js + Express 轻量,和小程序后端同语言
前端 纯静态 HTML/CSS/JS 零框架依赖,加载快
图床 阿里云 OSS + CDN 图片走 CDN,不占服务器带宽

核心思路:后端只做 API,前端是纯静态页,图片全部上 OSS。这样服务器内存占用极小,扩容也方便。

搭建过程

1. 后端 API

写了一套文章管理系统,支持:

  • 文章的增删改查,支持草稿和发布两种状态
  • 分类管理(可排序、可删除)
  • 自定义链接(侧栏"我的站点",可以挂上其他服务器的地址)
  • 站点设置(站点名、标题、图标、导航菜单、Banner、页脚,全部可后台配置)
  • 多用户权限(管理员 / 编辑两种角色,密码用 scrypt 加盐哈希存储)

2. 管理后台

后台支持在线编辑文章(Markdown 语法),图片上传自动存到 OSS,写完直接保存发布。分类、链接、站点设置都能在后台维护,不用改代码。

3. 前台展示

首页是左侧栏 + 右侧文章列表的经典博客布局,支持分类筛选、标签云、站内搜索。文章详情页支持 Markdown 渲染、代码高亮、图片自适应。

4. 图床 + CDN

图片全部上传到阿里云 OSS,再通过 CDN 加速。配置了:

  • OSS Bucket(杭州,公共读)
  • CDN 加速域名,源站指向 OSS
  • HTTPS 证书 + HTTP 强制跳转
  • 带宽封顶 5Gbps,防止被刷产生天价账单

上传一张图,几秒就到 CDN,全国访问都很快。

5. 域名邮箱

给域名配了企业邮箱,收件地址是 liugong@52hq.com。在阿里云 DNS 加了 MX 和 SPF 记录,验证通过后就能正常收发邮件了。

踩过的坑

搭建过程中遇到不少问题,记录一下:

1. Docker 网络配置

容器之间通信要用同一个网络。一开始容器连不上数据库,查了半天发现网络名写错了,应该用 1panel-network 而不是自己新建的网络。

2. 数据库用户权限

直接用 root 连数据库,容器 IP 被 MariaDB 拒绝访问(Access denied)。后来创建了专用用户 personal_app,只给它 personal 库的权限,问题解决。

3. 中文 URL 编码

按分类筛选时,分类名是中文,curl 直接传中文会出错。前端用 encodeURIComponent 编码就没问题了,后端解码后正常匹配。

4. Nginx 反代配置

后台页面和 API 要分开反代。/api/ 走后端,/admin 走后台页面,静态文件走 www 站点。一开始把 /admin 也当成静态文件了,返回 404,改成反代后正常。

5. Token 迁移

用户表从单用户改成多用户时,旧的 token 没有 username 字段,迁移后验证失败,后台保存设置一直报 UNAUTHORIZED。后来加了 token 自检接口,打开后台先验证 token 有效性,失效就强制重新登录,问题解决。

成果

今天下来,一个完整的个人技术博客就搭建好了:

  • 前台:首页 + 文章详情,支持分类、标签、搜索、暗色模式
  • 后台:文章编辑、分类管理、链接管理、站点设置、用户管理
  • 图床:OSS + CDN,图片秒传
  • 邮箱:域名邮箱已配置
  • 内存占用:后端只占几十兆,服务器还有充足余量

最满意的是暗色模式——顶栏一键切换,选择会自动记住,晚上看文章眼睛舒服多了。

后续计划

接下来打算:

  1. 写更多技术文章,把积累的经验沉淀下来
  2. 考虑加一个评论系统(可能需要后端配合)
  3. 研究一下文章的 SEO 优化
  4. 看看要不要加个简单的访问统计

折腾技术博客本身就是个好习惯——既能记录,又能督促自己多学习、多输出。


本文由新搭建的个人博客首发,欢迎交流 🎉