Halo 部署在家庭 NAS 或内网服务器上,没有公网 IP、运营商封 80 端口,外网怎么访问?本文用 ZeroNews 内网穿透,把内网 Halo 站点安全映射为固定 HTTPS 公网地址:无需维护 Nginx / TLS 证书 / 域名,访客无需安装任何客户端。附 Docker 部署 Halo(PostgreSQL + Halo 社区版)、安装 ZeroNews 客户端、添加域名与 HTTPS 隧道的完整实操步骤与避坑建议。
前言
很多朋友都有这样的经历:好不容易用 Halo 把博客或官网搭好了,结果只有自己能打开,发给朋友看,对方却访问不了。卡点往往不是建站本身,而是这三个老问题:
- 家里/公司没有公网 IP,路由器上全是内网地址;
- 就算有公网 IP,运营商通常封禁了 80/443 端口;
- 租一台云服务器吧,又贵,还得自己折腾 Nginx、SSL 证书、域名解析。
其实,想让内网里的 Halo 被外网访问,核心思路就一句话:站点留在内网,用一个安全隧道把流量"送"出去。本文介绍的就是这套方案——用 ZeroNews 内网穿透,把部署在内网(NAS / 小主机 / 内网服务器)的 Halo 映射成一个固定的 HTTPS 公网地址:
- 不需要公网 IP,不碰 80/443 端口;
- 不用自己维护 Nginx、TLS 证书、域名;
- 访客浏览器直接访问,不用装任何客户端软件;
- 站点、主题、附件、数据库全部留在内网,数据不出门。
下面按完整流程走一遍:Docker 部署 Halo → 安装 ZeroNews 客户端 → 添加域名与 HTTPS 隧道 → 验证公网访问 → 更换主题美化站点。
一、Halo 是什么
Halo 是一款强大易用的开源建站工具。个人博客、知识库、企业官网,再到在线商城,都可以落在同一套系统里;主题、插件、附件和评论,也都跑在你自己的机器上——家用 NAS、工作室小主机、公司内网服务器都是很常见的部署环境。
Halo 的安装并不难,难的是**"让外面的人打得开"**。想把内网里的 Halo 博客或官网给别人访问时,卡点多半就是:没有公网 IP、运营商封 80 端口。
二、让内网 Halo 被外网访问:两种方案对比
要实现内网中的 Halo 给外部用户访问,不外乎两种方案:
| 方案 | 站点部署位置 | Nginx / TLS / 域名维护 | 主要成本 | 适用场景 |
| 公有云方式 | 整站部署到公有云 SaaS / 云主机 | 需要自己维护 | 云主机费用较高 | 预算充足、追求极致稳定 |
| 内网穿透方式 | Halo 仍部署在内网 | 不用维护,开箱即用 | 低(免费额度或按需付费) | 家庭 NAS、工作室小主机、内网服务器、个人站点 |
公有云方式:把整站丢进公有云部署,功能上没问题,但你需要维护 nginx/tls/域名,同时面临云主机较高的成本问题。
内网穿透方式:Halo 还是部署在内网,数据留在自己手里,同时不用维护 nginx/tls/域名,简单省事。本文采用的就是这个方案。
三、ZeroNews 内网穿透是什么
ZeroNews 内网穿透(零讯)是一个企业级的安全内网穿透与反向代理平台。简单几分钟,就可以实现企业/个人在无固定公网 IP 的网络环境下,将内网中的 Halo 快速提供为安全稳定的固定 HTTPS 端点暴露到公网。
它的几个关键特点:
- 用户侧零安装:用户端只要有浏览器就可以访问,无需安装任何客户端软件;
- 免运维:不用再维护 nginx、TLS 证书、域名;
- 精确暴露:支持精确发布一个站点或站点下的特定路由,而不是把整机端口裸奔到公网;
- 安全可控:平台支持 IP 白名单、Basic 认证、路由白名单等访问策略。
整体架构如下:Halo 站点与 PostgreSQL 数据库留在企业内网/NAS,ZeroNews Client 以 HTTPS 出站连接云端平台,访客、编辑、合作方都通过 HTTPS 访问公网域名。

