加载中…

文章背景图

【教程】在 1Panel 中部署 Halo 博客:从安装到上线

2026-03-12
12
-
- 分钟

前言

最近想重新搭一个博客,目标其实很明确:尽量少折腾,尽快上线。

如果完全走命令行,当然也不是不行,但对我来说,部署博客这件事没必要从第一步就把时间花在各种环境细节上。最后我选了 Halo + 1Panel 这套组合:Halo 负责博客本身,1Panel 负责部署和运维,整体体验比我预想中顺手不少。

这篇文章就记录一下,我是怎么在 1Panel 里把 Halo 跑起来的。

如果你也想搭一个自己的博客,希望过程尽量简单一些,这篇应该能给你一个比较清晰的参考。


为什么是 Halo?

选博客系统这件事,说到底还是看你想要什么。

我自己比较在意的点其实不复杂:

  • 后台别太难用

  • 默认界面别太老气

  • 后续能换主题、装插件

  • 部署不要太折腾

  • 适合长期写内容,而不是只适合“装一次”

Halo 给我的感觉是比较现代,也比较克制。它不是那种功能堆得很满、但实际体验很粗糙的系统,后台观感和写作体验都还不错。对个人博客来说,这一点挺重要的——毕竟你以后会经常打开它,而不只是装完就不管。

如果你想要的是一个能尽快开始写作,同时也保留一定扩展性的博客系统,Halo 是个挺不错的选择。


为什么用 1Panel 来部署?

理由很简单:省心。

1Panel 这类现代化面板的意义,不是替代所有命令行,而是把那些重复、机械、容易出错的部署和运维动作,尽量做得更直观一些。

比如这些事情,用 1Panel 来做会方便很多:

  • 安装和管理应用

  • 查看容器运行状态

  • 看日志排错

  • 配置网站和反向代理

  • 申请 HTTPS 证书

对于博客这种长期在线、偶尔还要维护一下的服务来说,这种可视化管理体验其实很实用。

所以这套组合可以简单理解为:

  • Halo:负责内容和博客后台

  • 1Panel:负责部署、代理、证书和日常管理

两者配合起来,刚好够用。


部署前需要准备什么?

开始之前,建议先准备好下面这些东西。

1. 一台云服务器

配置不用太高,普通轻量服务器基本就能跑,比如:

  • 2 核 CPU

  • 2GB 内存

  • 40GB 磁盘

如果只是个人博客、访问量不大,这样的配置一般足够了。

2. 装好 1Panel

这篇文章默认你已经装好了 1Panel。

如果还没装,可以先按官方文档完成初始化,再继续下面的步骤。

3. 一个域名

虽然没有域名也能先通过 IP 访问,但如果你想把博客正式跑起来,域名还是很有必要准备的。

比如可以用这样的子域名:

  • blog.gnix807.cn (以我的域名为例)

后面不管是做 HTTPS、绑定站点,还是日常访问,都会方便很多。

4. 放行必要端口

至少确认以下端口可以正常使用:

  • 80

  • 443

  • 8090

其中 8090 一般用于前期测试 Halo 服务是否正常;正式上线后,对外通常主要就是 80443


方式一:通过 1Panel 应用商店安装 Halo

1Panel 应用商店里已经自带 Halo,这通常是最省事的做法,我也更推荐优先用这个方式。

第一步:登录 1Panel 后台

先进入 1Panel 管理界面。

75525604-64c7-4044-8315-f8db2fc9c74c.png
1Panel的管理界面

左侧菜单里后面主要会用到这几个模块:

  • 应用商店

  • 容器

  • 网站

第二步:搜索 Halo

打开 应用商店,直接搜索 Halo

搜到对应应用,点击进入安装页面。

ece3fc46-4c53-451a-b950-da3e430dcb95.png

这一步没什么难度,主要就是确认当前环境里已经提供了可直接安装的版本。

第三步:填写安装参数

