1 前言

本文章将从本地部署 Halo 博客并暴露到公网,再将 Halo 数据迁移到云服务器进行部署,并做好相关配置,分两章进行说明。

2 本地部署 Halo

2.1 安装 Docker Compose

安装 Docker Compose 可查看官方文档:https://docs.docker.com/compose/install/

确保你已经安装好了 Docker 与 Docker Compose,可以通过以下命令检查版本:

 docker -v
 docker-compose -v

2.2 一键部署 Halo 博客服务

2.2.1 创建配置文件

在终端中创建一个用于部署 Halo 的独立目录:

 mkdir halo
 cd halo
 vim docker-compose.yaml

然后在 docker-compose.yaml 文件中粘贴以下内容:

 version: "3"
 ​
 services:
   halo:
     image: registry.fit2cloud.com/halo/halo:2.21
     restart: on-failure:3
     depends_on:
       halodb:
         condition: service_healthy
     networks:
       halo_network:
     volumes:
       - ./halo2:/root/.halo2
     ports:
       - "8090:8090"
     healthcheck:
       test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
       interval: 30s
       timeout: 5s
       retries: 5
       start_period: 30s
     environment:
       - JVM_OPTS=-Xmx256m -Xms256m
     command:
       - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
       - --spring.r2dbc.username=root
       - --spring.r2dbc.password=o#DwN&JSa56
       - --spring.sql.init.platform=mysql
       - --halo.external-url=http://localhost:8090/
 ​
   halodb:
     image: mysql:8.1.0
     restart: on-failure:3
     networks:
       halo_network:
     command: 
       - --default-authentication-plugin=caching_sha2_password
       - --character-set-server=utf8mb4
       - --collation-server=utf8mb4_general_ci
       - --explicit_defaults_for_timestamp=true
     volumes:
       - ./mysql:/var/lib/mysql
       - ./mysqlBackup:/data/mysqlBackup
     healthcheck:
       test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
       interval: 3s
       retries: 5
       start_period: 30s
     environment:
       - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
       - MYSQL_DATABASE=halo
 ​
 networks:
   halo_network:

2.2.2 启动 Halo 服务

使用以下命令启动服务:

 docker-compose up -d

容器启动后,浏览器访问 http://localhost:8090/ 即可进入 Halo 初始化界面,进行基本的配置后,可以准备下一步操作了。

2.3 通过 Cloudflare 将本地服务暴露到公网

此部分建议使用 Cloudflare Tunnel,免费、无需公网 IP,无需路由器配置端口转发。

首先你需要拥有一个域名,然后才能进行下面的操作。如果是在 CF(Cloudflare)直接购买的域名,那就可以直接使用;否则需要将你的域名托管至 Cloudflare 并确认 DNS 生效。

2.3.1 安装 Cloudflare Tunnel 工具(cloudflared)

前往 https://developers.cloudflare.com/cloudflared/ 下载对应系统版本。

对于 macOS 用户,可使用 Homebrew 安装:

 brew install cloudflared

安装完成后,执行以下命令登录 Cloudflare:

 cloudflared tunnel login

浏览器会弹出 Cloudflare 登录页,授权后返回命令行。

2.3.2 创建并运行 Tunnel

执行以下命令来创建一个 Tunnel:

 cloudflared tunnel create halo-local

然后为其添加一条路由规则(例如使用 blog.example.com 子域名):

 cloudflared tunnel route dns halo-local blog.example.com

注意:你需要将 blog.example.com 替换为自己的域名并提前在 CF DNS 中添加相应记录(可自动添加)。

接着编写配置文件 config.yml

 tunnel: halo-local
 credentials-file: /Users/你的用户名/.cloudflared/halo-local.json
 ​
 ingress:
   - hostname: blog.example.com
     service: http://localhost:8090
   - service: http_status:404

然后运行服务:

 cloudflared tunnel run halo-local

2.3.3 公网访问测试

此时通过浏览器访问:

 https://blog.example.com

你应该能够正常访问本地部署的 Halo 博客服务。

到这里,本地调试并公网访问的配置就已完成,下一章将讲解如何将服务迁移至云服务器并结合 1Panel 进行生产部署。

3 迁移至云服务器

如果你已经在本地运行了一段时间 Halo 博客,并进行了相关配置与博文发布,那么接下来可以将数据迁移至云服务器。

3.1 备份 Halo 数据

登录 Halo 后台管理页面,在左下角点击【备份】按钮,点击“创建备份”后下载生成的 .zip 文件。

注意: 该压缩包不要解压,否则可能会导致恢复失败。

3.2 购买 VPS 并部署 1Panel 面板

