1 前言

Halo 是一款开源的博客框架工具,其强大的功能和易用性受到了许多用户的喜爱。Halo 博客的特点包括代码开源、易于部署、插件机制、模版机制、附件管理和搜索引擎支持等,这些特点使得 Halo 成为了一个灵活且可扩展的框架平台,无论是个人还是企业都可以使用它来搭建自己的博客网站。

image-20240605230803067

2 准备

本文使用宝塔面板部署,安装宝塔面板参考下方文章,进入宝塔面板后需要安装 MySQLNginxDocker

3 Halo 博客部署

3.1 建数据库

数据库使用 MySQL,数据库名、用户名和密码可自定义。

image-20230927010433190

image-20230927010919741

3.2 创建容器组

在 Docker 页添加编排模板,将创建的 MySQL 数据库名、用户名和密码在内容中对应修改,其它项谨慎修改。

image-20240605232413741

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: "3"

services:
halo:
image: halohub/halo:2.9
container_name: halo
restart: on-failure:3
network_mode: "host"
volumes:
- ./:/root/.halo2
command:
# 修改为自己已有的 MySQL 配置
- --spring.r2dbc.url=r2dbc:pool:mysql://localhost:3306/数据库名
- --spring.r2dbc.username=用户名
- --spring.r2dbc.password=密码
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
# 端口号 默认8090
- --server.port=8090

然后创建容器,选择使用容器编排,选择刚刚创建的编排模板,名称自定义。

image-20240605233401901

如果在宝塔面板中安装失败可选择在命令行中操作

Halo 2.9 可用的 Docker 镜像:halohub/haloghcr.io/halo-dev/halo

Halo 文档:目前 Halo 2 并未更新 Docker 的 latest 标签镜像,主要因为 Halo 2 不兼容 1.x 版本,防止使用者误操作。我们推荐使用固定版本的标签,比如 halohub/halo:2.9 或者 halohub/halo:2.9.0

创建文件夹(Halo 数据根目录)

1
mkdir ~/halo && cd ~/halo

创建 docker-compose.yaml

1
vim docker-compose.yaml

编辑 docker-compose.yaml,将创建的 MySQL 数据库名、用户名和密码在内容中对应修改,其它项谨慎修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: "3"

services:
halo:
image: halohub/halo:2.9
container_name: halo
restart: on-failure:3
network_mode: "host"
volumes:
- ./:/root/.halo2
command:
# 修改为自己已有的 MySQL 配置
- --spring.r2dbc.url=r2dbc:pool:mysql://localhost:3306/数据库名
- --spring.r2dbc.username=用户名
- --spring.r2dbc.password=密码
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
# 端口号 默认8090
- --server.port=8090

启动 docker-compose 创建容器

1
docker-compose up -d

检查 Halo 镜像运行状态

1
2
docker ps
# 出现halo即为成功

3.3 反向代理

配置nginx.conf文件

image-20230927164834024

