🚀 Hugo 博客部署 + 内网云隧道穿透:从零搭建公网可访问的个人博客
一、为什么选 Hugo + 内网云隧道?
搭建个人博客有很多方案,为什么我选了 Hugo + 内网云隧道 这个组合?
| 方案 | 优点 | 缺点 |
|---|---|---|
| Hexo | 生态丰富,插件多 | Node.js 依赖重,国内 npm 源慢 |
| WordPress | 功能强大,所见即所得 | 需要 MySQL + PHP,资源占用高 |
| GitHub Pages | 免费托管 | 国内访问慢,自定义域名麻烦 |
| Hugo + 内网云 ✅ | 零依赖、极速构建、公网访问 | 需要自有服务器 |
Hugo 的核心优势:
- ⚡ 极速构建 — 500 篇文章构建仅需 161ms
- 📦 零依赖 — 单个二进制文件,无需 Node.js/Python/PHP
- 🔒 纯静态 — 无数据库、无运行时漏洞
- 🌙 主题丰富 — PaperMod、Stack、Next 等优质主题
内网云隧道的价值:
- 🌐 公网访问 — 家里服务器也能对外提供服务
- 🔐 安全隔离 — 上传管理走内网,公网只读
- 💰 零成本 — 不需要云服务器、不需要域名备案
二、环境准备
2.1 架构总览
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 公网用户 │────▶│ 内网云服务器 │────▶│ PVE 容器 │
│ │ │ (gz2) │ │ (CT310) │
└──────────────┘ └──────────────┘ └──────────────┘
访问 80 端口 SSH 反向隧道 Hugo Server
nssh 隧道 1313 端口
2.2 PVE 容器配置
| 配置项 | 值 | 说明 |
|---|---|---|
| 模板 | CT122 (Debian12DockerLogined) | xingbox 节点,Docker 预装 |
| VMID | 310 | 3xx = 教程文档用 |
| IP | 192.168.2.102 | 10x 段 = 教程临时使用 |
| CPU | 1 core | Hugo 极轻量 |
| 内存 | 512MB | Hugo + nssh 足够 |
| 磁盘 | 4GB | 模板默认 |
| SSH | root / <your_password> | 模板预设密码 |
| 网关 | 192.168.2.1 | 局域网统一 |
2.3 创建容器
# 1. 克隆模板
curl -sk -X POST -H "Authorization: PVEAPIToken=root@pam!token=secret" \
--data-urlencode "newid=310" \
--data-urlencode "hostname=hugo-tutorial" \
--data-urlencode "full=1" \
"https://192.168.2.3:8006/api2/json/nodes/xingbox/lxc/122/clone"
# 2. 等待克隆完成(poll lock 字段消失)
# 3. 配置静态 IP
curl -sk -X PUT -H "Authorization: PVEAPIToken=..." \
--data-urlencode "cores=1" \
--data-urlencode "memory=512" \
--data-urlencode "net0=name=eth0,bridge=vmbr0,ip=192.168.2.102/24,gw=192.168.2.1,type=veth" \
"https://192.168.2.3:8006/api2/json/nodes/xingbox/lxc/310/config"
# 4. 启动容器
curl -sk -X POST -H "Authorization: PVEAPIToken=..." \
"https://192.168.2.3:8006/api2/json/nodes/xingbox/lxc/310/status/start"
# 5. 验证
ping -c 1 192.168.2.102
sshpass -p husongsxx ssh root@192.168.2.102 "hostname"
# → hugo-tutorial