模版概览
这个编排文件主要做了三件事:
启动 Halo 容器(版本为 2.25.4,后续使用要记得更新版本号,我直接写 latest 会默认拉下来老版本的)。
连接外部 PostgreSQL 数据库(没有把数据库放在同一个容器里,而是通过 1Panel 的网络直接连接;如果脱离 1Panel 环境,需将
networks部分去掉或改为自定义 bridge 网络,并修改数据库地址为实际 IP/ 主机名)。映射持久化数据(所有配置和附件都保存在宿主机的
./halo2目录中)。
version: "3.8"
services:
halo:
#这里使用的是社区版,不是pro版,预装的东西少,感觉比pro版流畅一点
image: halohub/halo:2.25.4
container_name: halo
restart: always
environment:
- JVM_OPTS=-Xmx128m -Xms128m
- TZ=Asia/Shanghai
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
networks:
- 1panel-network
// [!code fold:start]
command:
# PostgreSQL 连接配置
- --spring.r2dbc.driver=io.asyncer.r2dbc.mysql.MySqlConnectionFactoryProvider
# 此处的1Panel-postgresql-kIqo需要替换成postgresql的实际地址
- --spring.r2dbc.url=r2dbc:postgresql://1Panel-postgresql-kIqo:5432/halo2
- --spring.r2dbc.username=halo2
- --spring.r2dbc.password=你的数据库密码
- --spring.sql.init.platform=postgresql
- --halo.external-url=https://www.gittime.cn
- --server.port=8090
networks:
1panel-network:
external: true细节解释
1. 内存控制(JVM_OPTS)
-Xmx128m最大堆内存,-Xms128m初始堆内存 (Xmx>=Xms)128MB 对个人博客足够,避免低配 VPS 内存溢出
访问量大时可适当调高
2. 数据库独立(外部 PostgreSQL)
连接 1Panel 管理的 PostgreSQL 实例,而非内置数据库
容器与数据库解耦,容器挂掉数据不丢
生产环境推荐使用独立数据库
注意:连接串中的
1Panel-postgresql-kIqo是 1Panel 默认网络名称,重建后需更新
3. 网络模式(1panel-network)
external: true表示使用已存在的 1Panel 桥接网络方便不同容器间通过容器名通信
4. 外部访问地址
--halo.external-url=https://www.gittime.cn影响站点地图、RSS 和链接复制更换域名或启用 HTTPS 时务必同步更新
使用场景与注意事项
适用场景:
初次部署:
1Panel 应用商店安装后,替换 compose 文件做精细化配置
直接使用 docker 部署,需要改一些参数(主要就是网络)
迁移服务器:打包
halo2目录 + compose 文件,新服务器docker compose up -d即可恢复
注意事项:
密码明文:
spring.r2dbc.password直接写在文件中。生产环境建议用环境变量或 Docker Secret 注入,或确保文件仅限本机访问端口映射:
8090:8090默认端口,反向代理时确保端口未被占用