0
0

我用 Halo 搭了个博客

2026-11-04
2026-11-04
文章摘要
|

为什么在 2026 年还写博客

这个决定看起来挺反潮流的。

现在写东西的地方太多了:朋友圈、即刻、X、小红书、还有越来越聪明的各种 AI。随便哪个的传播效率都比一个个人博客高两个数量级。我搭这个站的时候,有朋友问我:你写给谁看?

我想了很久,答案是:写给我自己看。

理由有三个。

第一,社交平台的内容不属于我。算法决定谁看到它,平台决定它活多久,哪天号没了,几年的记录一起蒸发。而博客是自己的地基,域名续费着,文章就在那儿。

第二,短内容会逼人写短句。一百四十个字里塞不进一个完整的技术推理——你没法先讲前提,再讲尝试,再讲为什么失败,再讲下次怎么办。而踩坑记录最有价值的部分,恰恰是那个「为什么」。

第三,写作是最好的自检。一个东西你以为自己懂了,直到你要向别人解释它。写博客本质上是在给自己出考卷。

所以就搭了。慢就是快,脚踏实地。

一、选型:为什么最后是 Halo

候选有四个,我挨个说。

WordPress —— 生态无敌,插件要什么有什么。但它太重了:PHP + MySQL + 一堆插件,一个不小心就被扫出漏洞。而且它的后台界面停留在十年前,用起来像在操作一个 ERP。我想要的只是「写字 + 发出来」,用不上半个 CMS。

Hexo / Hugo —— 静态生成,快、安全、免费托管。缺点是要写东西就得在本地跑命令,换台电脑就没环境;写完了还得 git push 等构建。对「偶尔想写一篇」的人来说,摩擦太大了,摩擦一大就不写了。

Astro / Next.js 自建 —— 自由,可以做成任何样子。但自由意味着所有东西都得自己来:编辑器、图片上传、评论、RSS、搜索。这些轮子我已经在工作里造过很多次了,不想下班再造一遍。

Halo —— 折中得很准。它给了一个现代的后台(在线写 Markdown、拖图片、实时预览),有插件和主题市场,数据和程序都在自己手里,同时不用碰代码。用 Java 写的,吃内存,但一台 2G 的小机器就够跑。

最后选了 Halo。

二、部署

环境要求

  • 一台服务器(1 核 2G 起,Halo 的 JVM 建议给 512M 以上)

  • Docker,或者 JDK 17+ 直接跑 JAR

  • 一个域名,解析到服务器 IP

用 Docker 跑(体验/小站够用)

bash

docker run -it -d --name halo \
  -p 8090:8090 \
  -v ~/.halo2:/root/.halo2 \
  -e JVM_OPTS="-Xmx512m -Xms512m" \
  halohub/halo:2.27

几个参数值得注意:

  • -p 8090:8090:Halo 默认监听 8090,前面一般还要挂个 Nginx 做 443

  • -v ~/.halo2:/root/.halo2:数据目录必须映射出来,否则删容器 = 删库。冒号右边这个路径不能改

  • JVM_OPTS:小内存机器一定要限。不限的话 JVM 会按物理内存算堆,一台 2G 的机器直接被它吃干

跑起来后访问 http://你的IP:8090/console,第一次进去会引导创建管理员账号。

关于数据库

上面的命令默认用内置的 H2 数据库,把数据存在一个文件里。省事,但官方明确说了只建议体验和测试用——操作不当会导致数据文件损坏。

如果打算长期写,换成 PostgreSQL,用 Docker Compose 一起编排。这一步我建议一开始就做,后期迁移虽然可行,但没必要给自己找活。

三、域名和 HTTPS

  1. 域名解析加一条 A 记录指向服务器 IP

  2. Nginx 反向代理 443 → 127.0.0.1:8090

  3. 用 certbot 或面板自带的功能签 Let's Encrypt 证书

  4. 把 Halo 的 halo.external-url 改成 https://你的域名

第 4 步最容易漏,也是后面一系列诡异问题的根源。Halo 要靠这个值生成后台的静态资源地址和邮件里的链接,配错了就会出现「后台白屏但首页正常」这种情况。

四、挑主题

Halo 官方主题市场里有几十个,我用了 Ethereal。

选它的原因很朴素:文章列表干净,侧栏能放东西,不搞满屏动效。很多主题的默认样式花哨得过分——渐变色标题、毛玻璃卡片、鼠标跟随光晕——第一眼惊艳,第三篇文章就想关掉。

博客的阅读体验应该是「让人忘记界面存在」。

五、踩过的坑

记录下来,说不定能省掉下一个人两小时。

坑 1:先初始化,后配域名

我先用 IP:8090 进了后台完成初始化,之后才配的域名和反代。结果后台一直把资源地址指到 IP 上,换域名访问就白屏。

正确顺序是:先把域名解析和 Nginx 反代配好,external-url 填对,再去 /console 做初始化。

坑 2:反向代理只转发了一半

只写了 proxy_pass,登录后台输完密码,页面刷新一下又回到登录页。查了半天是 Cookie 的 domain 和协议对不上,需要把这几行补齐:

代码块

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

少了 X-Forwarded-Proto,Halo 就以为自己在跑 HTTP,于是把 Cookie 标成不安全,浏览器在 HTTPS 页面下直接丢掉它。

坑 3:端口没开

云服务器默认只放通 22/80/443,8090 得自己在安全组里加。表现就是「服务明明起来了,浏览器打不开」,然后开始怀疑人生。

六、还没做完的事

诚实一点,这站现在还很粗糙:

  • 头像还是主题自带的占位图

  • 侧栏简介是一段拉丁文占位符

  • 「展示架」菜单指向的页面还没做

  • 站点统计栏显示的是 --

这些都在待办列表里,一件一件来。博客和代码不一样,它没有 deadline,也不需要一次做到完美——先让它能跑,再让它好看。

七、接下来打算写什么

两个方向:

编程——踩坑记录、项目复盘、一些绕了很久才想明白的设计取舍。不做入门教程,那种东西网上已经够多了,而且写教程的人往往自己也没在生产环境用过。

硬件——装机、NAS、软路由、各种小主机。这个方向我会写得比较诚实,包括买错的配件和烧掉的板子。

如果你也有在折腾这些,欢迎交换经验。

最后

搭博客这件事本身没什么技术含量,一个下午就能搞定。难的是后面的事:持续地写,写得不敷衍,以及在没有读者的很长一段时间里还能写下去。

先写第一篇。


摘要(excerpt)

在朋友圈和小红书之外,我还是想要一块自己的地方。记录一下用 Halo 搭博客的完整过程,以及踩过的三个坑。

标签:Halo / 建站 / 踩坑

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

我用 Halo 搭了个博客
/archives/wo-yong-halo-da-liao-ge-bo-ke
作者
Administrator
发布于
2026-11-04
许可协议
CC BY-NC-SA 4.0

评论

欢迎来到我的博客!