我的自建博客之旅04之Halo
Halo是我无意间发现的一款博客框架,如果你讨厌Hexo,Vuepress等静态框架本地编辑,构建部署等方式,如果你想要一款一次搭建,前台是博客,后台是文章维护,并且支持各种定制化折腾的博客框架,可能Halo
会比较适合你。
因为我个人还是比较偏技术,所以最后选用了Hexo,为了省点服务器资源,这款博客服务也就停了,没法预览了,就截取几张图预览预览。





搭建
依旧采用docker-compose模式搭建,Halo由服务和数据库构成,我数据库依旧依据自己的习惯采用了pg:
- 编写
docker-compose.yml
文件:
yaml
version: "3"
services:
halo:
image: halohub/halo:2.12 # 注意,halo每个版本都是单独发布的,截止2024年2月27日是2.11
container_name: halo
restart: always
depends_on:
halodb:
condition: service_healthy
volumes:
- ./halo:/root/.halo2 # 持久化halo服务数据,将数据存储在本配置当前目录的halo文件夹里面
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=https://xxx:18888/
halodb:
image: postgres:15.4 # 这一块一定要慎重,写死版本最好,我之前一直用latest最新版,突然某个版本一直无法启动
container_name: halodb
restart: always
ports:
- "5432:5432" # 数据库访问端口,建议可以不暴露出去
volumes:
- ./db:/var/lib/postgresql/data # 持久化数据库数据,将数据存在当前目录的db文件夹里面
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
environment:
- POSTGRES_PASSWORD=openpostgresql
- POSTGRES_USER=halo
- POSTGRES_DB=halo
- PGUSER=halo
- 启动服务
在你配置docker-compose.yml
的目录里面执行:
bash
docker-compose up -d # 启动应用,默认读取名为docker-compose.yml或docker-compose.yaml的文件
bash
docker-compose ps # 命令查看已经启动的容器。
docker-compose stop # 停止已经启动的容器。
docker-compose down # 命令停止并清除所有已经启动的容器。
也可以利用Portainer
界面化docker管理平台来部署,它是一个相当于把我们针对docker或者docker compose的命令全部界面化的项目,有兴趣的可以看看我的docker服务系列文章01.Portainer-容器界面化管理工具
。
- 初始化
假设我们服务的端口映射时用的8090。我们启动Halo后,在首次通过ip:8090访问网站的时候会自动跳转到初始化页面,你需要完成这个步骤才能正常使用 Halo。

表单项说明:
- 站点名称:网站的名称,将会显示在浏览器标签页上。
- 邮箱:初始管理员的邮箱地址。
- 用户名:初始管理员的用户名。
- 密码:初始管理员的密码。
- 确认密码:重复输入密码以验证是否匹配。
输入完成之后点击初始化按钮即可完成初始化,初始化完成之后,将会跳转到登录页面,输入刚才设置的用户名和密码即可登录。
-
博客访问地址:IP:8090
-
博客后台访问地址:IP:8090/console
注意:
- 大家上面脚本里面可以看到我数据库和halo服务镜像都用的固定版本,halo是官方要求的,因为他们按照版本发布新版。数据库是因为我之前使用latest标签的镜像,有一次因为某个服务升级了,导致halo无法通过数据库健康检测,所以建议数据库独立且指定版本。
- 端口这一块,如果自己是阿里云腾讯云等等,问题不大,不管自己设置的映射是80还是8090,策略组放行即可。如果家庭宽带,首先得有外网ip,然后DMZ主机或者端口映射,如果家庭宽带不是专线,无法使用80,443等几个端口。
使用
建议先安装应用市场插件[2.10版本之前]
此条针对2.10版本之前的,2.10版本后内置了。
以前老版本插件需要每次去官网找插件,然后安装,现在有人开发了市场插件,相当于将官网插件市场移植到了自己定位博客服务里面。
应用市场插件:www.halo.run/store/apps/...
后台管理
访问:IP:8090/console
,输入初始化的管理员账号密码进入后台。

后台是我们整个博客的后台管理系统。
文章
我们博客的核心,包括文章的新增,编辑以及删除,发布等等,还有文章标签的管理,分类的管理全部在这。
这边需要注意,默认编辑器是富文本编辑器,不支持Markdown,需要安装插件,我用的插件有ByteMD
以及Vditor Markdown
。


页面
博客内的一些单页面,例如关于,音乐,友情链接等等页面,如果主题支持,需要自己构建页面。

评论
博客自带评论框架插件的审核管理功能。
附件
资源管理功能,例如图片,视频等等。
瞬间
类似于博客通知或者每日心情,需要安装瞬间插件,并且主题要支持。


链接
一些友情链接等等第三方链接地址配置,有些主题功能需要。
主题
自己可以安装多款主题,这边就是主题的管理,可以针对主题进行配置,删除,修改,调整,预览等等。默认主题是Earth,我自己使用的是Hao。


菜单
菜单配置,一般主题内可能会有多种支持,例如Hao主题支持设置footer菜单。

插件
插件管理界面,可以开启关闭插件。

用户
用户管理。
设置
网站基本设置,例如站点名称,logo等等。还有文章,seo,用户,评论,通知等等设置。
概览
系统概览信息,版本,时间,环境信息等等。
备份
网站数据备份等等。
应用市场
1.10版本后边内置的应用市场,可以直接进入去安装插件和主题。

hao主题

这一块可配置项太多了,还是大家自己边预览边摸索吧,这是一个细活。
我们可以点击右上角主题预览,然后再预览界面点击配置即可开启桌面,手机,平板预览配置。
