在国内云服务器(如阿里云、腾讯云)上使用海外域名建站时,通常会面临三大难关:Docker 镜像被墙拉不动、Let's Encrypt 证书验证被防火墙阻断、域名未备案被云服务商拦截(80/443端口封锁)。

本教程通过 Docker 本地极简部署 + Cloudflare Tunnel (隧道) 内网穿透 的策略,完美实现:

  • 免备案: 绕过阿里云等服务商的 80/443 端口拦截。
  • 免证书申请: 自动拥有合法的 HTTPS 和小绿锁,无需在服务器折腾 acme.sh
  • 极致安全: 服务器不暴露任何公网端口,黑客无法扫描。
  • 无端口后缀: 访客使用最干净的标准域名访问。

前提条件

  1. 一台国内云服务器(已安装 Docker)。
  2. 一个托管在 Cloudflare 的域名(如 blog.example.com)。
  3. 确保服务器本地的 8080 端口未被占用。

第一阶段:在服务器本地极简部署 Typecho

我们不需要给容器配置任何证书,也不需要对外网暴露 80 端口,一切保持最纯净的状态。

1. 建立数据挂载目录并赋权

# 彻底清理旧数据(若是全新安装可忽略)
docker rm -f typecho 2>/dev/null
rm -rf /srv/myblog/home/*

# 创建挂载目录并给予最高读写权限(防止后续报数据库错误)
mkdir -p /srv/myblog/home
chmod -R 777 /srv/myblog/home

2. 启动 Typecho 容器(仅监听内网)

使用轻量且环境配置良好的 rehiy/typecho 镜像。

docker run -d \
  --name typecho \
  --restart always \
  -p 8080:80 \
  -v /srv/myblog/home:/var/www/default/usr/home \
  rehiy/typecho

注:-p 8080:80 意味着容器的网页服务现在运行在宿主机的 8080 端口上。此时外网是打不开的,这是故意为之的安全设计。

3. 预防性修复容器内读写权限

为了确保稍后的安装向导能顺利写入 SQLite 数据库文件,执行一次权限同步:

docker exec typecho chown -R bin:bin /var/www/default/usr/home

第二阶段:打通 Cloudflare Tunnel (内网穿透)

这是绕过国内服务商备案拦截的核心操作。

1. 创建隧道

  1. 登录 Cloudflare Zero Trust 控制台(免费开通)。
  2. 左侧菜单前往 Networks -> Tunnels,点击 Create a tunnel
  3. 选择 Cloudflared 类型,给隧道随便起个名字(如 myblog-tunnel)。

2. 在服务器上运行隧道客户端

  1. 在创建隧道的向导页面,选择你的服务器环境(通常是 Debian/Ubuntu 64-bit 或者 Docker)。
  2. 页面会生成一行包含长长 Token 的安装命令(如 cloudflared service install ...docker run cloudflare/cloudflared...)。
  3. 将该命令复制到你的服务器终端中执行。
  4. 当网页底部出现你的服务器连接状态变为绿色的 Active,说明隧道已打通!点击 Next。

3. 配置外网访问规则 (Public Hostname)

在向导的最后一步,告诉 Cloudflare 如何把访客引导到你的博客:

  • Subdomain (子域名): blog
  • Domain (主域名): 选择你的域名 example.com
  • Service Type (服务类型): 选择 HTTP
  • URL (目标地址): 填入你的服务器内网 IP 及刚才博客绑定的端口,例如:172.x.x.x:808010.x.x.x:8080

⚠️ 避坑提醒:
这里的 URL 千万不要填 localhost:8080127.0.0.1:8080!因为如果你的 cloudflared 客户端也是用 Docker 跑的,填 localhost 它会去找自己容器内部的端口。
正确查内网 IP 的命令: ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1

点击 Save (保存)。配置在 2 秒内下发全球。


第三阶段:初始化安装与装载精美主题

1. 网页端完成初始化

现在,打开浏览器,访问你纯净的、带安全锁的网址:https://blog.example.com
阿里云的备案拦截页面已不复存在。
在安装向导中,数据库适配器务必选择 SQLite 3。设置密码,完成安装。

2. 装载第三方主题(如 TypechoGlass)

如果要在 rehiy/typecho 镜像中放入新主题,不能放在外部映射,必须塞进内部的核心目录。

# 1. 下载主题
cd /root
git clone https://github.com/Sandro-Z/TypechoGlass.git

# 2. 将主题直接塞进容器的真实读取路径
docker cp /root/TypechoGlass typecho:/var/www/default/usr/themes/TypechoGlass

# 3. 将主题所有权移交给容器的核心程序账户 (bin)
docker exec typecho chown -R bin:bin /var/www/default/usr/themes/TypechoGlass
docker exec typecho chmod -R 755 /var/www/default/usr/themes/TypechoGlass

3. 启用主题

前往博客后台 https://blog.example.com/admin,点击 控制台 -> 外观,找到新主题点击启用,享受极速、安全的博客体验!