Halo博客搭建指南

快速开始

Fat Jar

下载最新的 Halo 运行包:

curl -L https://github.com/halo-dev/halo/releases/download/v1.5.3/halo-1.5.3.jar --output halo.jar

其他地址

java -jar halo.jar

Docker

docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=always halohub/halo:1.5.3

详细部署文档请查阅:

项目部署

环境检查

目前运行 Halo 的最低依赖要求为 JRE 11,请务必确保在进行下面操作之前已经正确安装了 JRE。

目前介绍两种 Linux 发行版的安装方式,均为 OpenJRE,不推荐 Oracle 版本。

CentOS

sudo yum install java-11-openjdk -y

检查版本:

java -version

如果输出以下类似内容即代表成功

openjdk version "11.0.10" 2021-01-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.10+9-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9-LTS, mixed mode, sharing)

Ubuntu/Debian

sudo apt-get install openjdk-11-jre -y

检查版本:

java -version

如果输出以下类似内容即代表成功

openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment (build 11.0.10+9-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.20.04, mixed mode)

下载项目

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

mkdir ~/app && cd ~/app

下载运行包

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

如果下载速度不理想,可以 在这里 选择其他下载地址。

创建 工作目录

mkdir ~/.halo && cd ~/.halo

下载示例配置文件到 工作目录

wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml 

编辑配置文件,配置数据库或者端口等,如需配置请参考 配置参考

vim application.yaml

测试运行 Halo

cd ~/app && java -jar halo.jar

如看到类似以下日志输出,则代表启动成功。

run.halo.app.listener.StartedListener    : Halo started at         http://127.0.0.1:8090
run.halo.app.listener.StartedListener    : Halo admin started at   http://127.0.0.1:8090/admin
run.halo.app.listener.StartedListener    : Halo has started successfully!

打开 http://ip:端口号 即可看到安装引导界面。

运行包

指 Halo 构建所产生的 Jar 包,后缀为 .jar。可能与其他网站应用有所区别的是,Halo 仅仅只有这一个文件。而且所有数据统一保存在下面所说的 工作目录

工作目录

指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 .halo 的文件夹,绝对路径为 ~/.halo。由于这个工作目录是固定的,所以上面所说的 运行包不限制所存放的位置,里面通常包含下列目录或文件:

  1. db:存放 H2 Database 的物理文件,如果您使用 MySQL 数据库,那么不会存在这个目录。
  2. templates/themes:里面包含用户所下载的主题。
  3. static:相当于网站的根目录。
  4. logs:运行日志目录。
  5. upload:附件目录。
  6. application.yaml:配置文件。

作为服务运行

下载 Halo 官方的 halo.service 模板

wget https://dl.halo.run/config/halo.service -O /etc/systemd/system/halo.service

修改 halo.service

vim /etc/systemd/system/halo.service
  • YOUR_JAR_PATH:Halo 运行包的绝对路径,例如 /home/halo/app/halo.jar,注意:此路径不支持 ~ 符号。
  • USER:运行 Halo 的系统用户,如果有创建新的用户来运行 Halo,修改为你创建的用户名称即可。反之请删除 User=USER
[Unit]
Description=Halo Service
Documentation=https://halo.run
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=USER
ExecStart=/usr/bin/java -server -Xms256m -Xmx256m -jar YOUR_JAR_PATH
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog

StandError=inherit

[Install]
WantedBy=multi-user.target

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

重新加载 systemd

systemctl daemon-reload

运行服务

systemctl start halo

在系统启动时启动服务

systemctl enable halo

您可以查看服务日志检查启动状态

journalctl -n 20 -u halo

反向代理

Nginx

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

!> Nginx 默认的 client_max_body_size 配置大小为 1m,可能会导致你在 Halo 后台上传文件被 Nginx 限制,所以此示例配置文件加上了 client_max_body_size 1024m; 这行配置。当然,1024m 可根据你的需要自行修改。

使用宝塔面板

使用 Supervisor 托管 Halo 进程

打开 Supervisor 管理器的设置,点击 添加守护进程 按钮。

需要填写的表单信息如下:

  • 名称:随意
  • 启动用户:如果您创建了用于运行 Halo 的用户,则选择您创建的用户即可。否则选择默认的 root。
  • 运行目录:运行包的存放目录,按照实际情况填写,需要保证你所选的目录包含运行包。
  • 启动命令java -server -Xms256m -Xmx256m -jar halo.jar

填写完成之后点击 确定 按钮即可。

添加站点并配置 Nginx

点击左侧的 网站 菜单项,点击 添加站点 按钮。

需要填写的表单信息如下:

  • 域名:填写您已经解析到当前服务器公网 IP 的域名。
  • PHP版本:纯静态

填写完成之后点击 提交 按钮即可。

设置 SSL

在配置反向代理之前,我们推荐先设置好 SSL 证书。

  • 可选择 宝塔 SSL 或者 Let's Encrypt 进行证书申请。
  • 需要开启右上角的 强制 HTTPS

修改配置文件

在根节点添加:

upstream halo {
    server 127.0.0.1:8090;
}
其中的 8090 为 Halo 的运行端口,请按需修改。

在 server 节点添加:

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

修改 server 节点中的 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 节点:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    proxy_pass http://halo;
    expires      30d;
    error_log /dev/null;
    access_log off;
}

修改 server 节点中的 location ~ .*\.(js|css)?$ 节点:

location ~ .*\.(js|css)?$
{
    proxy_pass http://halo;
    expires      12h;
    error_log /dev/null;
    access_log off; 
}

完整配置文件示例(仅包含关键部分):

upstream halo {
    server 127.0.0.1:8090;
}
server
{
    ...
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        proxy_pass http://halo;
        expires      30d;
        error_log /dev/null;
        access_log off;
    }
    
    location ~ .*\.(js|css)?$
    {
        proxy_pass http://halo;
        expires      12h;
        error_log /dev/null;
        access_log off; 
    }
    
    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;
    }

    ...
}

随后点击保存即可。如果配置不生效,请重载 Nginx 或者 重启 Nginx。

最后,访问域名即可进行 Halo 的初始化。

最后修改:2022 年 05 月 22 日
如果觉得我的文章对你有用,请随意赞赏