Halo_Deployment

2

使用 Jar 文件部署 halo 博客系统

使用 JAR 文件部署 | Halo 文档

需求环境需求

# 更新软件包列表
sudo apt-get update 
# Java 17 以上
sudo apt-get -y install openjdk-17-jdk
java --version
# Mysql 5.7 以上
sudo apt-get -y install mysql-server
systemctl status mysql
# Nignx 作为反向代理域名用
sudo apt-get -y install nginx
systemctl status nginx

准备依赖

数据库准备

mysql -uroot -p
# 使用root账户登录
CREATE DATABASE IF NOT EXISTS halodb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
# 创建halo数据库
CREATE USER 'halouser'@'localhost' identified with mysql_native_password by 'halopassword';
# 创建halo数据库专用用户
GRANT ALL PRIVILEGES ON halodb.* to 'halouser'@'localhost';
# 赋予用户当地访问权限
FLUSH PRIVILEGES;
# 刷新
# ----------------------
show databases; # 确认数据库存在
show grants for halouser@localhost; # 确认权限

启动用户准备

useradd -m halo
passwd halo
su - halo
mkdir ~/app && cd ~/app
wget https://dl.halo.run/release/halo-2.13.0.jar -O halo.jar
mkdir ~/.halo2 && cd ~/.halo2
touch /home/halo/.halo2/application.yaml

准备配置文件

server:
  # 运行端口
  port: 8080
spring:
  # 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
  r2dbc:
    url: r2dbc:pool:mysql://localhost:3306/halodb
    username: halouser
    password: halopassword
  sql:
    init:
      mode: always
      # 需要配合 r2dbc 的配置进行改动
      platform: mysql
halo:
  caches:
    page:
      # 是否禁用页面缓存
      disabled: true
  # 工作目录位置
  work-dir: ${user.home}/.halo2
  # 外部访问地址
  external-url: https://www.fumi.live
  # 附件映射配置,通常用于迁移场景
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x

测试启动

su - halo
cd ~/app && java -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/

image-20240328230459829

服务化

shell指令

whoami #root
touch /etc/systemd/system/halo.service
systemctl daemon-reload
systemctl start halo
systemctl enable halo
journalctl -n 20 -u halo

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/bin/java -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

版本升级

service halo stop
wget https://dl.halo.run/release/halo-2.13.0.jar -O /home/halo/app/halo.jar
service halo start

反向代理

shell执行

nginx -t
nginx -s reload
touch /etc/nginx/conf.d/server.conf

配置文件追加

upstream halo {
  server 127.0.0.1:8080;
}
server {
  listen 80;
  listen [::]:80;
  server_name www.fumi.live;
  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;
  }
}

SSL配置

免费证书申请

image-20240328235136279

登录控制台追加解析记录

image-20240328235359283

验证服务器

image-20240328235509510

签发成功后如图所示

image-20240328235556001

根据服务器下载对应证书格式

image-20240328235703699

配置文件修改

upstream halo {
  server 127.0.0.1:8080;
}

server {
  listen 443 ssl;
  #listen [::]:443;
  server_name www.fumi.live;

  ssl_certificate      /home/halo/cert/fumi.live.pem;
  ssl_certificate_key  /home/halo/cert/fumi.live.key;  
  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout  5m;
  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers  on;  

  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;
  }
}

页面测试

image-20240329001627168