利用 Cloudflare Workers 为 Telegram 频道搭建镜像不想看思考过程的可以跳到 “部署” 或者直 - 掘金

同步来源:树洞剪藏 源站剪藏 ID:286 原文地址:https://juejin.cn/post/7262904835828138040?searchId=202412090850499617D0D11E0CB7C50F31
利用 Cloudflare Workers 为 Telegram 频道搭建镜像不想看思考过程的可以跳到 “部署” 或者直 - 掘金
set 限制解除
首页
BOT
沸点
课程
直播
活动 AI刷题 NEW 商城 APP 插件
创作者中心
会员
登录
注册
利用 Cloudflare Workers 为 Telegram 频道搭建镜像
idealclover
2023-08-03
2,175
阅读8分钟
智能总结
复制 重新生成
文章主要讲述作者为解决 Telegram 频道被墙的问题,探索利用 Cloudflare Workers 搭建镜像的过程。包括初探索的挫折,再探索的新思路,如搬运工式的操作及遇到的问题和解决方法,还介绍了部署步骤,最后表达了对互联网联通的感慨。
关联问题: Cloudflare 收费吗
镜像站稳定吗
如何优化镜像效果
不想看思考过程的可以跳到 “部署” 或者直接去看我写完的项目 Telegram-Channel-Mirror ~
傻翠翠长篇输出的主要地方就是自己的博客啦。经过了一次又一次的功能迭代、代码优化以及 debug 之后,这个博客自己用起来也是越来越顺手了。
但是问题是,自己在摸鱼的过程中往往有些想要分享的文章、视频甚至段子之类的短文字、链接等等,总不能想到什么就都发博客吧——这让表达欲无处安放的翠翠犯了难。
其实对于国内,这个需求最好的去处是微博。但是因为实在对微博对一系列行为不很满意,而又怕自己的一些 暴论 一不小心触碰雷区,最终选择了 Telegram 频道 ( 镜像站 )作为主要的短文字输出地点。
随之而来的问题就是——Telegram 频道被墙了哇喂,怎么让不常挂梯子的小伙伴也能浏览到自己频道的信息呢?于是便心心念念地琢磨着,怎么能把 Telegram 频道 “引过来”。
初探索
对这件事情的最早探索是在疫情的时候,在疫情伊始自己便开始注意到 @ncov2019 的信息,既准确又及时,极大缓解了那段时间自己的吃瓜焦虑。
而随后,自己也发现了网友所建立的 镜像站 ,让自己意识到,把数据抓过来在墙内广播这件事是【有戏的】。
简单来说,这样的镜像更像一个爬虫,定期爬取 Telegram Channel 中的数据,并以前端的形式呈现出来,画成图的话,大概是这样。
随后自己便去研究了一下这个镜像站的 前端 和 后端 代码。但可惜的是很快自己便遇到了问题。
首先由于前后端语言不统一,前端用 Vue 后端用 Python,使得部署起来很麻烦。于是自己首先想到的思路是将两端直接捏合起来做一个 docker 镜像。
但另一个问题是:自己有 docker 的机子在国内,而国外机由于性能原因没有装 docker,这就使得 docker 还需要搭配代理食用 —— 想了想当初自己配 rsshub 和 ttrss 的时候,现在想想也是挺噩梦的一件事。
其次,前端的一些代码是写死的,很难做成配置项(例如,随频道改变标题等等),因此即使做出来也难以做到很强的泛用性。因此这个方案最后也就作罢了。
再探索
这件事本不了了之了,但随着看到木子的 这篇博客 ,其中提出了用 Cloudflare Workers 直接把 Telegram 频道预览网站镜像过来的可能性,从而让这件事有了新的希望。
而正巧前段时间刚刚因为自己的另一个项目 GitHub-Star-Counter 和 Spencer Woo 的 Substats ,简单用上了 Cloudflare Workers,脑补了一下觉得这事有戏,于是便更细致地研究了一下。
用 Cloudflare Workers 做镜像的思路则来自于 ChrAlpha 的 这篇文章 (啊,我的友链都是些什么怪物们 orz 傻翠给大家丢脸了 QAQ)。
Cloudflare Workers 是 Cloudflare 所推出的 Serverless 服务,大概可以理解为跑在可以任何地方的小函数与中间件,借助 JS 可以实现各种奇妙的功能。
更神奇的是,免费用户 每天 只有区区 10 万次 的调用额度 —— 哇,太少了,根本花不完诶!不用你部署还用谁呢?不愧是 Cloudflare,有钱就是任性 orz
如果说初探索的思路更像是个爬虫,定时爬取频道信息并呈现,那么现在的思路更像是搬运工,直接将 Telegram 频道的预览地址 eg: t.me/s/idealclov… 整体搬了过来,需要什么?我帮你取!当我们去访问镜像站的时候,由 Cloudflare 直接做信息的搬运工。
但是这个过程中遇到的问题是,对于一个网站来说,我们往往需要请求其 html、css、js、json 及各种静态文件。当我们请求主文件过后,会根据其所附的文件,再请求其他文件 —— 虽然主文件被搬过来了,但如果上面其他文件的地址还是原封不动的,同样什么用也没有。
因此我们所需要做的不单单是【转发】,还有【修改】。
通过正则表达式的批量匹配与替换,我们便可以将原来指向其他域名的文件重新指回我们的 Cloudflare Worker 上,并通过映射让其指向正确的网址。
然而由于前人的代码或多或少有些问题。于是在进行了这样的思路整理与 “文献综述”(写论文写魔怔了 2333)后,也算是站在巨人的肩上迈出了自己的一小步。
巨人肩上的一小步
因此在前人的基础上,自己捋顺了整体思路,做了如下的总结与尝试。
首先对主 URL 进行映射,将 / 对应到 t.me/s/频道名称 上
其次将主 URL 中所引用的其他文件进行正则匹配与替换
将 telegram.org 域名下的引用更改为自己域名 /static 下的对应引用
将原有的 Download Telegram 链接内容直接替换为自己频道的原本链接
将出现最多的个人头像直接替换为墙内 CDN 的对应链接
将引用资源进行映射,将 /static 对应到 telegram.org ,完成对其他文件对解析
而对于图片、视频等资源,由于 CloudFlare Workers 的资源限制,自己试验过后发现即使进行代理,图片也往往加载不出来或加载速度堪忧,视频就更不用想了。
不显示就不显示吧,谁让你不挂梯子呢(
而最终,自己也将这个思路所形成的代码浓缩进了 Telegram-Channel-Mirror 项目中,更准确地说是 这个文件 中,与大家共享,希望能帮到需要的人。
部署
这里我懒,很多图和文字就直接用木子的 这篇博客 的啦 XD
首先是要去 CloudFlare 上注册一个账号... 这步就不教了嗷
登录到面板,点击左上角的 Menu —-> Workers 进入到 Workers 页面。新注册的用户会提示设置一个 workers.dev 顶级域名下的二级子域名,这个子域名设置好之后是 ** 不可更改的 **
之后你新创建的 Worker 就会使以这个域名而二级子域名开始的,类似于 WorkerName.yousetdomain.workers.dev 。 yousetdomain 就是你要设置的二级子域名, WorkerName 可以自定义,默认是随机生成的。
当然,也可以给自己的域名添加一条 CNAME 到 WorkerName.yousetdomain.workers.dev ,这样使用自己的域名就可以访问到 Worker 了。
设置好二级子域名之后选择 free 套餐计划,然后进入到 Worker 管理界面,创建一个新的 Worker。
之后我们复制我项目中的 index.js 中的代码到 Script 输入框,并更改头几行的配置:
channel_name: 频道名称
host_name: Worker 的域名,供替换使用
icon_url: 由于不反代图片,故需另附头像链接
修改好代码之后点击左下角的 Save and Deploy 然后 Preview 看看页面是否显示正常,如果显示正常就完全 OK 啦~
写在最后
唉,也许过段时间,cloudflare workers 也会被拒之于门外吧 —— 毕竟在国内也不是没有替代品。serverless 服务现在也是各大云所赤手可热的焦点项目。还有阿里云、腾讯云等等云在等着我们。
但是,有时候真的要佩服互联网元老们所怀揣对那份自由、共享的精神,以及他们的技术能力与高瞻远瞩的视野所带来的互联网底层规则。
虽然时至今日,不论任何国家、地区还是组织 都 愈发开始自我封闭,甚至交流的社区也开始充斥着各种小团体小圈子,但只要互联网还存在着,还联通着,只要我们想彼此沟通,就必然有办法能绕过彼此间的封锁,与大洋彼岸互相沟通。这一点,无论如何都不会回去了。
也许,虽然艰难且步步妥协,但互联网终究还是些许改变了世界呢。
拓展链接
idealclover/Telegram-Channel-Mirror: 利用 CloudFlare Worker 搭建 telegram 频道镜像站,使得国内可以访问
thegreatjavascript/2019-nCoV-News: 2019-nCoV 疫情实时播报|墙内传播版(请广泛传播)
QuantumGhost/ncov-channel-crawler
使用 CloudFlare Workers 搭建 telegram 频道镜像站 | 木子
Cloudflare Worder 免费搭建镜像站 | ChrAlpha 的幻想乡
Substats:快速统计你在各个平台的关注者! - Spencer's Blog
theme: channing-cyan
标签: 产品
评论 0
0 / 1000
标点符号、链接等不计算在有效字数内
Ctrl + Enter
发送
登录 / 注册 即可发布评论!
暂无评论数据
idealclover
字节跳动商业产品经理
榜上有名
20
文章
10k
阅读
10
粉丝
关注
已关注
私信
精选内容
如何设计一个高实时性团队协作的文档
MAODO
· 41阅读 · 1点赞 程序员很喜欢的几款神器
程序员小榆
· 58k阅读 · 504点赞 我终于从不想上班又不能裸辞的矛盾中挣扎出来了
程序员Winn
· 6.2k阅读 · 73点赞 降本增笑,领导要求程序员半年做出一个金蝶
萤火架构
· 99k阅读 · 484点赞 独立开发沉思录周刊:vol22.AI 正在加剧知识幻觉
两万焦
· 65阅读 · 1点赞
为你推荐
白嫖Cloudflare Workers 搭建 Docker Hub镜像加速服务|
网工格物
6月前
178
点赞
评论
Linux
利用Cloudflare轻松搭建免费个人网站
cortxu
10月前
2.0k
1
评论
前端
使用 TypeScript 开发你的第一个 Telegram 机器人(2)- 将 Telegram 做为 OSS 对象存储服务
悖论BeilunYang
1月前
94
2
评论
TypeScript
机器人
Serverless
新作品,一个通用的 Cloudflare Workers HTTP 反向代理
jonssonyan
4月前
716
2
评论
程序员
第九期【零基础】CF免费KV文件存储优选IP文件-2024最新纯小白零成本搭建永久免费cloudflare
AM科技
4天前
18
1
评论
数据库
Spring Cloud
稳了,搭建Docker国内源图文教程
jonssonyan
2月前
51
2
评论
Docker
三分钟!快速解决Dockerhub镜像站无法访问问题!
一诺滚雪球
5月前
5.1k
15
3
前端
CloudFlare R2 个人免费图床搭建教程
MatrixWave
1年前
1.2k
1
评论
笔记
使用免费的 Cloudflare Workers 搭建 Serverless 站点计数服务
Willin老王带你躺平养老
2年前
692
2
评论
架构
解决docker镜像加速站无法访问问题(半永久解决)
塔哥哥要学习
3月前
394
点赞
1
Docker
容器
处理docker国内无法使用问题
king_star_mlt
2月前
96
1
评论
后端
从 Docker Hub 拉取镜像受阻?这些解决方案帮你轻松应对
Rainbond开源
5月前
1.5k
点赞
1
Docker
云原生
Github国内镜像资源
风早
2年前
1.3k
点赞
评论
GitHub
利用Cloudflare Workers AI实现高级机器学习嵌入:初学者指南
用户850429986511
2天前
3
点赞
评论
前端
我把网站迁移到 cf,省了几万块
艾逗笔
3月前
4.5k
77
12
全栈
关注
登录掘金领取礼包
更多登录后权益等你解锁 登录 / 注册
AI 结果可能不准确,请谨慎使用
沉浸阅读