一直想有一个真正属于自己的个人网站。
不是那种只放几句简介的页面,而是一个可以长期使用的地方:写文章、记录项目、放一些照片,也写一些日常想法和折腾记录。后来选来选去,最终还是决定用 Halo 来搭这个博客。

为什么选择 Halo
一开始我想要的功能其实挺多:
- 可以写文章
- 可以展示项目
- 可以写日记和随笔
- 可以做照片墙
- 后台管理要方便
- 后续最好还能扩展插件
Halo 比较符合这些需求。它本身就是面向个人博客和内容站的系统,后台比较完整,也有主题市场和插件机制,不需要从零开始写一整套博客系统。
主题方面,我选择的是 Clarity 主题。这个主题基于 [L33Z22L11/blog-v3](https://github.com/L33Z22L11/blog-v3),在 Halo 应用市场里搜索 clarity 就能找到。

部署 Halo
部署方式我选择了 Docker。这样后续维护、迁移、升级都比较清晰。
整体思路是:
1. 在服务器上部署 Halo
2. 配置 PostgreSQL 数据库
3. 配置域名解析
4. 配置反向代理和 HTTPS
5. 登录 Halo 后台完成初始化
部署完成之后,博客就可以通过自己的域名访问了。


图片应该存在哪里
搭博客的时候,很快就遇到一个问题:写文章时粘贴的图片到底存在哪里?
如果直接存在 Halo 本地,短期看没什么问题,但后续迁移服务器、备份、扩容都会麻烦一点。尤其是文章里的图片越来越多之后,本地附件目录就会变成一个必须小心维护的东西。
所以我更倾向于把图片放到独立图床里。这样文章里保存的是图片链接,Halo 只负责文章内容和附件记录,图片本身由图床负责存储和访问。
最后我选择接入一款GitHub上开源的图床项目,图床地址

接入自己的图床
CloudFlare ImgBed 提供了上传 API,理论上只要 Halo 在上传图片时调用这个 API,就可以把图片传到自己的图床。
但 Halo 默认并不会直接支持这个图床,所以这里就需要一个存储插件。
一开始可以手动创建 Halo 的存储策略,把图床地址、Token、上传目录这些配置填进去。但这样有个问题:如果以后迁移服务器,或者重新部署 Halo,这套配置还得再做一遍。
所以我后来把它做成了一个 Halo 插件。
插件仓库放在这里:GitHub链接
当前插件目录是:
```text
halo-plugin-cfbed-storage/

自定义 Halo 存储插件
这个插件主要做了几件事:
在 Halo 插件后台提供配置页面
配置图床地址、API Token、上传渠道、上传目录
自动创建 Halo 存储策略
自动同步存储策略配置
可以自动设为文章编辑器默认上传策略
写文章时粘贴图片,会直接上传到自己的图床
也就是说,以后不需要每次手动去 Halo 里新建存储策略。只要安装插件,在插件配置页填好图床信息,保存之后插件会自动处理后面的事情。

配置项大概包括:
图床地址
API Token
上传渠道
上传目录
返回格式
公开访问地址
是否自动同步存储策略
是否设为文章编辑器默认上传策略
保存后,在 Halo 写文章时上传图片,就会走自己的图床。

关于迁移服务器
这次建站过程中,我也顺便想清楚了后续迁移的问题。
迁移 Halo 时,重点不是迁移 Halo 源码。正常情况下,Halo 用 Docker 镜像部署就可以了。真正需要迁移的是:
Halo 数据库
Halo 工作目录
插件 jar
主题配置
域名和反向代理配置
图床本身的数据
因为文章里的图片已经上传到了图床,所以只要图床域名和图片文件还在,迁移 Halo 服务器后,文章里的图片链接依然可以正常访问。
如果完整迁移数据库和 Halo 工作目录,插件配置、存储策略、主题设置也都会一起过去,不需要重新配置一遍。
这次建站的收获
这次建站不只是把博客跑起来了。
更重要的是,把几个后续一定会遇到的问题提前处理掉了:
图片不要强依赖 Halo 本地存储
插件和 Halo 本体保持独立
配置尽量放在后台可维护
迁移时重点关注数据和工作目录
自己需要的能力可以通过 Halo 插件扩展
现在这个博客已经不只是一个“能访问的网站”,而是一个我可以长期维护和扩展的个人空间。
后面我应该会继续把项目展示、照片墙、日记这些内容慢慢补起来。这个博客也会继续记录我之后的折腾过程。