部署 Halo 项目

1. 环境准备

确保服务器已连接网络,具备 root 权限或 sudo 权限。

确保有一台数据库服务器上已经安装部署了MySQL并开放远程连接。

确保有一台DNS服务器上已经安装Bind9并添加了A记录。

依赖检查

在开始之前,需要确保服务器已经满足以下条件:

  1. Java环境,版本要求:
    • 2.21 以上版本:JRE 21
    • 2.20 及以下版本:JRE 17
  2. 数据库(任一)
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 数据库平台名称,支持 postgresqlmysqlmariadbh2

配置对应关系:

链接方式 链接地址格式 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)。

image

image image

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服务器的地址(在控制面板修改)

image

image

6. 初始化 Halo

通过浏览器访问 http://halo.mxdx.com ,成功访问。

image

梦葉樱 all right reserved,powered by Gitbook该文件最后修改时间: 2025-07-24 10:08:57

results matching ""

    No results matching ""