怎么会不过审呢?没有敏感信息呀。
For obvious reasons,Many Docker image repositories are inaccessible,The official warehouse has also been filtered by the firewall,So write about how to build a self use Docker image using CloudFlare's Workers and Pages.
其实已经有很多篇这样的教程了,但镜像搭建完基本就是所有人所有时间都能访问,这样就有两个问题:
- 第一是访问的人太多,流程太高,CF会封号。
- 第二是很多人都访问的话,域名容易被wall。
所以我写了个可以定时开放的脚本,这样就可以在规定的时间段内打开,或者只在自己想用的时候手动去打开。
下面是实现步骤:
1. 登录CF平台
https://dash.cloudflare.com/
2. 创建Worker
点击Workers 和 Pages -->创建
创建Worker
给Worker命名(随意起个英文名),点击【部署】
3. 部署代码
进入到部署成功页面后,再点击【编辑代码】
把如下代码粘贴进去
// Docker镜像仓库主机地址
let hub_host = 'registry-1.docker.io';
// Docker认证服务器地址
const auth_url = 'https://auth.docker.io';
// 自定义的工作服务器地址
let workers_url = 'https://docker.yourdomain.com';
let 屏蔽爬虫UA = ['netcraft'];
// 根据主机名选择对应的上游地址
function routeByHosts(host) {
// 定义路由表
const routes = {
// 生产环境
"quay": "quay.io",
"gcr": "gcr.io",
"k8s-gcr": "k8s.gcr.io",
"k8s": "registry.k8s.io",
"ghcr": "ghcr.io",
"cloudsmith": "docker.cloudsmith.io",
// 测试环境
"test": "registry-1.docker.io",
};
if (host in routes) return [routes[host], false];
else return [hub_host, true];
}
/** @type {RequestInit} */
const PREFLIGHT_INIT = {
// 预检请求配置
headers: new Headers({
'access-control-allow-origin': '*', // 允许所有来源
'access-control-allow-methods': 'GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS', // 允许的HTTP方法
'access-control-max-age': '1728000', // 预检请求的缓存时间
}),
};
/**
* 构造响应
* @param {any} body 响应体
* @param {number} status 响应状态码
* @param {Object<string, string>} headers 响应头
*/
function makeRes(body, status = 200, headers = {}) {
headers['access-control-allow-origin'] = '*'; // 允许所有来源
return new Response(body, { status, headers }); // 返回新构造的响应
}
/**
* 构造新的URL对象
* @param {string} urlStr URL字符串
*/
function newUrl(urlStr) {
try {
return new URL(urlStr); // 尝试构造新的URL对象
} catch (err) {
return null; // 构造失败返回null
}
}
function isUUID(uu