1 前言
Halo 是一个强大易用的开源建站工具,拥有丰富的主题模板和插件,帮助用户快速搭建属于自己的博客系统。
准备
- CentOS 系统服务器(推荐腾讯云服务器)
- 域名
- SSH 工具(推荐 FinalShell)
注意
本文涉及 docker 和 docker-compose 的安装,Nginx、MySQL 使用宝塔面板安装。
2 Docker 部分
安装 yum-utils
# yum-utils是yum的工具包集合,需要用到其中的yum-config-manager
sudo yum install -y yum-utils
从国内服务器上下载 docker
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装 docker
sudo yum install -y docker-ce docker-ce-cli http://containerd.io docker-buildx-plugin docker-compose-plugin
验证 docker 是否安装成功
sudo docker --version
# 出现版本号即为安装成功
# Docker version 24.0.6, build ed223bc
安装 docker-compose
方案一:手动安装
访问 docker/compose 获取最新版本,选择文件名称为 docker-compose-linux-x86_64
下载并上传至 /usr/local/bin/docker-compose
目录,/docker-compose
需手动创建。
方案二:命令行安装
# 下载docker-compose文件并创建目录
# 可能较慢
curl -L https://github.com/docker/compose/releases/download/2.21.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 将文件复制到/usr/local/bin环境变量下
mv docker-compose /usr/local/bin
# 给该文件执行权限
chmod +x /usr/local/bin/docker-compose
验证 docker-compose 是否安装成功
docker-compose -v
# 出现版本号即为安装成功
# Docker Compose version v2.21.0
方案三:pip方式安装
# 跳过卸载requests模块操作
sudo pip install --ignore-installed requests
# 安装docker-compose
pip install docker-compose
验证 docker-compose 是否安装成功
docker-compose -v
# 出现版本号即为安装成功
# docker-compose version 1.26.2, build unknown
# docker-py version: 4.4.4
# CPython version: 2.7.5
# OpenSSL version: OpenSSL 1.0.2k-fips 26 Jan 2017
3 Halo 博客部署
3.1 建数据库
数据库使用 MySQL,数据库名、用户名和密码可自定义,密码建议随机。
3.2 创建容器组
Halo 2.9 可用的 Docker 镜像:halohub/halo
、ghcr.io/halo-dev/halo
Halo 文档:目前 Halo 2 并未更新 Docker 的 latest 标签镜像,主要因为 Halo 2 不兼容 1.x 版本,防止使用者误操作。我们推荐使用固定版本的标签,比如halohub/halo:2.9
或者halohub/halo:2.9.0
。
创建文件夹(Halo 数据根目录)
mkdir ~/halo && cd ~/halo
创建 docker-compose.yaml
vim docker-compose.yaml
# “i” 进入编辑模式
# “esc” 退出编辑模式
# :wq 保存并退出vim编辑器
编辑 docker-compose.yaml
将 3.1 创建的 MySQL 数据库名、用户名和密码填入,其它项谨慎修改
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
docker-compose up -d
检查 Halo 镜像运行状态
docker ps
# 出现halo即为成功
3.3 绑定域名
如果没有域名,可以先暂时跳过。
域名解析
前往域名控制台解析一条新的记录。
主机记录:访问站点域名的二级域名,比如 blog.xxxx.com,那么主机记录就为 blog
记录类型:选择“A”,将域名指向一个 IPv4 地址
记录值:填写服务器 IP 地址
其他默认即可
Nginx 反向代理
配置nginx.conf
文件
在nginx.conf
文件中添加如下内容。
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 服务,重载配置和重启分别点一下。
3.4 启动
docker-compose up -d
放行 8090 端口,用浏览器访问域名/console
或者IP:8090/console
,进入初始化页面,初始化后进入 Halo 管理页面。
4 Halo 博客设置
效果预览(使用Dream for Halo 2.x
主题,预览图仅供参考):
4.1 基础设置
侧边栏“设置”中包含:
- 基本设置:站点标题、副标题、logo 等
- 文章设置:各页文章显示条数
- SEO 设置:站点关键词、秒数等,用于提升网站在搜索引擎中的排名
- 用户设置:是否允许注册及新注册用户的所在权限组
- 评论设置:是否可以发布评论及评论发送的条件
- 主题路由设置:各页的路由设置及文章详情页访问规则
- 代码注入:自定义全局 head 标签、内容页 head 标签、页脚
4.2 插件
侧边栏“应用市场”安装及启用:
- 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 模板
提供一份页面“关于”的通用模板:
# 个人信息
- 昵称:
- Gitee:
- GitHub:
- Bilibili:
# 联系方式
- Email:
- WeChat:
- QQ:
# 网站信息
- 建站时间:
- 运行环境:
- 博客系统:
- 维护日志:
4.6 一些细节
- 侧边栏“文章”页内可管理文章分类和标签
- 添加文章页可切换编辑器,文章设置中可针对调整此篇文章的某些设置
- 使用“对象存储”插件,可在侧边栏“附件”内改变存储策略,推荐免费的七牛云
- 侧边栏“图库”为菜单“相册”,侧边栏“链接”为菜单“友链”,侧边栏“瞬间”为菜单“动态”
- 侧边栏“用户”内角色管理可新建角色权限组,使用“OAuth2 认证”插件可在身份认证中设置多登录方式
- 侧边栏“概览”中外部访问地址必须为外网 IP 或者域名,当为 localhost 或者 127.0.0.1 是将导致分享链接出现问题
5 写在最后
本文侧重在 Halo 博客的部署和使用上,简化了 Docker、Nginx 等在技术上的解释说明。Halo 部署难度不大,难度大的是坚持更新博客,让我们共同努力,致敬每一位还在写博客的你!