安装页面通常会让你填写一些基础参数,比如:

  • 应用名称,如 halo

  • 访问端口,如 8090

  • 数据库服务,通常包含数据库名称、用户、密码

  • 镜像版本,一般默认为最新版

  • 重启策略,一般保持默认即可

36102bfd-c622-4e18-a197-87f03b27ecc5.png

这里最值得重视的是 数据库

博客的数据不是一次性的,后续文章、配置、上传的附件,都依赖它保存。如果这里没处理好,后面容器重建时很容易出问题。

此外,如勾选高级设置里的 端口外部访问,就不必专门去创建防火墙端口放行。

第四步:开始安装并等待启动

确认参数没问题后,直接点击安装。

接下来 1Panel 会自动完成镜像拉取、容器创建和服务启动。

安装完成后,可以到容器管理页面里确认 Halo 是否处于运行状态。只要状态正常,基本就说明服务已经起来了。

3b08aca1-8ff9-45da-96b4-9e6bfb70629b.png

第五步:先用 IP + 端口测试访问

在做域名和 HTTPS 之前,我建议先直接访问:

http://你的服务器IP:8090

这一步主要是为了先确认一件事:Halo 本身有没有正常运行

如果这一步就访问不到,那问题通常出在容器、端口或者防火墙;如果这一步能打开,但域名访问不行,那再去排查反向代理和解析就会更清晰。

这个顺序很重要,能少走很多弯路。


方式二:使用 Docker Compose 在 1Panel 中部署

如果你更习惯自己控制配置,那也可以直接用 Docker Compose。

下面这份配置是一个比较基础、也比较常见的例子(来自官方文档):

version: "3"

services:
  halo:
    image: registry.fit2cloud.com/halo/halo-pro:2.22
    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 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
      - JVM_OPTS=-Xmx256m -Xms256m
    command:
      - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
      - --spring.r2dbc.username=halo
      # PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=openpostgresql
      - --spring.sql.init.platform=postgresql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/
  halodb:
    image: postgres:15.4
    restart: on-failure:3
    networks:
      halo_network:
    volumes:
      - ./db:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      - POSTGRES_PASSWORD=openpostgresql
      - POSTGRES_USER=halo
      - POSTGRES_DB=halo
      - PGUSER=halo

networks:
  halo_network:

⚠️注意:

此示例使用的数据库为PostgreSQL,且数据库容器默认没有设置端口映射,如果需要在容器外部访问数据库,可以自行在 halodb 服务中添加端口映射,PostgreSQL 的端口为 5432

这份配置的核心点主要有几个:

  • 使用 Halo 官方镜像

  • 将容器的 8090 端口映射到宿主机

  • 把 Halo 数据目录挂载到本地

  • 设置容器自动重启

在 1Panel 里,你可以通过容器编排功能新建一个项目,把这份配置粘贴进去,然后启动服务。

启动完成后,同样先访问:

http://你的服务器IP:8090

只要页面能打开,就说明部署已经成功了一大半。


第一次打开 Halo:初始化站点

第一次访问 Halo 时,通常会进入初始化页面。

setup-2.20-d35ad81d4781cee8aec18ad54e111831.png
首次访问时,根据提示完成站点初始化配置。


这里需要设置一些基础信息,比如:

  • 网站标题

  • 管理员用户名

  • 管理员邮箱

  • 登录密码

填写完成之后,Halo 就会创建你的博客站点,随后可以进入后台。

到这一步,其实博客已经能用了,只是访问方式还比较原始,通常还是 IP + 端口。


配置域名访问

如果你希望博客像一个正式的网站,那下一步就该把域名接上了。

第一步:添加域名解析

到你的域名管理后台,添加一条 A 记录,把子域名解析到服务器公网 IP。

66e5601a-48ab-4cc5-a6ec-4e83e40e83f5.png
以Cloudflare为例,将博客子域名解析到服务器公网 IP

比如:

  • 主机记录:blog (随你想要什么前缀)

  • 记录值:你的服务器公网 IP

配置完成后,等解析生效,就可以准备在 1Panel 里绑定这个域名。

