用GitHub和Cloudflar免费搭建一个自己的短链系统
摘要
本文介绍了一款基于 GitHub + Cloudflare 免费搭建的开源短链系统 Sink。该系统具备网址缩短、点击统计、自定义短码、AI 生成短码及设备路由等功能,部署在 Cloudflare 边缘网络,数据完全私有。文章详细讲解了部署流程,包括 Fork 代码、配置环境变量、绑定 KV 和 Analytics Engine、添加 nodejs_compat 兼容性标志及绑定自定义域名。相比第三方服务,自建短链数据归属权更安全可控,适合长期运营使用。
前言
发链接的时候,尤其在一些有字数限制或会自动吞超长链接的第三方平台,长长的 URL 经常发不全、甚至干脆被折叠吞掉。短链接就是解决这个问题的好办法。
最近发现一个用 GitHub + Cloudflare 免费搭建短链系统的开源项目 Sink:它不仅能把你的网址压缩到最短,还自带了统计后台,可以看每个链接的点击量、来源、设备分布等,部署还特别简单(全程不花一分钱服务器费)。
项目特色
Sink 的功能相当全:
🔗 网址缩短:把长网址压缩到尽量短
📈 分析:监控链接,收集点击、来源等统计
☁️ 无服务器:跑在 Cloudflare Workers/Pages 上,无需传统服务器
🎨 可定制 Slug:支持个性化短码,且大小写敏感
🪄 AI Slug:调用 Workers AI 帮你自动生成好记的短码
⏰ 链接过期:可为链接设定有效期
📱 设备路由:把 iOS / Android 用户分别重定向到不同地址(比如 App Store 链接)
🖼️ OpenGraph 预览:自定义分享时的标题、描述、配图
📊 实时分析:带实时 3D 地球仪可视化和事件日志
🔲 二维码:一键生成短链对应的二维码
📦 导入导出:支持 JSON / CSV 批量迁移
🌍 多语言:后台界面支持 i18n
🌙 暗黑模式:亮色 / 暗色 / 跟随系统
先搞清楚它是怎么工作的
部署之前值得花两分钟理解这套架构,后面遇到问题时你才知道该往哪查。
Sink 运行在 Cloudflare 的边缘网络上,整条链路是这样的:
你在后台创建一条短链,长网址和短码的对应关系写进 KV(键值存储)
别人访问
你的域名/短码Cloudflare 的 Pages Functions 收到请求 → 查 KV 拿到目标网址 → 返回一个跳转响应
同时把"有人点了这条链接"这个事件写进 Analytics Engine(分析引擎)
你在后台看到的点击量、来源、设备分布,都是从 Analytics Engine 里读出来的统计数据
看明白这条链路,几个结论就顺理成章了:
数据完全在你自己的 Cloudflare 账号里,没有第三方平台能看到你的链接去向——这是自建短链最核心的价值
统计功能依赖 Analytics Engine,所以那个绑定漏配,链接能跳转但后台一片空白(这也是网上旧教程最常见的翻车点)
一旦你的 CF 账号或域名出问题,所有短链同时失效。这是自建短链的固有代价,后面会专门讲怎么降低风险
部署方法
整体思路是:Fork 项目 → Cloudflare Pages 导入构建 → 配好环境变量、KV/AI 绑定 → 绑定域名。
打开项目 GitHub 地址,把代码 Fork 到自己账号下。项目地址:https://github.com/miantiao-me/Sink

登录 Cloudflare,进任意域名的页面,在**右下角复制你的 **
Cloudflare 账号 ID,然后点击旁边的获取 API 令牌。

创建 API 令牌:模板选择
读取分析数据和日志(Sink 的统计功能要用它读 Cloudflare 的分析数据)。

创建成功后即可看到令牌值,注意它只显示这一次,务必立刻复制保存好。

关于这个令牌的安全性:这里选的是"读取分析数据和日志"模板,只给了只读权限——这是对的。千万别图省事用 Global API Key 或者"编辑所有资源"的令牌,那等于把自己账号的完全控制权交出去。令牌一旦泄露,别人可以读你在 Cloudflare 上的全部分析数据。怀疑泄露就去 API 令牌页面直接撤销重发,不用改密码。
进入 Cloudflare 的
Workers 和 Pages,点击创建应用程序。

点击最下方的
开始使用,创建 Pages 项目。

导入自己 GitHub 的 Git 存储,选择刚 Fork 的那个项目。

**框架预设选择 **
Nuxt.js(Sink 是基于 Nuxt 的)。

在环境变量里添加以下三个值:
NUXT_SITE_TOKEN 是访问后台的管理密码,务必设一个足够强的。

这个密码的强度比你想的更重要:它保护的是你全部短链的创建、修改和删除权限。拿到它的人可以把你所有短链的目标改成钓鱼站——而短链天然"看不出真实去向"的特性,会让这种篡改很难被用户发现。建议用密码管理器生成随机字符串,别用"admin123"这类。
保存并部署。第一次部署通常会失败(缺少运行时配置),属正常现象,选择继续部署即可。

返回 Sink 项目页,进入设置 → 兼容性标志,填写
nodejs_compat(让 Cloudflare 运行时支持 Node 兼容 API)。

