ithuang
ithuang
发布于 2025-05-18 / 2 阅读
0

使用 JAR 文件部署halo

使用 JAR 文件部署halo

1. 服务器初始化

1.1 创建普通用户并授权 sudo

adduser halo              # 设置密码
usermod -aG sudo halo     # 加入 sudo 组

测试:

su - halo
sudo whoami   # 应返回 root

1.2 禁止 root 远程登录

sudo vi /etc/ssh/sshd_config
# 修改 PermitRootLogin no
sudo systemctl restart sshd

1.3 配置安全组

在阿里云控制台的安全组入方向放行:

  • 22 (SSH)
  • 80 (HTTP)
  • 443 (HTTPS)
  • 8090 (初始测试端口,上线后可关闭)

1.4 安装Java21

sudo apt update
sudo apt install -y openjdk-21-jdk

验证:

java -version

2. 安装 PostgreSQL 并初始化

2.1Ubuntu 22.04 自带 PostgreSQL 14,可以选择安装 16:

sudo apt update
sudo apt install -y wget gnupg lsb-release
# 添加官方源
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt install -y postgresql-16

2. 2 初始化数据库集群

安装完成后,需要先初始化数据库集群:

sudo pg_ctlcluster 16 main start

2.3 启动并设置开机自启

sudo systemctl enable postgresql --now

检查状态:

sudo systemctl status postgresql

3. 初始化数据库用户和数据库(为 Halo 准备)

Halo 需要连接 PostgreSQL,你可以提前创建好数据库和用户。

3.1 切换到 postgres 系统用户

sudo -u postgres psql

3.2 在 psql 终端中执行以下 SQL

-- 创建 halo 用户(请设置安全密码)
CREATE USER halo WITH PASSWORD '你的强密码';

-- 创建 halo 数据库,并指定所有者为 halo 用户
CREATE DATABASE halo OWNER halo;

-- 授予 halo 用户对数据库的全部权限
GRANT ALL PRIVILEGES ON DATABASE halo TO halo;

-- 退出 psql
\q

4. 下载halo的jar包并安装

4.1安装

1.登录到 halo 账户

su - halo

2.这里以 ~/app 为例并下载jar包

mkdir /home/halo/app && cd /home/halo/app

3.下载运行包

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

4.创建 工作目录

mkdir halo2

5.创建 Halo 配置文件

vim application.yaml
server:
  # 运行端口
  port: 8090
spring:
  # 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
  r2dbc:
    url: r2dbc:pool:postgresql://127.0.0.1:5432/halo
    username: halo
    password: Pgsql@666
  sql:
    init:
      mode: always
      # 需要配合 r2dbc 的配置进行改动
      platform: postgresql
halo:
  # 工作目录位置
  work-dir: /home/halo/app/halo2
  # 外部访问地址 有域名可写域名
  external-url: http://local:8090
  # 附件映射配置,通常用于迁移场景
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x

配置完成之后,保存即可。

6.测试运行 Halo

cd ~/app && java -Dfile.encoding=UTF-8 -jar halo.jar

后台运行(推荐用 nohup,日志重定向)

cd ~/app
nohup java -Dfile.encoding=UTF-8 -jar halo.jar > halo.log 2>&1 &
  • 日志会写入当前目录下的 halo.log,方便后续排查问题。
  • 启动后可以 tail -f halo.log 实时查看日志。

4.2配置作为服务运行

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

如果当前就是 root 账户,请略过此步骤。

exit

2.创建 halo.service 文件

vim /etc/systemd/system/halo.service

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

[Unit]
Description=Halo Service
Documentation=https://docs.halo.run
After=network-online.target postgresql-16.service
Wants=network-online.target

[Service]
Type=simple
User=halo
Group=halo
ExecStart=/usr/bin/java -Dfile.encoding=UTF-8 -server -Xms256m -Xmx256m -jar /home/halo/app/halo.jar
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandardOutput=journal
StandardError=journal
WorkingDirectory=/home/halo/app

[Install]
WantedBy=multi-user.target

3.重新加载 systemd,并启动开机自启

systemctl daemon-reload
systemctl start halo
systemctl enable halo
systemctl status halo

通过下面的命令查看服务日志

journalctl -n 20 -u halo
# 实时查看日志
journalctl -u halo -f

5. 配置 Nginx 反向代理

5.1 安装 Nginx

sudo apt install -y nginx

5.2 创建站点配置文件

sudo vim /etc/nginx/conf.d/halo.conf

写入一个简单的 HTTP 反向代理(稍后再配 SSL):

upstream halo {
  server 127.0.0.1:8090;
}
server {
  listen 80;
  listen [::]:80;
  server_name www.ithuang.me;
  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

5.3 域名解析

在阿里云 DNS 将域名 A 记录指向服务器公网 IP。

6. 获取 SSL 证书(HTTPS)

使用 Certbot 自动配置:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d 你的域名

按照提示输入邮箱,同意协议,并选择自动将 HTTP 重定向到 HTTPS。

Certbot 会自动修改 Nginx 配置,添加 443 监听和证书引用,并设置 301 跳转。

7. 更新 Halo 的外部访问地址

现在网站已经通过 HTTPS 访问,需要修改 application.yaml 中的 external-url:

sudo vi /home/halo/app/application.yaml

将 halo.external-url 改为 https://你的域名。

重启 Halo 使配置生效:

sudo systemctl restart halo

8. 日常维护

  • 查看日志:journalctl -u halo -f
  • 重启服务:sudo systemctl restart halo
  • 停止/启动:sudo systemctl stop/start halo

备份建议

定期备份以下两个目录:

  • /home/halo/app/halo2(附件、主题、插件等)
  • PostgreSQL 数据库导出:sudo -u postgres pg_dump halo > halo_backup.sql