2G 小破站也能稳定运行 Halo 博客系统 (ゝ∀・)
什么是 Halo ?
Halo 是一款基于 Java / Spring Boot 开发的开源博客系统,专注于为个人博客和技术博客提供优雅、现代的解决方案。 其核心理念是让用户回归写作本身,具备开箱即用的部署方式、现代化的后台管理界面和原生的 Markdown 写作体验。 系统拥有强大的主题系统和插件化架构,支持功能扩展,同时保持轻量。
Halo 支持以下部署方式:
教程简介
本教程采用的第六种部署方式 —— JAR 文件部署,该部署方式虽然比较复杂,但对2核2G的小破站来说却是最友好的方式(亲自尝试过)
在此之前
准备
一台Linux服务器(配置至少 2G 的 RAM)
JDK21 的 Java 运行环境,这里推荐使用 Zulu21
Halo 的 jar 程序包
SSH + SFTP 工具
确定服务器 MySQL 已安装,如果需要使用 MySQL 可以查看下面的这个博客👇👇👇
https://blog.playereg.top/archives/019c1ddc-c5a6-74cf-8627-d187fa24c22e
附件
正式部署
上传资源
首先,使用 SFTP 工具将 Halo 的 jar 程序包和 Zulu JDK 21 的 tar.gz 压缩包上传到你服务器下的 /home 目录下

