Halo 建站

目标 & 背景

前段时间对个人博客进行了整体迁移,从 Wordpress 迁移到了 Halo 上,目前 Halo 使用的主题为 halo-theme-hao,但由于两个平台的逻辑不同,实际在后台配置时碰到了一些使用问题,故此记录一下

迁移过程

本次迁移过程并不推荐面临同样问题的人使用,我抛弃了旧站点的所有评论,甚至不打算兼容旧文章的链接,因此所有文章在搜索引擎上收录的链接 全部失效

Halo 的官方提供了一个 WordPress 导入 插件,推荐使用这种方式进行迁移

我的迁移过程基本上相当于把所有文章重新发布了一遍,整体过程还是比较痛苦的。平时我所有的文章都写在 MWeb 上,因此相当于文章都备份在本地,与具体搭建的服务无关

WordPress 本身提供的导入导出功能还是比较烦的,尤其是导入导出的文件大小限制,要改很多地方,非常头疼

但是呢,MWeb 目前不支持针对 Halo 的文章发布,而 Halo 也不支持 Metaweblog API 标准(虽然论坛有开发者做了类似的插件,目前来看似乎已经失效了)。目前只能在 VSCode 中使用 Halo 的插件发布文章

这个问题也十分蛋疼,最后只得把所有 MWeb 中的文章,导出 Markdown,然后再使用 VSCode 发布,期间也跟 MWeb 的作者以及 Halo 进行了反馈,只能说暂时没有解决方案

这个问题或许在日后 Halo 官方的 API 文档完善了才能有些转机,或者 Obsidian 中的上传插件开发完毕,再把 MWeb 中的文章迁移到 Obsidian 上,也是一个不错的选择

安装 Halo

整个安装过程太简单了,Halo 安装基于 Docker,只要配好 compose 文件即可,这个部分 文档 也写的非常清楚

mkdir ~/halo && cd ~/halo
vi docker-compose.yaml

此处记得修改 8090 端口,映射到自己希望开放的端口上

version: "3"

services:
  halo:
    image: halohub/halo:2.8
    container_name: halo
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./:/root/.halo2
    ports:
      - "8090:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s          
    command:
      - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
      - --spring.r2dbc.username=halo
      # PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=openpostgresql
      - --spring.sql.init.platform=postgresql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/
      # 初始化的超级管理员用户名
      - --halo.security.initializer.superadminusername=admin
      # 初始化的超级管理员密码
      - --halo.security.initializer.superadminpassword=P@88w0rd
  halodb:
    image: postgres:latest
    container_name: halodb
    restart: on-failure:3
    networks:
      halo_network:
    volumes:
      - ./db:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    healthcheck:
      test: [ "CMD", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      - POSTGRES_PASSWORD=openpostgresql
      - POSTGRES_USER=halo
      - POSTGRES_DB=halo
      - PGUSER=halo

networks:
  halo_network:

最后运行 compose 就完成了所有部署工作

docker-compose up -d

由于我们将 Halo 的文件地址映射到了 ~/halo 上,因此备份和迁移会变得非常非常简单,只需要把这个文件夹拷走即可,官方也提供了后台备份的功能,具体如何使用可以自行选择

后台配置

默认的后台地址为 http(s)://xxxx.com/console,输入地址即可进入后台,而默认的账号密码已经填在我们 compose 文件中

  • 账号:admin
  • 密码:P@88w0rd

不过不用担心,密码可以在后台进行修改,在 后台->用户 中修改密码即可

由于我们需要使用 hao 这款主题,我们需要安装如下插件,尽可能使用主题推荐的插件版本,否则会碰到兼容问题,下图是我目前 1.3.3 主题对应的所有插件版本

最后,在 主题->主题管理 中,安装 hao 主题,我们基本上完成了后台需要的前期配置

搜索引擎收录

目前 halo-plugin-sitepush 完成了百度和必应两家搜索引擎的自动推送,整体很简单,根据插件的具体描述配置即可,但是谷歌的站点收录还是需要我们自己配置的

谷歌的配置也很简单,在谷歌后台新增 sitemap 即可,需要填入如下地址 http(s)://xxx.com/sitemap.xml

主题配置

这里主要围绕一些我初次使用时碰到的疑问项进行介绍,目前 hao 主题的配置项还是比较多的,其他内容可以参考 使用文档

更多配置

最开始使用时,我并没有注意到主题配置的选单其实是可以向右滑的,如果你也是第一次使用,记得拖滑动条,还有部分配置隐藏在后面

创建友链等页面

  • 在 后台->页面 中创建友链页面
  • 注意,标题可作为一级菜单名,别名可作为链接路径
  • 将自定义模板选择为 友情链接页面模板

在主题友链链接中的 /links 就对应了页面中别名的 link,这样实际的友链就变成了 http(s)://xxx.com/links

而友链中实际显示的内容则需要在 后台->链接 面板中进行配置

51la 统计

在 后台->主题->关于 中有一个 51la 网站统计的配置,之前我一直嫌弃 wordpress 中统计插件不是很好用的问题,这次在迁移到 halo 后,了解到 51la 统计平台的功能,整体还是非常香的,配置起来也非常简单

首先来到 官网 注册你的账号,创建一个 v6 的应用,点击配置

在下图点击获取 SDK 代码,复制弹窗主攻的代码即可,这里我选择的是 同步安装

最后将代码复制到 后台->设置->代码注入->全局 head 标签 中,即可完成接入,还是非常简单的,后续只需要在 51 的后台查看数据就好啦

最后

目前 Halo 除了上传文章的流程有些蹩脚,整体还是非常满意的,开发者社区也非常活跃,在 git 上提的 feature request 也能及时得到回复,如果你也想建站,推荐使用 halo 试试