本文使用的环境
电脑:Windows10
服务器 :超频2.1版Debian,扩容2+16的随身WiFi,Linux内核5.15

Halo有分1.x与2.x两个不同的大版本,2.x目前只能通过Docker部署

本文以单设备与Debian系统下使用Docker-Compose部署Halo2.x版本为主,且只推荐通过Docker-Compose部署使用2.x版本
使用的数据库是MySQL
若要使用随身WiFi搭建,需将随身WiFi扩容至2G运存,最好挂载扩展盘,或者可以选择使用2~3个随身WiFi组成集群的方式搭建,如将Halo、Nginx、MySQL分开部署,或Halo与Nginx一起部署,MySQL另外部署,可通过内网ip连接

1、准备工作

  1. SSH 工具下载链接:https://www.123pan.com/s/DGj7Vv-xSai.html 提取码:6q1k
  2. 准备一部已安装Docker、Docker-Compose(根据情况选择)的设备/云主机;若未安装Docker或者Docker-Compose,请移步安装 Docker、Docker Compose,此文章可做参考

2、官方提供的两种简单部署方式

2.1、只使用Docker部署

  1. 创建容器

    docker run \
      -it -d \
      --name halo \
      -p 8090:8090 \
      -v ~/.halo2:/root/.halo2 \
      halohub/halo:2.4 \
      --halo.external-url=http://localhost:8090/ \
      --halo.security.initializer.superadminusername=admin \
      --halo.security.initializer.superadminpassword=P@88w0rd  
    

    注意:此命令默认使用自带的 H2 Database 数据库,如需使用其他数据库,请使用 Docker Compose 部署

  2. 参数说明

    • -it:开启输入功能并连接伪终端
    • -d:后台运行容器
    • –name:为容器指定一个名称
    • -p:端口映射,格式为 主机(宿主)端口:容器端口 ,可在 application.yaml 配置。
    • -v:工作目录映射。形式为:-v 宿主机路径:/root/.halo2,后者不能修改。
  3. 变量

参数名 描述
spring.r2dbc.url 数据库连接地址,详细可查阅下方的 数据库配置
spring.r2dbc.username 数据库用户名
spring.r2dbc.password 数据库密码
spring.sql.init.platform 数据库平台名称,支持 postgresqlmysqlh2,需要与 SPRING_R2DBC_URL 对应
halo.external-url 外部访问链接,如果需要在公网访问,需要配置为实际访问地址
halo.security.initializer.superadminusername 初始超级管理员用户名
halo.security.initializer.superadminpassword 初始超级管理员密码
  1. 数据库配置
数据库链接方式 链接地址格式 SPRING_SQL_INIT_PLATFORM
PostgreSQL r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE} postgresql
MySQL r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE}
mysql
H2 Database r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE
h2
  1. 升级版本
    1. 拉取新版本镜像

      docker pull halohub/halo:2.4
      
    2. 停止运行中的容器

      docker stop halo
      docker rm halo
      
    3. 备份数据(重要)

      cp -r ~/.halo2 ~/halo2.archive
      

      需要注意的是,halo2.archive 文件名不一定要根据此文档命名,这里仅仅是个示例

    4. 更新 Halo
      修改版本号后,按照最初安装的方式,重新创建容器即可。

      halohub/halo:2.4 \

2.2、通过 1Panel 部署

  1. 安装 MySQL 应用
    1. 在安装 Halo 之前需要先安装 MySQL 数据库 ,击 1Panel 左侧导航菜单进入应用商店,选择其中的 MySQL 数据库进行安装
    2. 在应用详情页选择 MySQL 8.0.30 版本进行安装
    3. 在弹出的侧边栏中依次确认 MySQL 应用的名称、root用户密码及服务端口后,点击确认按钮开始安装
    4. 开始安装后页面自动跳转到已安装应用列表,等待刚刚安装的 MySQL 应用变为已启动状态
  2. 安装Halo应用
    1. MySQL 安装成功后,再次进入应用商店应用列表,选择其中的 Halo 应用进行安装
    2. 在应用详情页选择最新的 Halo 版本进行安装
    3. 在弹出的侧边栏中依次确认 Halo 应用的名称,并在数据库服务中下拉选择上一步创建的数据库应用,确认其他参数信息后,点击确认按钮进行安装
  3. 参数说明
    • 名称:要创建的 Halo 应用的名称;
    • 数据库服务:Halo 应用使用的数据库应用,支持下拉选择已安装的数据库应用,1Panel 会自动配置 Halo 使用该数据库;
    • 数据库名:Halo 应用使用的数据库名称,1Panel 会在选中的数据库中自动创建这个数据库;
    • 数据库用户:Halo 应用使用的数据库用户名,1Panel 会在选中的数据库中自动创建这个用户,并添加对应的数据库授权;
    • 数据库用户密码:Halo 应用使用的数据库用户密码,1Panel 会在选中的数据库中自动为上一步创建的用户配置该密码;
    • 超级管理员用户名:Halo 应用初始化创建的超级管理员用户名;
    • 超级管理员密码:Halo 应用初始化创建的超级管理员密码;
    • 外部访问地址:Halo 应用的最终访问地址,如果有为 Halo 规划域名,需要配置为域名格式,例如 http://halo.example.com;否则配置为 http://服务器IP:PORT,例如 http://172.16.10.154:8090
    • 端口:Halo 应用的服务端口;
  4. 等待安装的 Halo 应用变为已启动状态

