前言(碎碎念)

这并不是我第一个搭建的博客,理论上来讲是第2个,经过多次挑选我还是选择了halo来搭建。

halo在所有的博客程序里面不算最轻也不算太大,各种设置上来讲也更加友好。

当然缺点也肯定是有的,就目前来说生态不算是太好,插件与主题不算太多。

前一个小窝放弃原因也是非常现实的,服务器有点贵(当时还在存钱组自己的服务器),阿里云的免费一过期我就选择了停止博客(同时忘记备份数据)。

好在现在有了自己的服务器,域名与备案还在就又把博客搭建上了(毕竟一个月网费都100)。

这篇文章记录并总结的我从头搭建现在博客的过程,如果需要关于halo更详细的教程可以在文章下留言~

准备

一台服务器

如果80/443不可用可能需要第二台或者前往其他问题的隐性URL处

一个域名

如果服务器是国内的则域名需要备案!

SSH连接软件

我这里使用的Xshell

halo搭建

都准备好之后就准备搭建吧~

宝塔安装

其实也可以不需要宝塔,但是我懒而且设备性能足够(13700k)所以就用的宝塔啦~

这里使用宝塔官网的一键脚本就行了(这里的是Ubuntu/Deepin安装脚本

wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec

需要其他系统的点击这里前往官网复制

安装好后进入宝塔面板选择安装nginx和MySQL(如果想使用其他数据库也行)就行了

JAR搭建

halo的搭建方式很多但本篇文章主要记录我搭建过程所以使用jar也只介绍jar

点击下载 在图中位置找到最新版本

创建程序运行用户

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

    useradd -m halo
  2. 为 halo 用户创建密码

    passwd halo
  3. 登录到 halo 账户

    su - halo

创建初始运行环境

  1. 创建存放运行包的目录,这里以 ~/app 为例(推荐就在用户文件夹里面懒得改设置)

    mkdir ~/app && cd ~/app
  2. 然后将下载的jar放入app文件夹中(懒得打了直接用宝塔的文件管理移)

  3. 然后创建工作目录

    vim application.yaml
  4. 然后将以下内容设置完后粘贴进去

server:
  # 运行端口
  port: 8090 #halo端口
spring:
  # 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
  r2dbc:
    url: r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE #下方表格处更改
    username: admin
    password: 123456
  sql:
    init:
      mode: always
      # 需要配合 r2dbc 的配置进行改动
      platform: h2  #mysql,mariadb,postgresql
halo:
  caches:
    page:
      # 是否禁用页面缓存
      disabled: true
  # 工作目录位置
  work-dir: ${user.home}/.halo2
  # 外部访问地址
  external-url: http://localhost:8090
  # 附件映射配置,通常用于迁移场景
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x

PostgreSQL

r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE}

MySQL

r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE}

MariaDB

r2dbc:pool:mariadb://{HOST}:{PORT}/{DATABASE}

H2 Database

r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE

  • HOST:数据库服务地址,如 localhost

  • PORT:数据库服务端口,如 3306

  • DATABASE:数据库名称,如 halo,需要提前创建

记得创建自己的数据库噢

测试运行 Halo

运行Halo

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

退出Halo

如果没有报错且访问正常IP+端口

Ctrl+c退出

设置为系统服务

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

    还是推荐不使用root运行

    exit
    
  2. 创建 halo.service 文件

    vim /etc/systemd/system/halo.service
    

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

    /etc/systemd/system/halo.service

    [Unit]
    Description=Halo Service
    Documentation=https://docs.halo.run
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=simple
    User=USER
    ExecStart=/usr/bin/java -server -Xms256m -Xmx256m -jar JAR_PATH --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

返代理设置

使用宝塔8.x及以上版本设置及其简单

NGINX

  1. 创建网站红框处可不填的哟

  2. 反代理设置1:Halo 运行包的绝对路径,例如 /home/halo/app/halo.jar,注意:此路径不支持 ~ 符号。 2$host

  3. SSL设置 使用宝塔自带的免费申请就行啦 如果需要使用自己申请的证书 将KEY与PEM填入就行。

其他问题

隐性URL设置

相信没有80/443端口并且囊中羞涩的朋友一般都选择使用隐性URL来隐藏端口

但是halo默认是不允许使用iframe的所以使用隐性URL的朋友肯定遇见了拒绝连接的情况

这个问题也困扰了我很久我调试过很久的NGINX也发现现在能找到的教程都过时了如下

X-Frame-Options的值有三个:

(1)DENY — 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。

(2)SAMEORIGIN — 表示该页面可以在相同域名页面的 frame 中展示。

(3)ALLOW-FROM https://example.com/ — 表示该页面可以在指定来源的 frame 中展示。

ALLOW-FROM已经被删除了

不过好在我在halo的猫猫(github)上找到了

设置如下

  command: --halo.security.frame-options.disabled=true
  security:
      frame-options:
        disabled: true
        mode: sameorigin

添加在

server:
  # 运行端口
  port: 8090 #halo端口
spring:
  # 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
  r2dbc:
    url: r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE #下方表格处更改
    username: admin
    password: 123456
  sql:
    init:
      mode: always
      # 需要配合 r2dbc 的配置进行改动
      platform: h2  #mysql,mariadb,postgresql
halo:
  #这
  
  #里
  caches:
    page:
      # 是否禁用页面缓存
      disabled: true
  # 工作目录位置
  work-dir: ${user.home}/.halo2
  # 外部访问地址
  external-url: http://localhost:8090
  # 附件映射配置,通常用于迁移场景
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x