第二步:在 1Panel 中创建网站并做反向代理

打开 1Panel 的 网站 管理,新建一个站点,填写你的域名,比如:

blog.gnix807.cn (以我的域名为例)

80b65b71-37dd-45c9-b2b0-51a4934b8d76.png
把域名请求转发到 Halo 对应的本地端口

然后把请求反向代理到 Halo 所在端口,一般填:

127.0.0.1:8090

这一步的本质是让 1Panel 接收外部访问,再把请求转发给 Halo 容器。
配好之后,你就可以尝试直接通过域名访问博客。


配置 HTTPS

既然已经用了域名,HTTPS 基本就可以顺手一起配掉。
这不只是为了安全,更多也是为了避免浏览器的“不安全”提示影响访问体验。

在 1Panel 里,一般可以直接申请 Let’s Encrypt 免费证书。流程通常是:

  1. 打开 网站 选项卡

  2. 点击 证书

  3. 创建Acme帐户

  4. 申请证书

  5. 启用 HTTPS

2164b4cb-5507-4de1-9c48-bd762bde4776.png
通过 Let’s Encrypt 免费证书快速开启 HTTPS

配置完成之后,你的博客地址就能从:

http://blog.gnix807.cn

变成:

https://blog.gnix807.cn

到这里,整个博客基本就算正式上线了。

a43ab027-dd21-452f-ab92-89b45f11db90.png
以我的博客为例,部署完成后,就可以通过域名正式访问博客了

部署过程中比较容易踩的坑

实际操作里,我觉得下面这几个问题最常见。

1. 端口没有放行

如果你发现页面打不开,先别急着怀疑 Halo 本身。
很多时候只是服务器安全组或防火墙没有放行对应端口。

优先检查:

  • 80

  • 443

  • 8090

2. 没有做数据持久化

这是比“启动失败”更隐蔽、也更危险的问题。

如果没有把 Halo 的数据目录挂载到宿主机,容器一旦删除、重建,文章和配置就可能一起丢失。博客这种服务最重要的其实就是数据,所以数据目录一定要提前规划好。

3. 域名解析还没生效

有时候你会发现配置看起来都没问题,但域名还是打不开。
这种情况很常见,尤其是在刚添加 DNS 记录之后。

先等等,确认解析已经生效,再继续排查其他问题。

4. HTTPS 证书申请失败

证书申请失败时,通常不是证书本身的问题,而是访问链路里有一步没通。

可以依次检查:

  • 域名是否已经正确解析到服务器

  • 80 端口是否开放

  • 网站是否能从公网正常访问

  • 反向代理配置是否正确

按这个顺序排查,通常会快很多。


部署完成后,建议顺手做的几件事

等 Halo 跑起来之后,我建议别急着关掉后台,可以顺手把下面这些事情也做一下:

  • 修改站点标题和基础信息

  • 挑一个自己喜欢的主题

  • 开启 HTTPS

  • 备份数据目录

  • 了解附件和图片的存储方式

  • 补充 SEO 信息

  • 记好数据目录所在位置

尤其是备份,真的越早做越好。
博客一开始文章不多时,很多人会觉得无所谓;但只要你开始持续写,备份就会变成一件很现实的事情。


最后

如果你问我,在 1Panel 中部署 Halo 值不值得折腾,我的答案是值得。

它不属于那种特别“硬核”的方案,不需要你从第一步开始就和一堆底层配置反复拉扯;但它也不是那种完全封闭、后面不方便扩展的托管型方案。
对想搭个人博客的人来说,这个平衡点其实挺舒服的:

  • 上手门槛不高

  • 部署效率不错

  • 后续维护也方便

  • 想继续折腾时还有空间

很多时候,搭博客最难的不是技术,而是你总在比较方案、反复收藏教程,却一直没有真正开始。
所以比起继续犹豫,我更建议你先把站点搭起来。

先上线,再慢慢把它变成你喜欢的样子。

上一篇 【习作】树人
下一篇 没有了
评论交流

文章目录