为什么必须加这一项? Cloudflare 的 Worker 运行时不是 Node.js,而是一个基于 V8 的轻量运行时(Workers Runtime)。很多 Node 内置模块(比如
crypto、buffer、stream)在里面默认不存在,而 Nuxt 这类框架的构建产物会直接用到它们。nodejs_compat这个兼容性标志,就是让运行时去模拟这些 Node API。不加,页面就报错——这也是"第一次部署失败"的根本原因。
再次重新部署,这次就能成功了。

创建 KV 存储:Cloudflare 里选
Workers KV,创建一个名为sink的命名空间(短链数据存这里)。

绑定 KV、AI 和 Analytics Engine,回到项目设置逐一添加:
KV 命名空间绑定,名称
KV→ 绑定到sinkWorkers AI 绑定,名称
AI→ 绑定 Workers AI 目录(用于 AI Slug)Analytics Engine 绑定,名称
ANALYTICS→ 绑定到sink(用于统计)

这三个绑定的变量名必须完全一致(
KV/AI/ANALYTICS,大小写敏感)。代码里是按这个名字去取的,写错一个字母,对应功能就静默失效——不报错、就是不工作。这类问题最费时间,建议配完对着截图核一遍。
添加自定义域名,让短链跑在你自己的域名下。

重新部署后,即可通过自定义域名打开后台。

为什么强烈建议绑自定义域名? 两个原因。一是观感与信任:
xxx.pages.dev这类域名在微信、QQ 等平台里较容易被判定为风险域名而拦截,你自己长期使用的域名信任度更高。二是可迁移性:域名是你的,将来想换部署平台,改一下 DNS 指向就行,已经发出去的短链继续有效;用平台自带域名的话,换平台等于所有链接失效。
使用
登录后台,创建短链接:粘贴长网址、填自定义短码即可。

既能生成短链,也能直接生成对应的二维码,方便放海报或线下物料。

后台可以查看每个链接的分析数据(点击量、趋势等)。

还有实时访客记录,能看到刚才谁点了哪个链接。

顺手一个实用知识点:短链的跳转用的是 302(临时重定向),不是 301(永久重定向)。这不是实现偷懒,而是刻意设计——302 表示"临时跳转",浏览器和搜索引擎不会长期缓存这个映射,所以你随时能改短链指向的目标。如果用了 301,浏览器会记住第一次的跳转目标,你后台改了也没用,用户那边还往旧地址跑。做短链服务的都必须是 302。
自建短链 vs 第三方短链服务
自建(Sink) | 第三方(bit.ly 等) | |
|---|---|---|
费用 | 免费(CF 免费额度内) | 免费档有限制,高级功能付费 |
数据归属 | 完全在你自己的账号 | 在服务商手里 |
域名 | 自己的域名,可迁移 | 服务商的域名 |
稳定性 | 取决于你自己的账号/域名 | 取决于服务商是否跑路 |
上手成本 | 需要跟着教程部署一遍 | 注册即用 |
我的判断是:偶尔发几条链接,第三方够用;如果你在运营内容,需要长期稳定、可信的短链(比如放在公众号、视频简介里),自建更划算——尤其是"域名可控"这一条,决定了你将来能不能平滑迁移。
结尾
其实这个项目挺早之前就有了,但按网上旧教程部署后,统计功能总是不正常(多半是 KV / Analytics Engine 绑定或兼容性标志没配全)。这次我参考官方视频重新整理了一遍部署步骤,统计功能可以正常使用了,需要的朋友照上面的流程走一遍基本就能跑通。
如果你正需要自建短链、又不想花钱买域名服务或短链 SaaS,Sink 这套全免费方案值得一试——数据完全在你自己的 Cloudflare 账户里,不受第三方平台限制。
常见问题
Q:链接能跳转,但后台看不到任何统计数据?
基本可以断定是 Analytics Engine 没绑或绑错名。检查"Workers 和 Pages → 你的项目 → 设置 → 函数 → Analytics Engine 绑定",变量名必须是 ANALYTICS,并指向名为 sink 的数据集。改完记得重新部署。
Q:AI Slug 功能没反应?
先确认 Workers AI 绑定(变量名 AI)是否配好。另外 Workers AI 的免费额度是按 Neurons 计的,个人用量完全够,但如果你账号里还有别的服务在大量调用 AI,可能会撞上配额。
Q:短码为什么区分大小写?
Sink 支持大小写敏感的短码,好处是同样的字母能组合出更多短码(AbC 和 abc 是两个不同链接)。代价是你自己得记清楚——建议重要链接统一用小写,避免发出去之后自己也分不清。
Q:部署后想换域名,老短链还能用吗?
分两种情况:如果只是在同一个域名下换部署方式,链接不变;如果是换域名,老链接就失效了。所以最好的做法是一开始就用你自己的域名,后续迁移都靠改 DNS 指向完成,短链本身不动。
Q:免费额度够用吗?
短链的请求量很小(一次跳转一次请求),Cloudflare 每天 10 万次 Workers 请求的免费额度,对个人来说基本用不完。真正要留意的是 KV 的每日写入次数——但短链是"创建时写一次、被点时只读",写入量极小,属于这套免费方案里最省额度的一类应用。
相关文章
暂无相关文章