这篇文章记录我从零搭建个人博客的完整过程。
最后得到的效果是:
- 用 Hexo 生成静态博客
- 使用
hexo-theme-aero作为主题 - 用 GitHub 保存博客源码
- 用 Cloudflare Pages 自动部署博客
- 用 Waline 做留言板和文章评论
- 用 Vercel + Neon 部署 Waline 服务端
- 用自定义域名访问博客和评论服务
- 用阿里云 OSS 托管音乐文件
如果以后要重新搭一个类似的站点,可以直接照着这篇文章走一遍。
1. 选择博客方案
一开始我在两个项目之间做选择:
hexo-theme-aeroflare-stack-blog
最后选择了 hexo-theme-aero。
原因很简单:我现在更需要一个能快速上线、方便写 Markdown 的个人博客,而不是一个完整的内容管理系统。
hexo-theme-aero 是 Hexo 主题,部署成本低,写文章也直接。flare-stack-blog 功能更完整,但是需要 Cloudflare Workers、数据库、后台、鉴权等配置,对刚开始搭博客来说有点重。
2. 初始化 Hexo 项目
我的博客目录是:
1 | |
在这个目录里初始化 Hexo:
1 | |
初始化完成后,安装主题需要的渲染器:
1 | |
然后把 Aero 主题放到:
1 | |
根目录 _config.yml 里把主题改成:
1 | |
同时把代码高亮的 hljs 打开:
1 | |
3. 配置博客基本信息
博客的标题、作者、简介、语言等在根目录的 _config.yml 里配置:
1 | |
其中:
title是浏览器标题和站点标题subtitle显示在顶部横幅description显示在头像卡片下方author用于版权信息url要改成最终的线上域名
4. 配置 Aero 主题
Aero 主题自己的配置文件是:
1 | |
头像、社交链接、音乐播放器都在这里改。
例如头像:
1 | |
社交链接:
1 | |
注意图片路径要用网页路径,也就是 /image/...,不能写成 Windows 的 \image\...。
比如:
1 | |
不要写成:
1 | |
5. 添加 About 页面
Aero 主题有 about 布局,所以只需要在博客根目录的 source 下创建:
1 | |
内容示例:
1 | |
导航栏里的 About 会自动跳到:
1 | |
6. 写文章
文章都放在:
1 | |
可以用命令创建:
1 | |
也可以直接在 VS Code 里新建 .md 文件,只要放到 source/_posts 里就行。
一篇文章的基本格式是:
1 | |
本地预览:
1 | |
然后打开:
1 | |
7. 上传到 GitHub
博客源码放在 GitHub 仓库:
1 | |
第一次推送的大致流程:
1 | |
如果本地 Git 登录的账号不是仓库所属账号,推送时会出现权限错误。需要重新登录 GitHub 凭据:
1 | |
8. 部署到 Cloudflare Pages
博客本体部署在 Cloudflare Pages。
创建 Pages 项目时选择 GitHub 仓库:
1 | |
构建配置:
1 | |
如果 Cloudflare 自动选择了 Yarn,并报类似错误:
1 | |
说明仓库里同时有 yarn.lock 和 package-lock.json。我本地一直用 npm,所以删除 yarn.lock,保留 package-lock.json。
以后只要执行:
1 | |
Cloudflare Pages 就会自动重新部署。
9. 绑定博客域名
我买了域名:
1 | |
然后把域名的 DNS 托管到 Cloudflare。
博客域名绑定到 Cloudflare Pages:
1 | |
在 Cloudflare Pages 的项目里添加 Custom domains:
1 | |
等状态变成 Active,SSL 显示 enabled,就可以用正式域名访问博客。
10. 部署 Waline 评论系统
博客是静态站点,自己不能保存评论,所以需要一个评论服务端。
我选择 Waline。
整体结构是:
1 | |
先用 Vercel 从 Waline 模板创建项目:
1 | |
然后在 Vercel 的 Storage 里创建 Neon 数据库,并在 Neon 的 SQL Editor 里运行 Waline 的 PostgreSQL 初始化 SQL。
注册管理员地址:
1 | |
第一个注册的用户就是管理员。
管理后台地址:
1 | |
11. 给 Waline 绑定评论域名
一开始 Waline 地址是 Vercel 默认域名:
1 | |
但是有些国内网络访问 vercel.app 不稳定,所以我给 Waline 绑定了子域名:
1 | |
Vercel 里添加 Domain:
1 | |
Cloudflare DNS 里添加 CNAME:
1 | |
注意这里建议用灰色云朵,也就是 DNS only。
然后把主题配置里的 Waline 地址改成:
1 | |
12. 添加留言板和文章评论
我给导航栏新增了一个入口:
1 | |
页面文件是:
1 | |
内容:
1 | |
同时在文章模板 themes/aero/layout/post.ejs 底部加入 Waline 评论区。
这样:
/guestbook/是留言板- 每篇文章底部都有评论区
13. 评论设置
如果不想每条评论都手动审核,可以在 Vercel 的 blog-waline 项目里设置环境变量:
1 | |
如果想显示评论者的地区、浏览器、系统,可以设置:
1 | |
建议同时设置:
1 | |
改完环境变量后,要在 Vercel 里 Redeploy 一次。
14. 音乐播放器优化
一开始我把 mp3 放在博客本地资源里:
1 | |
这样虽然简单,但音乐文件会跟着博客一起部署到 Cloudflare Pages。手机第一次播放时,如果文件比较大,加载会比较慢。
后来我把音乐压缩到 2.4 MB 左右,并上传到阿里云 OSS。
OSS 上传时选择:
1 | |
然后把主题配置里的音乐地址改成 OSS 链接:
1 | |
这样博客仓库不用再带着大 mp3,手机播放速度也会更好。
15. 以后更新博客的流程
以后写完文章后,在 VS Code 终端里执行:
1 | |
如果是新增文章,可以先:
1 | |
也可以直接在 VS Code 里新建 .md 文件,只要放在:
1 | |
推送之后,Cloudflare Pages 会自动部署。等一会儿,刷新:
1 | |
就能看到更新。
结尾
这次搭建过程里,真正重要的不是某一个工具,而是把整条链路跑通:
1 | |
跑通以后,后面写博客就很简单了。
现在只要打开 VS Code,写一篇 Markdown,然后 git push,这个小站就会自动更新。