一、Halo是什么有啥用
Halo是一款基于Java,使用vue+spring boot框架开发的开源建站工具,可以配合上不同的模板、插件,帮助我们构建出自己想要的站点(可以是公司的官网、也可以是自己的个人博客、还可以作为团队的共享知识库、论坛,甚至可以构建为一个商城);拥有完整的后台管理与前台展示;属于动态框架。
|--------|------------------------|--------------------------------|
| 序号 | Halo的优点 | Halo的缺点 |
| 1 | 多种方式部署,十分灵活 | 对服务器的内存要求较高,由于基于Java内存至少配置1G |
| 2 | 支持附件、自定义图床、回复评论、多用户管理 | 不支持额外的第三方插件、插件数量相比WordPress少很多 |
| 3 | 界面设计简洁清爽、拥有完整后台管理和前端展示 | 社区规模偏小,遇到问题时支持可能不如WordPress |
| 4 | 拥有完备的富文本编辑器、支持多种文本格式 | |
| 5 | 拥有各种主题、可自定义配置 | |
| 6 | 拥有现代化的设计、响应速度快 | |
[Halo的优缺点]
二、Halo的安装部署
2.1、使用 Docker Compose 部署Halo
2.1.1、安装docker容器引擎
bash
#安装docker引擎的实操流程
#1-安装docker引擎所需的依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
#2-安装配置阿里云的镜像仓库源添加到本机【/etc/yum.repos.d/docker-ce.repo】(国内访问会更加快速方便)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#3-建立缓存
yum makecache
#4-安装docker-ce引擎(注意:由于我们这里使用的是Almalinux9.3的系统它默认是没有安装podman容器管理工具;但如果是红帽9及其更高版本的系统则默认安装了podman,若要安装docker-ce,则需要将podman卸载掉才能安装)
yum install docker-ce -y
#5-启动docker
systemctl restart docker
systemctl status docker
ps -ef | grep docker
#6-设置docker开机自启
systemctl enable docker
2.1.2、下载安装docker-compose
docker-compose是用来做docker的多容器控制,有了docker-compose,我们可以把所有繁琐的docker操作全都一条命令,自动化的完成。
要使用docker-compose,需要安装一个工具docker-compose,可直接从官方:https://github.com/docker/compose/releases 处下载编译好的二进制文件即可。
bash
#下载docker-compose方法(只用选择一个方法下载即可)
#1-创建【/usr/local/bin】目录
mkdir -p /usr/local/bin/
#2-方法一:下载最新的docker-compose二进制文件到本机的【/usr/local/bin】目录
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#2-方法二:下载指定版本(如:v2.40.0)的docker-compose二进制文件到本机的【/usr/local/bin】目录
curl -L https://github.com/docker/compose/releases/download/v2.40.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#3-给下载好的docker-compose二进制文件添加执行权限
chmod +x /usr/local/bin/docker-compose
#4-验证docker-compose是否安装成功(若输出docker compose的版本信息内容则表示成功,否则失败)
docker-compose --version
2.1.3、下载安装部署Halo
bash
#下载安装部署halo的实操流程
#1-创建halo用户并设置密码
useradd -m halo
passwd halo
#2-在root用户下创建目录
mkdir ~/halo && cd ~/halo
#3-在创建的目录【~/halo】中创建【docker-compose.yaml】文件
vi docker-compose.yaml
#【docker-compose.yaml】文件的内容(是使用mysql数据库)
version: "3"
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.21
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./halo2:/root/.halo2
ports:
- "8092:8092"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8092/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
environment:
# JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
- JVM_OPTS=-Xmx256m -Xms256m
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
- --spring.r2dbc.username=root
# MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
- --spring.r2dbc.password=qwer1234
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8092/
halodb:
image: mysql:8.1.0
restart: on-failure:3
networks:
halo_network:
command:
- --default-authentication-plugin=caching_sha2_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
volumes:
- ./mysql:/var/lib/mysql
- ./mysqlBackup:/data/mysqlBackup
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
interval: 3s
retries: 5
start_period: 30s
environment:
# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
- MYSQL_ROOT_PASSWORD=qwer1234
- MYSQL_DATABASE=halo
networks:
halo_network:
#4-启动 Halo 服务
docker-compose up -d
#5-实时查看日志
docker-compose logs -f
#6-在浏览器输入当前halo所在的服务器IP:8090访问halo的初始界面(【ip a】可获取服务器的IP信息;如(192.168.1.36:8090))


2.2、使用JAR文件部署Halo
使用 JAR 文件部署 | Halo 文档
https://docs.halo.run/getting-started/install/jar-file
2.2.1、检查java环境并安装
这是红帽官网提供的OpenJDK下载网址,在这里可以查找到对应的java jdk包下载(注意:这些OpenJDK包的下载需要用账号登录红帽官网后才能下载):如下图所示:


