这份文档整理了基于 本地服务器 + Docker (Halo) + Cloudflare Tunnel (内网穿透) + Google AdSense (代码注入 & Workers 方案) 的完整搭建与配置流程。
这份指南可以作为你的运维备忘录,涵盖了从建站到广告变现配置的全过程。全流程部署手册:Halo 博客 + Cloudflare 穿透 + AdSense 完美适配
架构说明
应用层:Halo 2.x (Docker 部署)
网络层:Cloudflare Zero Trust (Tunnel 隧道),无需公网 IP,无需端口映射。
域名策略:根域名 (
020915.xyz) 直接访问博客,以满足 AdSense 审核要求。广告验证:利用 Halo 全局注入 Head 代码,利用 Cloudflare Workers 托管
ads.txt。
第一阶段:本地环境搭建 (Docker)
确保你的本地服务器(NAS、树莓派或旧电脑)已安装 Docker 和 Docker Compose。
1. 创建 Halo 配置文件
在服务器创建目录(如 /root/halo),并创建 docker-compose.yaml:
YAML
version: "3"
services:
halo:
image: halohub/halo:2.20 # 建议锁定一个稳定版本或使用 latest
restart: always
container_name: halo
environment:
- JVM_OPTS=-Xmx256m -Xms256m
# 强烈建议显式声明外部访问地址,避免重定向错误
- HALO_EXTERNAL_URL=https://020915.xyz
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090" # 容器8090映射到主机8090
2. 启动服务
Bash
cd /root/halo
docker-compose up -d
此时,在局域网内访问 http://你的内网IP:8090 应能看到 Halo 安装界面。初始化完成后进入后台。
第二阶段:Cloudflare Tunnel 内网穿透
这一步将本地服务暴露给公网,同时隐藏服务器真实 IP。
1. 创建隧道
进入 Networks -> Tunnels。
点击 Create a tunnel -> 选择 Cloudflared。
命名隧道(例如
halo-home),保存。安装连接器:根据你的服务器系统(Linux/Windows/Docker),复制页面提供的安装命令并在本地服务器执行。看到 "Connected" 即表示隧道打通。
2. 配置公网访问 (Public Hostname)
为了通过 AdSense 审核,必须配置根域名。
在 Tunnel 详情页,点击 Configure -> Public Hostname。
点击 Add a public hostname。
配置根域名:
Subdomain: 留空 (代表
020915.xyz)Domain: 选择
020915.xyzService:
HTTP->localhost:8090
(可选) 配置子域名 blog:
如果你希望
blog.020915.xyz也能访问,重复上述步骤,Subdomain 填blog,Service 一样填localhost:8090。
第三阶段:Google AdSense 代码注入 (Head)
这一步是为了让 Google 能够展示广告并在你的网站上“干活”。
获取代码:在 AdSense 后台获取你的验证脚本。
注入 Halo:
登录 Halo 后台 (
https://020915.xyz/console)。点击左侧 设置 -> 代码注入 (Code Injection)。
在 全局 Head 标签 (Global Head) 输入框中粘贴代码:
HTML
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-xxxxxxxxx" crossorigin="anonymous"></script>点击 保存。
验证:访问博客首页,右键查看源代码,搜索
ca-pub-xxxxx确认代码存在。
第四阶段:解决 ads.txt 问题 (Cloudflare Workers)
这一步是为了解决“收益受损”警告,相当于给网站挂上“官方授权证书”。因为 Docker 修改文件麻烦,我们用 Cloudflare 边缘计算拦截请求并返回证书。
1. 准备内容
准备好你的 AdSense 授权行(在 AdSense 后台获取),格式如下:
google.com, pub-xxxxxxxxxx, DIRECT, fxxxxxxxx
2. 创建 Worker
回到 Cloudflare 面板 -> Workers & Pages。
Create Application -> Create Worker -> Deploy。
点击 Edit code,删除所有原有代码,粘贴以下内容:
JavaScript
export default {
async fetch(request) {
const url = new URL(request.url);
// 监听 /ads.txt 路径
if (url.pathname === "/ads.txt") {
// 返回你的授权信息,确保替换成你自己的完整代码
return new Response("google.com, pub-xxxxxxxx, DIRECT, fxxxxxxxx", {
headers: {
"content-type": "text/plain; charset=utf-8",
// 允许跨域(可选,增加兼容性)
"Access-Control-Allow-Origin": "*"
},
});
}
// 其他所有请求直接放行,回源到你的 Tunnel
return fetch(request);
},
};
点击右上角 Deploy 保存。
3. 绑定路由 (Triggers)
让这个 Worker 只在访问你的域名时生效。
在 Worker 的 Settings -> Triggers 页面。
点击 Add route。
Route: 输入
020915.xyz/ads.txtZone: 选择
020915.xyz。点击 Add Route。
第五阶段:最终检查清单
完成以上所有步骤后,请依次检查:
✅ 网站访问:访问
https://020915.xyz,能流畅打开 Halo 博客。✅ 源码检查:首页源代码里包含
<script...adsbygoogle...>。✅ 证书检查:访问
https://020915.xyz/ads.txt,浏览器显示一行纯文本(你的 ID 信息),没有 404 或跳转。✅ AdSense 后台:
在“网站”选项卡点击“验证”。
在“Ads.txt”状态栏,静待几天,直到状态变为“已授权”。
恭喜!你已经完成了一套既安全(内网穿透)、又高效(CDN 加速)、且完全符合 Google 变现规范的博客系统。
评论