安装 Halo 及反代配置

0.前语

     最近 Kevin 在安装博客程序时选用了 Halo , 并在群中提到 Halo 的一些特性. 在此之前虽然也看见过一些关于 Halo 的文章但没详细了解过, 他说过之后去了解了下, 原来可以 Docker 一键部署.

0.1 Halo 的搭建环境

  • 0.1.1 系统环境: DockerJava(JDK)
  • 0.1.2 数据库: H2 DatabaseMySQL
    • 这里演示在 Docker & MySQL 下的安装过程

1.拉取 Halo 镜像

  • 目前最新的镜像 tag 是 1.4.7 故拉取 1.4.7
  • docker pull halohub/halo:1.4.7
  • 拉取 Halo 镜像

2.创建Halo工作文件夹&编辑 Halo 配置信息

  • 2.1 创建 Halo 工作文件夹
  • mkdir -p /www/wwwroot/halo_ora && cd /www/wwwroot/halo_ora
  • 2.2 编辑 Halo 配置信息
    • 2.2.1 下载基础配置文件至 Halo 工作文件夹内.
    • curl -o application.yaml https://dl.halo.run/config/application-template.yaml 本来是用 wget 的, 结果在提交时被 WAF 拦截了, 故切换为 curl .
    • 配置文件样例
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      server:
      # 服务端口, 这里指的是容器内的端口不用改.
      port: 8090
      # 启用 gzip 压缩, 如果使用 nginx 或 apache 可以不开启.
      compression:
      enabled: false
      spring:
      datasource:
      # H2 和 MySQL 二选一, 不用的注释掉或者直接删除即可.

      # H2 数据库配置信息.
      # driver-class-name: org.h2.Driver
      # H2 数据库文件在容器内的位置
      # url: jdbc:h2:file:~/.halo/db/halo
      # username: admin
      # password: 123456

      # MySQL 数据库配置信息.
      # MySQL 驱动不用更改
      driver-class-name: com.mysql.cj.jdbc.Driver
      # 后面会将 MySQL 容器链接到 Halo 容器故而直接写 db 了, 如果不是可以直接写 MySQL 的地址.
      # halodb 是数据库名称, 注意数据库版本应为 5.7+ , 字符集与排序规则分别为 utf8mb4 和 utf8mb4_bin , 存储类型为 InnoDB
      # 若时区与所在时区不同, 可以更改.
      url: jdbc:mysql://db:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
      # 数据库的用户名与密码
      username: root
      password: 123456

      # H2 数据库控制台配置信息.
      h2:
      console:
      settings:
      web-allow-others: false
      # 控制台位置
      path: /h2-console
      # 是否启用
      enabled: false
      halo:
      # 管理客户端位置, 如为 admin, 则管理地址为 http://example.com/admin
      admin-path: admin

      # 缓存类型, memory 为内存, level 为本地缓存
      cache: memory

3.启动Halo容器

  • docker run -it -d --name halo -p 127.0.0.1:8090:8090 -v /www/wwwroot/halo_ora:/root/.halo --restart=unless-stopped halohub/halo:1.4.7
  • 注: 这里监听的是本地回环地址的 8090 端口, 大家可自行更改. 如直接对外服务, 可删除本地回环地址.
  • 创建文件夹 & 编辑 Halo 配置 以及启动容器 创建文件夹 & 编辑 Halo 配置 以及启动容器

4.配置 NginxCaddy 反向代理

  • 4.1 Nginx 配置样例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    upstream halo {
    server 127.0.0.1:8090;
    }
    server {
    listen 80;
    listen [::]:80;
    server_name www.example.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;
    }
    }
  • 4.2 Caddy 1.x 配置样例

    1
    2
    3
    4
    5
    6
    7
    https://www.youdomain.com {
    gzip
    tls your@email.com
    proxy / 127.0.0.1:8090 {
    transparent
    }
    }
  • 4.3 Caddy 2.x 配置样例

    1
    2
    3
    4
    5
    www.youdomain.com

    encode gzip

    reverse_proxy 127.0.0.1:8090
  • 4.4 Nginx 在宝塔中的配置样例

    • 路径: 站点设置->反向代理->添加代理
    •  Nginx 在宝塔中的配置样例

5. 安装完成

  • 5.1 按照自己的信息填进去就行了
  • 安装完成

6. 结束语

  • 作为一个博客程序, 很轻量且安装步骤非常简短, 这点要给开发者大大的赞!
  • 响应速度非常快, 在查看部分加载流程之后发现大量使用了CDN服务, 对我来说这点要比隔壁的WordPress要轻便很多, 许多静态资源直接引用就行了而不必引入到项目目录中.
  • 最让我喜欢的还是支持MarkDown编辑, 文章直接在本地编辑好发布就行了而不必再到后台中调整布局. 作为一个WordPress十年老用户, 有的时候真的是恨铁不成钢.
  • 这两天经过优化之后, 除了动态内容之外, 一些静态资源我全部放置到了CDN上, 对于一台在美西的服务器来说, 能做的优化, 真的挺少的了.
  • 优化和后台配置我可能过两天再更文章, 也可能偷个懒不更, 看大家的是否有这个需要了.