四、第一步:Docker 部署 Halo(PostgreSQL + Halo 社区版)
前置条件:一台能跑 Docker 的内网机器(Linux 服务器 / NAS 均可),已安装 Docker 与 docker compose 插件。
4.1 准备目录与 docker-compose.yaml 部署文件
先创建一个工作目录,并在其中添加 docker-compose.yaml 文件:
mkdir -p /opt/halo && cd /opt/halo
docker-compose.yaml 内容如下(PostgreSQL + Halo 社区版,基于 Halo 官方推荐的 compose 配置;请按需修改数据库密码与数据目录):
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.25
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:postgresql://halodb/halo
- --spring.r2dbc.username=halo
- --spring.r2dbc.password=openpostgresql
- --spring.sql.init.platform=postgresql
- --halo.external-url=http://0.0.0.0: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:
4.2 启动 Halo 容器
在 docker-compose.yaml 所在目录执行:
docker compose up -d
等容器启动完成后,在内网浏览器中输入服务器 IP 加 8090 端口(例如 http://192.168.1.100:8090/),打开 Halo 平台:
按向导创建站点与管理员, 然后登录即可。


到这里,Halo 已经在内网跑起来了,下一步就是把它"发布"到公网。
五、第二步:安装 ZeroNews 客户端
5.1 在线安装
登录 ZeroNews 控制台,在"快速开始"页面中,选择 Linux,复制 Linux 的在线安装命令,回到服务器终端执行。
curl -SLk https://download.zeronews.cc/linux/zeronews-install.sh | sudo sh -s install v3bY3nTVB3K7Yaja
安装完成后,终端里应能直接使用 zeronews 命令,即表示客户端已安装成功。
5.2 以系统服务方式后台运行
为了避免终端关闭导致隧道中断,建议按控制台指引把 ZeroNews 客户端注册为系统服务(如 systemd),实现后台常驻与开机自启。
zeronews service start
5.3 确认客户端在线
回到 ZeroNews 控制台的"关联客户端"页面,确认刚才安装的客户端状态为在线,并记下设备名称(后面添加隧道时要绑定它):

六、第三步:添加域名与 HTTPS 隧道
6.1 添加域名
进入控制台的"自定义域名"页面,点击"添加域名",添加一个子域,前缀可以用 arpblog 这类好记的名字:

添加成功后,该域名会显示为"已激活"。
6.2 添加隧道
进入"隧道管理",新建一条映射(添加隧道),参数如下:
| 配置项 | 填写值 |
| 隧道模式 | 标准隧道 |
| 隧道特性 | Raw(默认透传) |
| 隧道协议 | HTTPS |
| 带宽 | 3 Mbps(按需调整) |
| 公网域名 | 选择前面添加好的域名(如 arpblog) |
| 绑定设备 | 前面安装好的客户端 |
| 内网 IP | 127.0.0.1 |
| 内网端口 | 8090 |


HTTPS 隧道创建成功后,你会在隧道列表里拿到一个固定的公网地址,例如 https://arpblog.hn.takin.cc:
6.3 验证公网访问
在浏览器中打开这个公网域名地址,Halo 博客首页正常访问:

到这里,内网部署的 Halo 已经通过 HTTPS 安全发布到公网,访客无需安装任何客户端,直接浏览器访问即可。
七、第四步:更换主题,让站点更好看
站点能访问之后,还可以进一步美化:
- 打开 Halo 控制台,进入"应用市场",筛选"主题",浏览并安装喜欢的主题(有很多免费主题可选):


通过 ZeroNews 把内网 Halo 映射成 HTTPS 公网地址后:
- 站点、主题、附件和数据库仍留在内网,数据在自己手里;
- 访客和编辑用浏览器就能访问,无需安装任何客户端;
- 不用自己维护 Nginx 和证书,也不必将整机端口裸开到公网。
一句话总结这套组合:Halo 负责建站能力,ZeroNews 负责安全暴露。几分钟即可完成"内网部署、公网可达",对家庭 NAS、工作室小主机和个人站点来说,是性价比很高的发布方式。
参考链接
- Halo 官方文档(Docker 部署):Halo 文档
- ZeroNews 官网(零讯):ZeroNews(零讯)- 企业级内网穿透安全网关
- ZeroNews 文档中心:ZeroNews 零讯介绍 - ZeroNews 文档
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2501_91573548/article/details/166127770




