Halo是我无意间发现的一款博客框架,如果你讨厌Hexo,Vuepress等静态框架本地编辑,构建部署等方式,如果你想要一款一次搭建,前台是博客,后台是文章维护,并且支持各种定制化折腾的博客框架,可能Halo会比较适合你。

因为我个人还是比较偏技术,所以最后选用了Hexo,为了省点服务器资源,这款博客服务也就停了,没法预览了,就截取几张图预览预览。

image-20240227214221520

image-20240227214237687

image-20240227214257368

image-20240227214327675

image-20240227214404168

搭建

依旧采用docker-compose模式搭建,Halo由服务和数据库构成,我数据库依旧依据自己的习惯采用了pg:

  1. 编写docker-compose.yml文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
  1. 启动服务

在你配置docker-compose.yml的目录里面执行:

1
docker-compose up -d   # 启动应用,默认读取名为docker-compose.yml或docker-compose.yaml的文件
1
2
3
4
5
docker-compose ps  # 命令查看已经启动的容器。

docker-compose stop # 停止已经启动的容器。

docker-compose down # 命令停止并清除所有已经启动的容器。

也可以利用Portainer界面化docker管理平台来部署,它是一个相当于把我们针对docker或者docker compose的命令全部界面化的项目,有兴趣的可以看看我的docker服务系列文章01.Portainer-容器界面化管理工具

  1. 初始化

假设我们服务的端口映射时用的8090。我们启动Halo后,在首次通过ip:8090访问网站的时候会自动跳转到初始化页面,你需要完成这个步骤才能正常使用 Halo。

Setup

表单项说明:

  1. 站点名称:网站的名称,将会显示在浏览器标签页上。
  2. 邮箱:初始管理员的邮箱地址。
  3. 用户名:初始管理员的用户名。
  4. 密码:初始管理员的密码。
  5. 确认密码:重复输入密码以验证是否匹配。

输入完成之后点击初始化按钮即可完成初始化,初始化完成之后,将会跳转到登录页面,输入刚才设置的用户名和密码即可登录。

  • 博客访问地址:IP:8090

  • 博客后台访问地址:IP:8090/console

注意:

  1. 大家上面脚本里面可以看到我数据库和halo服务镜像都用的固定版本,halo是官方要求的,因为他们按照版本发布新版。数据库是因为我之前使用latest标签的镜像,有一次因为某个服务升级了,导致halo无法通过数据库健康检测,所以建议数据库独立且指定版本。
  2. 端口这一块,如果自己是阿里云腾讯云等等,问题不大,不管自己设置的映射是80还是8090,策略组放行即可。如果家庭宽带,首先得有外网ip,然后DMZ主机或者端口映射,如果家庭宽带不是专线,无法使用80,443等几个端口。

使用

建议先安装应用市场插件[2.10版本之前]

此条针对2.10版本之前的,2.10版本后内置了。

以前老版本插件需要每次去官网找插件,然后安装,现在有人开发了市场插件,相当于将官网插件市场移植到了自己定位博客服务里面。

应用市场插件:https://www.halo.run/store/apps/app-VYJbF

后台管理

访问:IP:8090/console,输入初始化的管理员账号密码进入后台。

image-20240227205126248

后台是我们整个博客的后台管理系统。

文章

我们博客的核心,包括文章的新增,编辑以及删除,发布等等,还有文章标签的管理,分类的管理全部在这。

这边需要注意,默认编辑器是富文本编辑器,不支持Markdown,需要安装插件,我用的插件有ByteMD以及Vditor Markdown

image-20240227210626918

image-20240227210556915

页面

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

image-20240227210758083

评论

博客自带评论框架插件的审核管理功能。

附件

资源管理功能,例如图片,视频等等。

瞬间

类似于博客通知或者每日心情,需要安装瞬间插件,并且主题要支持。

image-20240227211107286

image-20240227211142737

链接

一些友情链接等等第三方链接地址配置,有些主题功能需要。

主题

自己可以安装多款主题,这边就是主题的管理,可以针对主题进行配置,删除,修改,调整,预览等等。默认主题是Earth,我自己使用的是Hao。

image-20240227211359251

image-20240227211414365

菜单

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

image-20240227211610669

插件

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

image-20240227211853742

用户

用户管理。

设置

网站基本设置,例如站点名称,logo等等。还有文章,seo,用户,评论,通知等等设置。

概览

系统概览信息,版本,时间,环境信息等等。

备份

网站数据备份等等。

应用市场

1.10版本后边内置的应用市场,可以直接进入去安装插件和主题。

image-20240227212239107

hao主题

image-20240227212344912

这一块可配置项太多了,还是大家自己边预览边摸索吧,这是一个细活。

我们可以点击右上角主题预览,然后再预览界面点击配置即可开启桌面,手机,平板预览配置。

image-20240227212729705