bash
#安装openjdk17实操流程(其余版本的Jdk安装方法也一样)
#1-检查Linux支持的jdk环境(若没有jdk17则无法使用yum安装,需手动安装)
yum list | grep jdk
#2-下载openjdk17的压缩包
wget https://access.cdn.redhat.com/content/origin/files/sha256/90/906b9ae8f7019f02a2280734bd5d2341de049a5e4817257e14520d620f84626f/java-17-openjdk-17.0.17.0.10-1.portable.jdk.el.x86_64.tar.xz?_auth_=1761551143_a10c2fd3ab2f25c2263143353b72c658 -c 0 -P /data
#3-解压openjdk17并修改名称
cd /data/
tar -xvf java-17-openjdk-17.0.17.0.10-1.portable.jdk.el.x86_64.tar.xz
mv java-17-openjdk-17.0.17.0.10-1.portable.jdk.el.x86_64 openjdk17017010
#4-编辑环境配置文件并添加openjdk17的环境变量
vi /etc/profile
#openjdk17 enviroment
export JAVA_HOME=/data/openjdk17017010
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
#5-让修改的环境变量生效
source /etc/profile
#6-查看java版本信息
echo $JAVA_HOME
echo $PATH
java -version







2.2.2、下载安装部署Halo
bash
#使用jar包搭建halo实操流程(官网地址【https://docs.halo.run/getting-started/install/jar-file】)
#0-创建halo用户密码、然后切换到halo用户下创建halo的工作目录
useradd -m halo
passwd halo
su - halo
mkdir ~/app && cd ~/app
#1-下载halo的包(halo的java环境要求:2.20 及以下版本:JRE 17;2.21 以上版本:JRE 21)
wget https://dl.halo.run/release/halo-2.16.3.jar -O halo.jar
#2-创建halo的工作目录【/home/halo/.halo2】和配置文件【application.yaml】
mkdir ~/.halo2 && cd ~/.halo2
vim application.yaml
#halo的配置文件【application.yaml】内容如下:
server:
# 运行端口
port: 8092
spring:
# 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
r2dbc:
url: r2dbc:pool:mysql://192.168.1.36:13336/halo
username: ck
password: qwer1234
sql:
init:
mode: always
# 需要配合 r2dbc 的配置进行改动
platform: mysql
halo:
# 工作目录位置
work-dir: /home/halo/.halo2
# 外部访问地址
external-url: http://localhost:8092
# 附件映射配置,通常用于迁移场景
attachment:
resource-mappings:
- pathPattern: /upload/**
locations:
- migrate-from-1.x
#3-测试系统的java环境(若未安装java或者安装的版本不对可参照如上【安装openjdk17实操流程】操作)
java -version
#4-安装mysql数据库,并在mysql数据库中创建halo数据库和ck用户;并授予ck用户操作halo数据库的所有权限
mysql -uroot -p
create database halo character set utf8mb4 collate utf8mb4_bin;
create user ck@'192.168.1.12' identified by 'qwer1234';
grant all on halo.* to ck@'192.168.1.12';
flush privileges;
#5-测试运行Halo(若没有观察到异常日志,即可在浏览器输入当前Halo所在服务器的ip:8092 访问halo的初始界面(如:192.168.1.12:8092)【ip a】命令可查看当前服务器IP信息)
cd ~/app && java -Dfile.encoding=UTF-8 -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/
#6-注意:如果当前服务器开启了防火墙则需要放开8092端口
systemctl status firewalld
firewall-cmd --list-port
firewall-cmd --zone=public --add-port=8092/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port
#7-将halo作为一个服务
#7.1-登录到root用户(或从当前halo用户退出到root)
exit
#7.2-创建halo的服务文件
vim /etc/systemd/system/halo.service
#halo的服务文件【/etc/systemd/system/halo.service】内容
[Unit]
Description=Halo Service
Documentation=https://docs.halo.run
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=halo
ExecStart=/data/openjdk17017010/bin/java -Dfile.encoding=UTF-8 -server -Xms256m -Xmx256m -jar /home/halo/app/halo.jar --spring.config.additional-location=optional:file:/home/halo/.halo2/
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog
StandError=inherit
[Install]
WantedBy=multi-user.target
#8-重新加载systemd
systemctl daemon-reload
#9-启动halo服务
systemctl start halo
#10-设置halo服务开机自启
systemctl enable halo
#11-查看halo服务状态
systemctl status halo
#12-查看halo服务日志
journalctl -n 20 -u halo





如上图所示的测试运行Halo时输出的控制台内容也没有报错信息,然后我们访问该Halo所在服务器的IP:8092(如:192.168.1.12:8092)后即可看到这个Halo的初始界面则表示安装的Halo成功了(注意:若我们访问【192.168.1.12:8092】没有显示这个界面,则需要检查Halo所在的服务器的防火墙是否放开了8092这个端口,没有则需要放开)。