然后切换到 /home ,并查看Halo 的 jar 程序包和 Zulu JDK 21 的 tar.gz 压缩包是否上传成功
cd /home && ll如果输出有 halo-2.22.12.jar 和 zulu21.48.15-ca-jdk21.0.10-linux_x64.tar.gz ,则资源成功上传至服务器中
root@ubuntu-vm-server:~# cd /home && ll
total 316740
drwxr-xr-x 3 root root 4096 Feb 3 09:16 ./
drwxr-xr-x 23 root root 4096 Feb 1 15:34 ../
-rw-r--r-- 1 root root 110445057 Feb 3 09:16 halo-2.22.12.jar # <== Halo程序包
drwxr-x--- 4 user user 4096 Feb 1 15:53 user/
-rw-r--r-- 1 root root 213871305 Feb 3 09:16 zulu21.48.15-ca-jdk21.0.10-linux_x64.tar.gz # <== Zulu JDK 21配置运行环境
Halo 2.21 以上的版本需要使用 JDK21 运行环境,因此这里我使用 Zulu21 做演示,使用 Zulu JDK 一定程度上还能够提升服务器性能,接下来将开始配置 Zulu JDK 21
首先将 Zulu JDK 21 的 tar.gz 压缩包解压到 /opt 目录下
tar -xzf zulu21.48.15-ca-jdk21.0.10-linux_x64.tar.gz -C /opt/使用 ll /opt/ 命令检查一下是否解压成功,如果输出结果中存在 zulu21.48.15-ca-jdk21.0.10-linux_x64 目录,这说明解压成功
root@ubuntu-vm-server:/home# ll /opt/
total 12
drwxr-xr-x 3 root root 4096 Feb 3 10:42 ./
drwxr-xr-x 23 root root 4096 Feb 1 15:34 ../
drwxr-xr-x 10 root root 4096 Jan 8 14:25 zulu21.48.15-ca-jdk21.0.10-linux_x64/ # <== 解压好的JDK环境接着将工作区切换到 /opt 目录下,并重命名 JDK 环境文件夹名称为 zulu21
cd /opt/
mv ./zulu21.48.15-ca-jdk21.0.10-linux_x64/ ./zulu21/接着使用 ll 命令检查一下是否成功重命名,如果输出结果中存在 zulu21 ,则说明修改成功
root@ubuntu-vm-server:/opt# ll
total 12
drwxr-xr-x 3 root root 4096 Feb 3 10:54 ./
drwxr-xr-x 23 root root 4096 Feb 1 15:34 ../
drwxr-xr-x 10 root root 4096 Jan 8 14:25 zulu21/ # <== 名称被修改成了 zulu21接着检查 zulu21 能否正常使用,这里直接运行 -version 查看版本
./zulu21/bin/java -version如果正常输出 JDK 版本,说明环境正常
root@ubuntu-vm-server:/opt# ./zulu21/bin/java -version
openjdk version "21.0.10" 2026-01-20 LTS
OpenJDK Runtime Environment Zulu21.48+15-CA (build 21.0.10+7-LTS)
OpenJDK 64-Bit Server VM Zulu21.48+15-CA (build 21.0.10+7-LTS, mixed mode, sharing)接下来需要为 Zulu JDK 21 创建 zulu21 的软链接,以便后续直接通过 zulu21 命令使用 JDK 环境
ln -sf /opt/zulu21/bin/java /usr/local/bin/zulu21接下来直接使用 zulu21 -version 命令检查是否软链接成功,如果正常输出 JDK 版本,这软链接成功
root@ubuntu-vm-server:/opt# zulu21 -version
openjdk version "21.0.10" 2026-01-20 LTS
OpenJDK Runtime Environment Zulu21.48+15-CA (build 21.0.10+7-LTS)
OpenJDK 64-Bit Server VM Zulu21.48+15-CA (build 21.0.10+7-LTS, mixed mode, sharing)到这里 JDK 环境配置完成,由于本次教程最终目的是为了让 Halo 的 jar 程序包在服务器上运行,这里并未配置 zulu21 的系统环境变量
JAVA_HOME,如果需要JAVA_HOME可以自行配置
安装并配置 Halo
首先在 /opt 目录下创建 /app 目录,用于存放 Web 应用,然后将 Halo jar程序包移动到 /app 目录并重命名为 halo2.jar ,并检查是否移动成功
mkdir ./app # 创建 /app 目录
sudo mv /home/halo-2.22.12.jar ./app/halo2.jar # 移动 Halo 程序包到 /app 目录下
ll ./app # 检查 /app 目录内容如果输出结果为以下结果,则 Halo jar 程序包成功被移动到了 /app 目录下
root@ubuntu-vm-server:/opt# ll ./app
total 107868
drwxr-xr-x 2 root root 4096 Feb 3 11:45 ./
drwxr-xr-x 4 root root 4096 Feb 3 11:45 ../
-rw-r--r-- 1 root root 110445057 Feb 3 11:45 halo2.jar接下来为 Halo 创建工作目录 ~/.halo2 ,并将当前工作区切换到该目录下
mkdir ~/.halo2 && cd ~/.halo2接下来切换到 MySQL 命令行
# 切换到 MySQL 命令行
mysql -u root -p为 Halo 创建数据库,这里我使用的是 MySQL 数据库,创建 halo_db 数据库,并查看是否配置成功
create database halo_db character set utf8mb4 collate utf8mb4_bin; -- 创建 halo_db 数据库
SHOW DATABASES LIKE 'halo_db'; -- 查看是否创建成功如果创建成功,查看结果如下:
+--------------------+
| Database (halo_db) |
+--------------------+
| halo_db |
+--------------------+
1 row in set (0.01 sec)使用 quit; 命令退出 MySQL 命令行,接着在 ~/.halo2 目录下创建 Halo 的 yaml 配置文件
使用 Vim 编辑器:
sudo vim application.yaml使用 Nano 编辑器:
sudo nano application.yaml
server:
# 运行端口
port: 8090
spring:
# 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
r2dbc:
url: r2dbc:pool:mysql://127.0.0.1:3306/halo_db?allowPublicKeyRetrieval=true&useSSL=false
username: root
password: 123456 # 修改成你自己的密码
sql:
init:
mode: always
# 需要配合 r2dbc 的配置进行改动
platform: mysql
halo:
security:
two-factor-disabled: true
# 工作目录位置
work-dir: ${user.home}/.halo2
# 外部访问地址
external-url: http://localhost:8090
# 附件映射配置,通常用于迁移场景
attachment:
resource-mappings:
- pathPattern: /upload/**
locations:
- migrate-from-1.x
然后初步运行 Halo 验证配置是否生效,并做初始化设置
# 切换工作目录到 Halo 所在目录
cd /opt/app/
# 运行 Halo
zulu21 -Dfile.encoding=UTF-8 -jar halo2.jar --spring.config.additional-location=optional:file:$HOME/.halo2/
初始化完成后可以登录验证一下是否正确部署

看到以下这个管理员界面说明 Halo 成功部署

配置 Halo 的系统服务
接下来配置 Halo 的系统 service 服务,用于更加方便的启动 Halo 服务
首先回到 SSH 命令行,使用快捷键 ctrl + c 停止 Halo 服务,然后使用以下命令为 Halo 创建系统服务
使用 Vim 编辑器:
sudo vim /etc/systemd/system/halo2.service使用 Nano 编辑器:
sudo nano /etc/systemd/system/halo2.service
其中 halo2.service 的配置为:
[Unit]
Description=Halo Service
Documentation=https://docs.halo.run
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
ExecStart=/opt/zulu21/bin/java -Dfile.encoding=UTF-8 -server -Xms256m -Xmx1024m -jar /opt/app/halo2.jar --spring.config.additional-location=optional:file:/root/.halo2/
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandardOutput=syslog
StandardError=inherit
[Install]
WantedBy=multi-user.target保存后,从新加载 service 配置项
systemctl daemon-reload运行 sudo systemctl start halo2 命令启动 Halo 服务,并使用 sudo systemctl status halo2 查看服务运行状态,出现以下结果,则表明 Halo 成功加入到系统服务中
● halo2.service - Halo Service
Loaded: loaded (/etc/systemd/system/halo2.service; disabled; preset: enabled)
Active: active (running) since Tue 2026-02-03 13:22:36 UTC; 4s ago # <== Halo 服务正在运行
Docs: https://docs.halo.run
Main PID: 4033 (java)
Tasks: 40 (limit: 9380)
Memory: 460.8M (peak: 460.8M)
CPU: 12.478s
CGroup: /system.slice/halo2.service
└─4033 /opt/zulu21/bin/java -Dfile.encoding=UTF-8 -server -Xms256m -Xmx1024m -jar /opt/app/halo2.jar --spring.config.additional-location=optional:file:/root/.halo2/到了这步,Halo 已经可以通过 systemctl 命令进行服务管理
sudo systemctl start halo2 # 启动
sudo systemctl restart halo2 # 重启
sudo systemctl stop halo2 # 关闭
sudo systemctl status halo2 # 查看状态
sudo systemctl enable halo2 # 设置自启动
sudo systemctl disable halo2 # 禁用自启动到了这里,你的 Halo 已经搭建完成了
恭喜成为入门站长!!! ٩(๑•̀ω•́๑)۶