本文最后更新于 2023-10-24,文章最后在90天前更新,内容可能已经过时。

前言

官方文档 https://docs.halo.run/

本教程使用Docker-Compose+PGSQL部署

Docker安装

根据文档进行安装

官方文档1 https://docs.docker.com/engine/install/

官方文档2 https://docs.docker.com/compose/install/

Docker-Compose部署

新建docker-compose.yml

官方文档 https://docs.halo.run/getting-started/install/docker-compose

模板:根据注释自行修改

version: "3"

services:
  halo:
    image: halohub/halo:2.9.2 # 版本号(不能使用latest标签拉取2.x版本镜像)
    container_name: halo
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./:/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:postgresql://halodb/halo
      - --spring.r2dbc.username=halo
      # PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致,建议修改
      - --spring.r2dbc.password=openpostgresql
      - --spring.sql.init.platform=postgresql
      # 外部访问地址,填入为Halo博客准备的URL。可留空。
      - --halo.external-url=https://blog.stevenw.cc/
  halodb:
    image: postgres:latest
    container_name: halodb
    restart: on-failure:3
    networks:
      halo_network:
    volumes:
      - ./db:/var/lib/postgresql/data # 存储卷,建议根据情况修改
    ports:
      - "5432:5432"
    healthcheck:
      test: [ "CMD", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      - POSTGRES_PASSWORD=openpostgresql # PostgreSQL 的密码,建议修改
      - POSTGRES_USER=halo
      - POSTGRES_DB=halo
      - PGUSER=halo

networks:
  halo_network:

在项目目录(即.yml文件所处目录)运行Docker-compose。

docker-compose up -d

服务器安全组要放开对应的端口(8090)

登陆后台

进入Halo容器日志,找到初始账密并复制

通过<ip>:<port>来访问博客,Halo会自动跳转到初始化界面

访问后台路径: http(s)://ip:8090/console

更新

备份

手动备份

进入存储卷(或自定义目录),压缩.halo2文件夹

自动备份

访问Halo控制台,再侧栏找到备份与恢复,点击新增备份

docker-compose.yml

修改文件中镜像的版本号

...
    image: halohub/halo:2.9.2 # 版本号
...

重新拉取镜像并运行