菜单

通过JAR包部署HALO

发布于 2025年04月28日

依赖检查#

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

  1. Java 环境,目前 Halo 最低需要 JRE 17 的环境。

  2. 数据库(任一) ◦ MySQL 5.7+ ◦ MariaDB ◦ PostgreSQL 由于 Linux 发行版本的差异以及包管理器的不同,此文档不会涉及到如何安装 Java 环境以及数据库,建议查阅对应依赖的官方文档进行安装。

一、centos7安装java17

1、下载java

下载地址:Java Downloads | Oracle

需要登录一下,然后将rpm包下载到本地计算机

2、将jdk-17.0.14_linux-x64_bin.rpm上传到服务器

3、安装

yum install -y ./jdk-17.0.14_linux-x64_bin.rpm

环境变量‌:通过仓库或 RPM 安装无需手动配置,系统自动设置路径;手动安装需在 /etc/profile 添加 JAVA_HOMEPATH ‌。

4、验证

java version

二、centos7安装mysql

下载mysql

MySQL :: Download MySQL Community Server (Archived Versions)

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar

安装

启动

systemctl enable mysqld --now

查找临时密码**‌

MySQL 首次启动时会生成一个临时 root 密码,保存在日志文件中:

sudo grep 'temporary password' /var/log/mysqld.log
​

‌1. 初始化 mysql安全配置‌

​
# 运行安全初始化脚本(设置 root 密码、删除匿名用户等)
sudo mysql_secure_installation

