在国内云服务器(如阿里云、腾讯云)上使用海外域名建站时,通常会面临三大难关:Docker 镜像被墙拉不动、Let's Encrypt 证书验证被防火墙阻断、域名未备案被云服务商拦截(80/443端口封锁)。
本教程通过 Docker 本地极简部署 + Cloudflare Tunnel (隧道) 内网穿透 的策略,完美实现:
- 免备案: 绕过阿里云等服务商的 80/443 端口拦截。
- 免证书申请: 自动拥有合法的 HTTPS 和小绿锁,无需在服务器折腾
acme.sh。 - 极致安全: 服务器不暴露任何公网端口,黑客无法扫描。
- 无端口后缀: 访客使用最干净的标准域名访问。
前提条件
- 一台国内云服务器(已安装 Docker)。
- 一个托管在 Cloudflare 的域名(如
blog.example.com)。 - 确保服务器本地的
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. 创建隧道
- 登录 Cloudflare Zero Trust 控制台(免费开通)。
- 左侧菜单前往 Networks -> Tunnels,点击 Create a tunnel。
- 选择 Cloudflared 类型,给隧道随便起个名字(如
myblog-tunnel)。
2. 在服务器上运行隧道客户端
- 在创建隧道的向导页面,选择你的服务器环境(通常是 Debian/Ubuntu 64-bit 或者 Docker)。
- 页面会生成一行包含长长 Token 的安装命令(如
cloudflared service install ...或docker run cloudflare/cloudflared...)。 - 将该命令复制到你的服务器终端中执行。
- 当网页底部出现你的服务器连接状态变为绿色的
Active,说明隧道已打通!点击 Next。
3. 配置外网访问规则 (Public Hostname)
在向导的最后一步,告诉 Cloudflare 如何把访客引导到你的博客:
- Subdomain (子域名):
blog - Domain (主域名): 选择你的域名
example.com - Service Type (服务类型): 选择
HTTP - URL (目标地址): 填入你的服务器内网 IP 及刚才博客绑定的端口,例如:
172.x.x.x:8080或10.x.x.x:8080。
⚠️ 避坑提醒:
这里的 URL 千万不要填localhost:8080或127.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,点击 控制台 -> 外观,找到新主题点击启用,享受极速、安全的博客体验!
评论
暂无评论