部署 Halo 项目
1. 环境准备
确保服务器已连接网络,具备 root 权限或 sudo 权限。
确保有一台数据库服务器上已经安装部署了MySQL并开放远程连接。
确保有一台DNS服务器上已经安装Bind9并添加了A记录。
依赖检查
在开始之前,需要确保服务器已经满足以下条件:
- Java环境,版本要求:
- 2.21 以上版本:JRE 21
- 2.20 及以下版本:JRE 17
- 数据库(任一)
1.1 安装 JDK
Halo 基于 Spring Boot,2.21 以上版本要求:JRE 21,2.20 及以下版本要求:JRE 17。
OpenJDK 21安装
由于官方包管理器(APT)没有OpenJDK 21的源,需要我们自行下载安装。
下载 OpenJDK
使用以下命令下载 OpenJDK 21.0.2:
wget https://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/openjdk-21.0.2_linux-x64_bin.tar.gz
下载输出示例:
--2025-07-24 08:08:05-- https://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/openjdk-21.0.2_linux-x64_bin.tar.gz
正在解析主机 download.java.net (download.java.net)... 184.25.248.88
正在连接 download.java.net (download.java.net)|184.25.248.88|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:203616881 (194M) [application/x-gzip]
正在保存至: “openjdk-21.0.2_linux-x64_bin.tar.gz”
openjdk-21.0.2_linux-x64_bin.tar.g 100%[===============================================================>] 194.18M 26.9MB/s 用时 7.8s
2025-07-24 08:08:13 (25.0 MB/s) - 已保存 “openjdk-21.0.2_linux-x64_bin.tar.gz” [203616881/203616881])
安装步骤
解压文件
tar -xzvf openjdk-21.0.2_linux-x64_bin.tar.gz
移动到安装目录
mv jdk-21.0.2 /usr/local/jdk21
配置环境变量
编辑 /etc/profile
文件:
vim /etc/profile
行末添加以下环境变量配置:
export JAVA_HOME=/usr/local/jdk21
export PATH=$PATH:$JAVA_HOME/bin
保存后,运行以下命令使环境变量生效:
source /etc/profile
验证安装
检查 Java 版本以确认安装成功:
java -version
预期输出:
openjdk version "21.0.2" 2024-01-16
OpenJDK Runtime Environment (build 21.0.2+13-58)
OpenJDK 64-Bit Server VM (build 21.0.2+13-58, mixed mode, sharing)
2. 安装并配置数据库
Halo 支持 H2(嵌入式数据库,适合测试)、MySQL 或 PostgreSQL。以下以 MySQL 8.0 为例。
2.1 安装 MySQL
按照之前的方法添加源后,安装数据库,或者直接使用之前的数据库数据库服务器更方便!
2.2 配置 MySQL
在数据库服务器中
创建 Halo 数据库和用户:
# 进入 MySQL 控制台
sudo mysql -u root -p
# 创建数据库
CREATE DATABASE halo_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 创建用户并授权
CREATE USER 'halo'@'%' IDENTIFIED BY '12345678';
GRANT ALL PRIVILEGES ON halo_db.* TO 'halo'@'%';
FLUSH PRIVILEGES;
# 退出 MySQL
EXIT;
创建新的系统用户
不推荐直接使用系统 root 用户来运行 Halo。如果你需要直接使用 root 用户,请跳过这一步。
创建一个名为 halo 的用户(名字可以随意,但后面配置文件里也得进行相应变更)
useradd -s /bin/bash -m halo
为 halo 用户创建密码
passwd halo
登录到 halo 账户
su - halo
3. 下载并配置 Halo
3.1 下载 Halo 可执行 JAR 包(2.21.3版本)
从 Halo 的 Gitee 发布页 或 GitHub Releases 下载最新稳定版 JAR 文件(例如 halo-2.x.x.jar
)。
当前使用的是 halo 账户操作!
# 创建 Halo 工作目录
mkdir ~/app
cd ~/app
# 下载 JAR 包
wget https://github.com/halo-dev/halo/releases/download/v2.21.3/halo-2.21.3.jar -O halo.jar
wget https://dl.halo.run/release/halo-2.21.3.jar -O halo.jar
3.2 创建配置文件
Halo 使用 application.yaml
配置文件,位于 ~/.halo2/application.yaml
或自定义路径。
当前使用的是 halo 账户操作!
# 创建用户目录
mkdir -p ~/.halo2
cd ~/.halo2
# 创建并编辑配置文件
vim ~/.halo2/application.yaml
示例配置文件(使用 MySQL):
server:
# 运行端口
port: 8090
spring:
# 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
r2dbc:
url: r2dbc:mysql://192.168.0.113:3306/halo_db
username: halo
password: 12345678
sql:
init:
mode: always
# 需要配合 r2dbc 的配置进行改动
platform: mysql
halo:
# 工作目录位置
work-dir: ${user.home}/.halo2
# 外部访问地址
external-url: http://localhost:8090
# 附件映射配置,通常用于迁移场景
attachment:
resource-mappings:
- pathPattern: /upload/**
locations:
- migrate-from-1.x
保存后退出。
数据库配置说明:
参数名 | 描述 |
---|---|
spring.r2dbc.url |
数据库连接地址,详细可查阅下方的 配置对应关系 |
spring.r2dbc.username |
数据库用户名 |
spring.r2dbc.password |
数据库密码 |
spring.sql.init.platform |
数据库平台名称,支持 postgresql 、mysql 、mariadb 、h2 |
配置对应关系:
链接方式 | 链接地址格式 | spring.sql.init.platform |
---|---|---|
PostgreSQL | r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE} |
postgresql |
MySQL | r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE} |
mysql |
MariaDB | r2dbc:pool:mariadb://{HOST}:{PORT}/{DATABASE} |
mariadb |
H2 Database | r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE |
h2 |
信息
- HOST:数据库服务地址,如
localhost
- PORT:数据库服务端口,如
3306
- DATABASE:数据库名称,如
halo
,需要提前创建
如果需要域名访问,记得在bind9修改域名解析!!!
3.3 运行 Halo
测试运行 Halo JAR 包:
当前使用的是 halo 账户操作!
cd ~/app && java -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/
访问 http://服务器IP:8090
,应看到 Halo 初始化界面。如果正常,继续按照提示初始化,初始化完成后,停止进程(Ctrl+C)。
3.4 配置进程管理
登录 root 账户
su -
为了让 Halo 在后台运行并开机自启,推荐使用 systemd
。
当前使用的是 root 账户操作!
# 创建 systemd 服务文件
vim /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=/usr/local/jdk21/bin/java -server -Xms512m -Xmx1g -jar /home/halo/app/halo.jar --spring.config.additional-location=optional:file:/home/halo/.halo2/
ExecStop=/bin/kill -s TERM $MAINPID
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
保存后,启用服务:
当前使用的是 root 账户操作!
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 启动 Halo 服务
sudo systemctl start halo
# 设置开机自启
sudo systemctl enable halo
# 检查服务状态
sudo systemctl status halo
4. 配置 Nginx 反向代理
4.1 安装 Nginx
当前使用的是 root 账户操作!
sudo apt install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
4.2 配置 Nginx
创建 Nginx 配置文件:
sudo nano /etc/nginx/conf.d/halo.conf
添加以下内容(如果你有变更,替换 halo.mxdx.com
为实际域名):
upstream halo {
server 127.0.0.1:8090;
}
server {
listen 80;
listen [::]:80;
server_name halo.mxdx.com;
client_max_body_size 1024m;
location / {
proxy_pass http://halo;
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;
}
}
启用配置:
sudo nginx -t # 检查配置语法
sudo systemctl reload nginx
现在访问 http://halo.mxdx.com
应看到 Halo 页面。
记得在本地DNS服务器添加新的A记录!才能用域名访问!且物理机记得改为本地DNS服务器的地址(在控制面板修改)
6. 初始化 Halo
通过浏览器访问 http://halo.mxdx.com
,成功访问。