交互步骤‌:

  • 输入上一步获取的密码

  • 设置 root 密码(输入并确认)

  • 移除匿名用户(选 Y

  • 禁止 root 远程登录(选 Y,生产环境建议)

  • 删除测试数据库(选 Y

  • 重新加载权限表(选 Y


‌**2. 登录 mysql

bashCopy Code# 使用 root 用户登录(输入上一步设置的密码)
mysql -u root -p

‌3. 创建新数据库‌

-- 创建数据库(将 `halo` 替换为你的数据库名)
create database halo character set utf8mb4 collate utf8mb4_bin;

‌4. 创建用户并授权‌

-- 创建用户(将 `halo` 和 `halo@DB123` 替换为实际值)
CREATE USER 'halo'@'localhost' IDENTIFIED BY 'halo@DB123';
​
-- 授予用户对数据库的完全权限(按需调整权限)
GRANT ALL PRIVILEGES ON halo.* TO 'halo'@'localhost';
​
-- 刷新权限
FLUSH PRIVILEGES;
​
-- 退出 mysql
EXIT;

‌5. 验证操作‌

# 使用新用户登录并检查数据库
mysql -u halo -p -e "SHOW DATABASES;"

输出应包含你创建的数据库 `halo。


‌6. 其他关键命令‌

设置 mysql开机自启

sudo systemctl enable mysql

三、使用JAR文件部署HALO

官网文档使用 JAR 文件部署 | Halo 文档

1、创建新的系统用户

创建一个名为 halo 的用户(名字可以随意)

useradd -m halo

为 halo 用户创建密码

passwd halo

登录到 halo 账户

su - halo

2、创建存放运行包的目录,这里以 ~/app 为例

mkdir ~/app && cd ~/app

3、下载运行包

Halo 资源下载

wget https://dl.halo.run/release/halo-2.20.12.jar -O halo.jar

4、创建 工作目录

mkdir ~/.halo2 && cd ~/.halo2

5、创建 Halo 配置文件

vim application.yaml

将以下内容复制到 application.yaml 中,根据下面的配置说明进行配置。配置完成之后,保存即可。

server:
  # 运行端口
  port: 80
spring:
  # 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
  r2dbc:
    url: r2dbc:pool:mysql://localhost:3306/halo
    username: halo
    password: halo@DB123
    init:
      mode: always
      # 需要配合 r2dbc 的配置进行改动
      platform: mysql
halo:
  # 工作目录位置
  work-dir: /home/halo/.halo2
  # 外部访问地址
  external-url: http://localhost:80
  # 附件映射配置,通常用于迁移场景
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x
MariaDB r2dbc:pool:mariadb://{HOST}:{PORT}/{DATABASE}

6、测试运行 Halo

cd ~/app && java -Dfile.encoding=UTF-8 -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/
java -Dfile.encoding=UTF-8 -jar halo.jar --spring.config.additional-location=optional:file:/home/halo/.halo2/

7、如果没有观察到异常日志,即可尝试访问 Halo

打开 http://ip:端口号 即可跳转到初始化页面。

四、将HALO jar配置成服务运行

1、退出 halo 账户,登录到 root 账户

2、创建 halo.service 文件

vim /etc/systemd/system/halo.service

将以下内容复制到 halo.service 中,根据下面的配置说明进行配置。

[Unit]
Description=Halo Service
Documentation=https://docs.halo.run
After=network-online.target
Wants=network-online.target
​
[Service]
Type=simple
#User=USER
#普通用户端口只能1024以上
#User=halo
User=root
ExecStart=/usr/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
  • JAR_PATH:Halo 运行包的绝对路径,例如 /home/halo/app/halo.jar,注意:此路径不支持 ~ 符号。

  • USER:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo,修改为你创建的用户名称即可。反之请删除 User=USER

提示:请确保 /usr/bin/java 是正确无误的。建议将 ExecStart 中的命令复制出来运行一下,保证命令有效。

3、重新加载 systemd

systemctl daemon-reload

4、运行服务

systemctl start halo

5、在系统启动时启动服务

systemctl enable halo

6、最后,你可以通过下面的命令查看服务日志:

journalctl -n 20 -u halo

五、原站恢复

备份与恢复 | Halo 文档

将在原站备份的数据直接在web console界面上传完成站点恢复

六、版本升级

以下是官方维护的下载地址:

  1. https://download.halo.run

  2. https://github.com/halo-dev/halo/releases

#pro版
wget https://dl.halo.run/release/halo-pro-2.20.18.jar -O /home/halo/app/halo.jar
#2.20.19-beta.2 推出halo app公测
wget https://dl.halo.run/release/halo-pro-2.20.19-beta.2.jar -O /home/halo/app/halo.jar

七、配置nginx+SSL

1、安装nginx

#安装nginx
sudo yum install nginx                     # CentOS/RHEL

2、申请SLL证书

sudo yum install -y epel-release  # 安装EPEL仓库
sudo yum repolist                # 确认仓库已启用
sudo yum install -y certbot # 安装Certbot
sudo yum install -y python3-certbot-nginx  # 安装插件python2-ertbot-nginx
#注意事项:运行certbot前需临时关闭占用 80 和 443 端口的服务(如 Nginx):
sudo certbot --nginx -d rongtech.top      # 自动获取并配置证书 证书会自动续期,并修改 Nginx 配置为 HTTPS。
# 自动获取证书没有成功,改用这个命令手动获取
sudo certbot certonly --standalone -d blog.rongtech.top --email wu_fu_rong@163.com  --agree-tos   --non-interactive  
Your certificate and chain have been saved at:
   /etc/letsencrypt/live/blog.rongtech.top/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/blog.rongtech.top/privkey.pem

3、配置nginx

#配置反向代理•
#编辑 Nginx 配置文件(如 /etc/nginx/conf.d/blog-app.conf):
## 3、配置Nginx
server {
    listen 443 ssl;
    server_name blog.rongtech.top;
​
    ssl_certificate /etc/letsencrypt/live/blog.rongtech.top/fullchain.pem;      # 证书路径
    ssl_certificate_key /etc/letsencrypt/live/blog.rongtech.top/privkey.pem;   # 私钥路径
​
    location / {
        proxy_pass http://localhost:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
​
# 强制HTTP跳转到HTTPS
server {
    listen 80;
    server_name blog.rongtech.top;
    return 301 https://$host$request_uri;
}
#启动nginx,测试访问网站

还可以通过阿里云申请免费证书

数字证书管理服务管理控制台

/etc/ssl/nginx/blog.rongtech.top.key
/etc/ssl/nginx/blog.rongtech.top.pem
#配置反向代理•
#编辑 Nginx 配置文件(如 /etc/nginx/conf.d/blog-app.conf):
## 3、配置Nginx
server {
    listen 443 ssl;
    server_name blog.rongtech.top;
​
    ssl_certificate /etc/ssl/nginx/blog.rongtech.top.pem;      # 证书路径
    ssl_certificate_key /etc/ssl/nginx/blog.rongtech.top.key;   # 私钥路径
​
    location / {
        proxy_pass http://localhost:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
​
# 强制HTTP跳转到HTTPS
server {
    listen 80;
    server_name blog.rongtech.top;
    return 301 https://$host$request_uri;
}

八、附录,安装mariadb

#

yum install -y mariadb mariadb-server

‌1. 初始化 MariaDB 安全配置‌

bashCopy Code# 启动 MariaDB 服务
sudo systemctl start mariadb
​
# 运行安全初始化脚本(设置 root 密码、删除匿名用户等)
sudo mysql_secure_installation

交互步骤‌:

  • 输入当前 root 密码(首次安装为空,直接回车)

  • 设置 root 密码(输入并确认)

  • 移除匿名用户(选 Y

  • 禁止 root 远程登录(选 Y,生产环境建议)

  • 删除测试数据库(选 Y

  • 重新加载权限表(选 Y


‌2. 登录 MariaDB‌

bashCopy Code# 使用 root 用户登录(输入上一步设置的密码)
mysql -u root -p

‌3. 创建新数据库‌

-- 创建数据库(将 `halo` 替换为你的数据库名)
create database halo character set utf8mb4 collate utf8mb4_bin;

‌4. 创建用户并授权‌

-- 创建用户(将 `halo` 和 `halodbpassword` 替换为实际值)
CREATE USER 'halo'@'localhost' IDENTIFIED BY 'halodbpassword';
​
-- 授予用户对数据库的完全权限(按需调整权限)
GRANT ALL PRIVILEGES ON halo.* TO 'halo'@'localhost';
​
-- 刷新权限
FLUSH PRIVILEGES;
​
-- 退出 MariaDB
EXIT;

‌5. 验证操作‌

# 使用新用户登录并检查数据库
mysql -u halo -p -e "SHOW DATABASES;"

输出应包含你创建的数据库 halodb


‌6. 其他关键命令‌

设置 MariaDB 开机自启

sudo systemctl enable mariadb



评论