博客部署

Halo2 部署链路

把 Halo2 应用、数据库、数据目录和公开入口拆开管理,方便发布和排障。

官方参考

官方文档推荐生产部署优先使用 Docker Compose,并根据实际情况选择 PostgreSQL、MySQL 或外部数据库。

架构概览

一个通用的生产链路可以按访问路径理解:

访客 -> 域名/CDN -> 反向代理 -> Halo 容器 -> 数据库

各层职责如下:

层级作用常见检查点
Docker Compose编排 Halo 和数据库容器状态、网络、挂载目录
Halo提供博客和后台服务健康检查、日志、插件
数据库保存文章、配置和用户数据连接状态、备份、磁盘空间
反向代理提供 HTTPS 和域名访问证书、转发头、上游地址
CDN 或托管平台对外访问入口回源状态、缓存、部署状态

项目目录

官方示例使用 ~/halo 作为部署目录,也可以换成团队约定的路径:

~/halo

主要文件和目录:

路径用途
docker-compose.yamlHalo 和数据库编排
.env可选,保存端口、域名、数据库密码等变量
halo2/Halo 应用数据目录
db/数据库数据目录
backups/手动备份目录

Compose 服务

常见 compose 中至少包含两个核心服务:

  • halo:Halo2 应用,容器内端口通常为 8090
  • halodb:数据库服务,可以选择 PostgreSQL 或 MySQL。

环境变量只记录名称,不在文档中写真实值。下面是常见示例:

变量说明
HALO_EXTERNAL_URLHalo 对外访问地址,例如 https://blog.example.com/
SPRING_R2DBC_URLHalo 连接数据库的 R2DBC 地址
SPRING_R2DBC_USERNAME数据库用户名
SPRING_R2DBC_PASSWORD数据库密码
SPRING_SQL_INIT_PLATFORM数据库平台,例如 mysqlpostgresql

启动服务

进入部署目录:

mkdir -p ~/halo
cd ~/halo

创建或调整 docker-compose.yml 后,先检查 compose 配置:

docker compose config

启动服务:

docker compose up -d

查看容器状态:

docker compose ps

访问检查

先检查本机端口是否响应:

curl -I --max-time 10 http://127.0.0.1:8090/

如果已配置反向代理和域名,再检查公开入口:

curl -I --max-time 10 https://blog.example.com/

如果本机检查失败,优先看日志:

docker compose logs --tail=120 halo
docker compose logs --tail=120 halodb

反向代理

如果使用 Nginx、Caddy 或托管平台做公开入口,至少确认:

  • 上游地址指向 127.0.0.1:8090 或 compose 网络中的 halo:8090
  • HostX-Forwarded-ProtoX-Forwarded-For 等请求头正确传递。
  • HTTPS 证书有效。
  • 上传附件大小限制符合实际需求。
  • HALO_EXTERNAL_URL 与公开域名一致。

发布后确认

每次调整后至少确认:

  • docker compose ps 中 Halo 和数据库都处于运行状态。
  • 本机 Halo 页面可访问。
  • 公开域名可以访问。
  • 后台登录页可以打开。
  • 新建或编辑文章后数据能正常保存。
  • 日志没有持续报错。

如果修改了托管平台或 CDN 配置,要等待生产部署完成后再验证公开域名。