nginx.conf文件中添加如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
# 监听80端口
listen 80;
listen [::]:80;
# 接口的域名,用来访问
server_name 域名;
# 限制请求体的大小
client_max_body_size 1024m;
location / {
# 设置服务器地址
proxy_pass http://127.0.0.1:8090;
# 设定被代理服务器接收到的header信息,重定义发往后端服务器的请求头
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

重载配置并重启 Nginx 服务

image-20230927170315444

3.4 启动

1
docker-compose up -d

在浏览器访问域名/console 或者IP:端口/console ,进入初始化页面,初始化后进入 Halo 管理页面。

image-20230927174453409

4 Halo 博客设置

效果预览(使用Dream for Halo 2.x主题,预览图仅供参考):

image-20230927183624379

4.1 基础设置

侧边栏“设置”中包含:

  • 基本设置:站点标题、副标题、logo 等
  • 文章设置:各页文章显示条数
  • SEO 设置:站点关键词、秒数等,用于提升网站在搜索引擎中的排名
  • 用户设置:是否允许注册及新注册用户的所在权限组
  • 评论设置:是否可以发布评论及评论发送的条件
  • 主题路由设置:各页的路由设置及文章详情页访问规则
  • 代码注入:自定义全局 head 标签、内容页 head 标签、页脚

4.2 插件

前往Halo 应用市场安装内置应用市场插件。

侧边栏“应用市场”安装及启用:

  • Dream for Halo 2.x(主题)
  • 搜索组件:提供统一的搜索组件
  • 评论组件:提供完整的评论系统
  • Sitemap:生成站点地图
  • RSS:生成 RSS 订阅链接
  • ByteMD:让文章支持 Markdown 编辑
  • 图库管理:图库管理模块
  • 链接管理:链接管理模块
  • 瞬间:瞬间管理模块
  • 【可选】对象存储:对象存储策略,兼容阿里云、腾讯云、七牛云等
  • 【可选】OAuth2 认证:提供多种登录方式
  • 【可选】StackEdit:另一款 Markdown 编辑器

4.3 菜单

创建菜单(侧边栏“菜单”,选择在主菜单中新建):

名称链接地址备注
首页/
归档/archives同主题路由设置中归档页路由前缀相同
分类/categories同主题路由设置中分类页路由前缀相同
标签/tags同主题路由设置中标签页路由前缀相同
动态/moments使用插件“瞬间”
相册/photos使用插件“图库管理”
友链/links使用插件“链接管理”
关于/about在侧边栏“页面”中新建页面,别名为 about

4.4 主题

侧边栏“主题(Dream for Halo 2.x)”中包含:

  • 详情:查看当前主题的基本信息
  • 基础信息:作者用户名(填写用户名而非用户昵称)、离屏文案、备案信息、站点声明信息等
  • 基础样式:加载进度条、文章侧边目录、博客背景图、横幅大图、主题色、字体、布局、首页大图轮播、侧边栏悬浮
  • 文章设置:文章缩略图、版权声明、文章分享、捐赠二维码等
  • 侧边栏配置:侧边栏展示(详情见下方表)、各模块类型的具体设置
  • 页面设置:设置友链页面、标签页面等
  • 增强功能:鼠标设置、特效显示、访客统计、自动推送等
  • 定制主题:主题样式自定义设置
侧边栏模板类型模块位置备注
信息模块左侧(1)1. 信息显示不正常检查基础信息中作者用户名是否正确;2. 彩字停顿检查当前用户详情中描述是否填写
音乐模块左侧(2)简单配置填写网易云歌单 ID 即可,获取方法:网易云音乐歌单链接中一串数字
最近文章模块左侧(3)
公告模块右侧(1)
目录模块右侧(2)目录仅在文章详情页显示
广告模块右侧(3)
文章分类模块右侧(4)
文章标签模块右侧(5)

4.5 模板

提供一份页面“关于”的通用模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 个人信息

- 昵称:
- Gitee:
- GitHub:
- Bilibili:

# 联系方式

- Email:
- WeChat:
- QQ:

# 网站信息

- 建站时间:
- 运行环境:
- 博客系统:
- 维护日志:

4.6 一些细节

  • 侧边栏“文章”页内可管理文章分类和标签
  • 添加文章页可切换编辑器,文章设置中可针对调整此篇文章的某些设置
  • 使用“对象存储”插件,可在侧边栏“附件”内改变存储策略,推荐免费的七牛云
  • 侧边栏“图库”为菜单“相册”,侧边栏“链接”为菜单“友链”,侧边栏“瞬间”为菜单“动态”
  • 侧边栏“用户”内角色管理可新建角色权限组,使用“OAuth2 认证”插件可在身份认证中设置多登录方式
  • 侧边栏“概览”中外部访问地址必须为外网 IP 或者域名,当为 localhost 或者 127.0.0.1 是将导致分享链接出现问题

5 写在最后

Halo 博客是一个功能强大、易于上手的博客建站工具,无论是新手还是有经验的用户都可以快速上手并搭建出满意的博客网站。Halo 部署难度不大,难度大的是坚持更新博客,让我们共同努力,致敬每一位还在写博客的你!