使用 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