跳到主要内容

主机资讯与使用指南

Halo 部署教程:Docker Compose、PostgreSQL 与博客域名

用社区版 Halo 和 PostgreSQL 建立博客,设置持久化目录、访问域名和数据库密码。

选择 Halo 社区版并准备域名

Halo 的社区版和付费版使用不同镜像。本文采用社区版和 PostgreSQL,先准备 Docker、Compose 和一个博客域名,再建立 ~/halo 目录。域名通过 Caddy 或现有面板指向本机 8090 端口。

把数据库密码写入 .env

在 ~/halo 建立 .env,填写自选强密码与最终 HTTPS 地址。下面的占位内容都需要替换。

HALO_DB_PASSWORD=替换为独立强密码
HALO_URL=https://blog.example.com

将 .env 的读取权限限制给当前管理用户,不放进公开仓库。密码变量同时用于数据库和 Halo 连接参数。

保存 compose.yaml

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.26
    restart: unless-stopped
    depends_on:
      halodb:
        condition: service_healthy
    ports:
      - "127.0.0.1:8090:8090"
    volumes:
      - ./halo2:/root/.halo2
    command:
      - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
      - --spring.r2dbc.username=halo
      - --spring.r2dbc.password=${HALO_DB_PASSWORD}
      - --spring.sql.init.platform=postgresql
      - --halo.external-url=${HALO_URL}
  halodb:
    image: postgres:15
    restart: unless-stopped
    environment:
      POSTGRES_USER: halo
      POSTGRES_DB: halo
      POSTGRES_PASSWORD: ${HALO_DB_PASSWORD}
    volumes:
      - ./db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U halo -d halo"]
      interval: 10s
      timeout: 5s
      retries: 5

2.26 是本文采用的 Halo 版本系列,安装其他版本时查看对应发行说明。PostgreSQL 使用 15 系列,已有数据的机器不能直接更换数据库主版本。

启动后完成博客初始化

cd ~/halo
sudo docker compose config --quiet
sudo docker compose up -d
sudo docker compose logs --tail=100 halo

反向代理上游填 127.0.0.1:8090,域名地址与 HALO_URL 保持一致。通过域名打开初始化页面,建立管理员和站点信息,再发布一篇文章、上传图片检查访问。

保存程序目录和数据库

halo2 保存 Halo 文件,db 保存 PostgreSQL 数据。数据库备份采用 PostgreSQL 的导出或一致性备份方式;运行中复制整个 db 目录不能代替可靠备份。更新前记录镜像版本,保存环境配置和数据。

相关阅读