3、使用Docker Compose 部署(推荐)

本文使用的数据库是MySQL,若使用其他数据库请参考官方文档

本文提供本人使用的配置文件,稍作修改即可使用
配置文件https://www.123pan.com/s/DGj7Vv-Oiai.html 提取码:4T76

3.1、创建容器组

  1. 在系统任意位置创建一个文件夹,本文以 ~/halo 为例

    注意:后续操作中,Halo 产生的所有数据都会保存在这个目录,请妥善保存。

    mkdir halo && cd halo
    
  2. 创建 docker-compose.yaml
    vim docker-compose.yaml
    
  3. 编写docker-compose.yaml配置文件
    
    services:
      halo:
        image: halohub/halo:2.4.3
        container_name: halo
        restart: on-failure:3
        depends_on:
          halodb:
            condition: service_healthy
        networks:
          halo_network:
        volumes:
          - ./halo:/root/.halo2
        ports:
          - "8090:8090"
        healthcheck:
          test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
          interval: 30s
          timeout: 5s
          retries: 5
          start_period: 30s
        command:
          - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
          - --spring.r2dbc.username=root
          # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
          - --spring.r2dbc.password=123456
          - --spring.sql.init.platform=mysql
          # 外部访问地址,我的服务器为8.130.97.145,此处需要修改为你自己的服务器或虚拟机 ip
          - --halo.external-url=http://8.130.97.145:80/
          # - --halo.external-url=http://blog.moyuan.asia/
          # 初始化的超级管理员用户名
          - --halo.security.initializer.superadminusername=LSD
          # 初始化的超级管理员密码
          - --halo.security.initializer.superadminpassword=123456
    
      halodb:
        image: mysql:8.0.31
        container_name: halodb
        restart: on-failure:3
        networks:
          halo_network:
        command:
          - --default-authentication-plugin=mysql_native_password
          - --character-set-server=utf8mb4
          - --collation-server=utf8mb4_general_ci
          - --explicit_defaults_for_timestamp=true
        volumes:
          - ./mysql:/var/lib/mysql
          - ./mysqlBackup:/data/mysqlBackup
        ports:
          - "3306:3306"
        healthcheck:
          test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
          interval: 3s
          retries: 5
          start_period: 30s
        environment:
          # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
          - MYSQL_ROOT_PASSWORD=123456
          - MYSQL_DATABASE=halo
    
      halonginx: # 服务名称,用户自定义
        image: nginx:1.23.4  # 镜像版本
        container_name: halonginx
        # 链接到其它容器,能在 nginx.conf 反向代理配置时使用
        links:
          - halo
        networks:
          halo_network:
        ports:
          - 80:80  # 暴露端口
        volumes: # 挂载
          - /halo/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
        privileged: true # 这个必须要,解决nginx的文件调用的权限问题
    		
    	networks:
    	  halo_network:
    
    

3.2、 反向代理

本文以Nginx为例,若使用其他反向代理请参考官方文档

  1. 创建Nginx配置存放目录
    sudo  mkdir -p /halo/nginx/conf/
    
  2. 编写Nginx配置
    sudo vim /halo/nginx/conf/nginx.conf
    
    #user  root;
    error_log  /var/log/nginx/error.log notice;
    worker_processes  1;
    
    pid        /var/run/nginx.pid;
    
    events {
      worker_connections  1024;
    }
    http {
      include       mime.types;
      default_type  application/octet-stream;
      sendfile        on;
      keepalive_timeout  65;
      # 设置上传文件的最大值
      client_max_body_size 256m;
    
      upstream blog {
        # 使用容器服务名
    	server halo:8090;
      }
    
      server {
          listen       80;
          # 可进行域名绑定
          server_name  localhost;
          location / {
              # 设置反向代理的地址(实际是请求转发)
              proxy_pass http://blog;
              # 设置HTTP请求头
              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;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   html;
          }
      }
    }
    
    
  3. 运行docker-compose.yaml配置文件
    1. 进入 halo 目录
      cd /halo
      
    2. 运行docker-compose.yaml
      sudo docker compose up -d
      

4、更新版本

  1. 进入配置文件所在目录,并停止运行中的容器组

    cd ~/halo && docker compose down
    
  2. 备份数据(可选)

    cp -r ./halo ~/halo.archive
    

    需要注意的是,halo.archive 文件名不一定要根据此文档命名,这里仅仅是个示例

  3. 更新 Halo 服务
    修改 docker-compose.yaml 中配置的镜像版本

    image: halohub/halo:2.4.3
    

    更新镜像

    docker compose pull halo
    

    运行docker-compose.yaml

    sudo docker compose up -d