文档首页> 技术教程> 用 Docker 部署 Halo 博客

用 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 要留足余量;附件上传失败查宿主机目录属主和磁盘剩余空间。装完在后台把时区、评论开关这些基础项过一遍,就可以写第一篇了。