选择一台 VPS,建议配置为最低 1 核 CPU + 1G 内存。安装面板前,建议更新系统并确保 curl 已安装。

执行以下命令一键安装 1Panel:

 bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"

安装完成后,终端会输出形如以下的访问信息:

 [1Panel Log]: 请使用您的浏览器访问面板:
 [1Panel Log]: 外部地址:  http://x.x.x.x:24045/your_token
 [1Panel Log]: 面板用户:  your_user
 [1Panel Log]: 面板密码:  your_password

使用浏览器打开该外部地址即可进入面板界面,使用提供的账号密码登录。

注意: 若使用云服务器,请确保安全组已放行上述的端口,每次部署1panel的默认端口都会变化。

image-rHuH.png

3.3 安装 Halo 博客服务

在 1Panel 面板中:

  • 进入「应用商店」

  • 搜索并安装:OpenResty(用于反向代理)

  • 安装 MySQL 8.0 数据库服务

  • 安装 Halo 博客(推荐使用官方镜像)

安装 Halo 时会提示设置端口号(如 8090)及数据库连接信息,请确保填写正确,并记录好服务运行的端口。

3.4 配置反代与 HTTPS

在「网站管理」中:

  1. 点击「创建网站」,选择使用 OpenResty。

  2. 如果你没有证书,可以通过 Cloudflare 实现 HTTPS 访问:

    • 在 Cloudflare 的 DNS 管理中添加 A 记录:

    • 进入「SSL/TLS」设置页,将加密模式调整为「灵活(Flexible)」

  3. 返回 1Panel,选择「一键部署」,在「已安装应用」中选择你部署的 Halo 博客应用:

    • 输入你刚配置的域名(如 blog.domain.com)

    • 填写 Halo 应用运行的端口(如 8090)

    • 注意:因为使用 Cloudflare 提供的 HTTPS 加密,此处不启用 1Panel 的 HTTPS 配置。

  4. 点击「保存部署」,稍等片刻,OpenResty 即完成反代设置。

  5. 在浏览器中访问 https://blog.domain.com,应能正常加载博客主页。

至此,你已成功将 Halo 博客部署至云服务器,支持 HTTPS 访问。

3.5 恢复备份

在博客部署完成后,如果你从本地 Halo 环境中导出了备份(.zip 文件),可通过以下步骤完成恢复:

  1. 调整 OpenResty 配置,放宽上传限制:

    • 进入 1Panel 的「网站管理」页面,选择你的博客站点,点击「配置修改」

    • 选择性能调整修改最大上传文件大小。

    • 保存配置后,重启 OpenResty 服务。

  2. 登录 Halo 后台管理页面,导航到左下角的「备份与恢复」模块。

  3. 点击「恢复备份」,上传你在本地下载的 .zip 文件,等待系统处理完成。

注意: 确保上传的文件是未解压的原始备份文件,否则可能恢复失败。

恢复完成后,博客内容、配置和插件等会自动覆盖当前数据,达到本地向云端平滑迁移的目的。

4 博客配置与美化建议

Halo 博客部署完成后,可以进一步通过以下方式进行优化和美化:

4.1 主题管理

  • 进入后台「外观 > 主题」,可以选择官方主题或上传自定义主题。

  • 推荐主题:Dream,界面现代、响应迅速、支持丰富组件。

  • 若使用自定义主题,上传 .zip 文件后点击「启用」即可生效。

4.2 插件系统

  • 进入「插件市场」可直接安装各类插件。

  • 实用插件推荐:

    • RSS 订阅插件:便于内容分发

    • 评论管理插件(Twikoo、Valine)

    • 数据备份插件:自动化备份

    • 统计分析插件(如 Busuanzi)

4.3 博主信息与个性化配置

  • 在「设置 > 基本信息」中填写站点名称、描述、备案号等

  • 设置「关于我」信息、社交链接

  • 设置博客图标(favicon)与网站 logo,可提升辨识度

4.4 页面与菜单管理

  • 使用「页面管理」功能可以添加如友链页、留言页等

  • 设置菜单栏顺序和跳转链接

  • 可使用 Markdown 编辑页面内容,自由度高

4.5 自动备份与升级

  • 定期点击「备份管理 > 新建备份」,并下载保存

  • 也可以部署定时脚本实现自动备份(如结合 cron + rclone)

  • 可在后台或镜像源检查更新,进行版本升级


至此,你已经完成从本地部署、云端迁移、反代 HTTPS 到主题美化和插件配置的完整 Halo 博客建设之旅。希望本教程对你有所帮助,愿你写作愉快,博客长存!