用 Docker 部署 Halo 博客
发布时间:2025-11-27 18:20       
更新时间:2025-11-27 21:31
Halo 是国人维护的开源博客系统,官方支持的部署方式里,Docker(容器引擎)是最省心的一种:环境依赖打包在镜像里,升级就是换镜像。前提是服务器已安装 Docker 和 docker compose 插件。
一、compose 文件
建目录并创建 docker-compose.yml:
mkdir -p /opt/halo && cd /opt/halo
services:
halo:
image: halohub/halo:2.20
container_name: halo
restart: on-failure:3
ports:
- "8090:8090"
volumes:
- ./halo2:/root/.halo2
挂载目录 ./halo2 是博客的全部家当:内置数据库、主题、上传的附件都在里面,备份这个目录等于备份整个站点,路径换成绝对路径也可以。镜像 tag 写具体版本号,别用 latest,升级节奏自己掌握。
二、启动与初始化
docker compose up -d 启动,首次拉取镜像视网络情况几分钟。docker compose logs -f 观察日志,出现启动完成信息后,浏览器访问 http://192.0.2.10:8090/console 进入初始化向导,填站点名称和管理员账号密码。主题和插件在后台图形界面里安装,不再需要命令行。管理员密码务必记牢,Halo 找回密码依赖站点邮件配置,初期没配邮箱就只能进数据目录处理。
三、升级方式
升级前先停容器并备份数据目录:
docker compose down
tar czf halo2-$(date +%F).tar.gz ./halo2
然后把 compose 文件里的镜像版本号改成新版本,重新 docker compose up -d,数据原样保留。回退就是把版本号改回去,标准的容器化升级路径。跨大版本升级前多备一份数据,官方说明里的迁移步骤照着走,升级后清一次浏览器缓存再看前台。
四、对外服务
8090 端口不建议直接对公网开放,前面挂一层 Nginx 反向代理(把外部请求转发给内部应用),绑定域名并配置 HTTPS 证书,证书续期交给 certbot 定时任务即可,访问体验和安全都更好。
常见问题集中在两处:容器反复重启多半是内存不足,日志里反复出现相关字样就是最直接的证据,1G 内存的机器跑 Halo 要留足余量;附件上传失败查宿主机目录属主和磁盘剩余空间。装完在后台把时区、评论开关这些基础项过一遍,就可以写第一篇了。