在 Cloudflare 上零成本搭建带分析功能的私有短链接服务
Sink:在 Cloudflare 上零成本搭建带分析功能的私有短链接服务
项目介绍
在社交媒体、博客营销或日常分享中,冗长的 URL 不仅影响美观,还可能被平台屏蔽或截断。传统的短链接服务(如 Bitly、TinyURL 等)虽然方便,但要么收费,要么无法掌握完整的访问数据。而 Sink 的出现完美解决了这一问题——它是一个运行在 Cloudflare 上的现代化短链接服务,让你可以在零服务器成本的情况下,拥有一个功能完整、界面优雅、自带分析功能的私有短链接系统。
项目地址:https://github.com/luochen-zhang/Sink
开源协议:MIT
核心优势
- 费用:0 元(利用 Cloudflare 免费额度)
- 性能:极速(部署在 Cloudflare 全球边缘节点)
- 数据私有:所有链接和访问数据都存储在自己的 Cloudflare 资源中
- 运维成本:零——无需管理服务器
核心功能
Sink 是一套完整的短链接服务解决方案,功能覆盖了日常使用的方方面面:[reference:0]
| 功能 | 说明 |
|---|---|
| URL 缩短 | 将冗长的 URL 压缩到最短长度 |
| 实时分析 | 监控链接访问数据,收集具有洞察力的统计数据[reference:1] |
| 无服务器 | 无需传统服务器即可部署,完全运行在 Cloudflare 上[reference:2] |
| 自定义 Slug | 支持个性化的短链别名,可配置大小写敏感[reference:3] |
| AI 辅助 | 可选使用 Cloudflare Workers AI 自动生成 Slug 和 OpenGraph 元数据[reference:4] |
| 链接控制 | 设置链接过期时间、访问密码、不安全链接警告页[reference:5] |
| 智能路由 | 按设备类型或国家/地区智能跳转[reference:6] |
| 社交预览 | 自定义标题、描述和图片的社交预览[reference:7] |
| 二维码生成 | 为短链接生成二维码,方便线下分享[reference:8] |
| 导入/导出 | 通过 JSON 导入导出链接,通过 CSV 导出访问数据[reference:9] |
| 多语言 | 完整的国际化支持,仪表盘和跳转页均支持多语言[reference:10] |
| 3D 地球展示 | 实时显示全球访问分布,采用 10 秒轮询和客户端回放[reference:11] |
技术栈
Sink 采用了现代化的全栈技术方案:[reference:12]
- 平台:Cloudflare(Workers / Pages)
- 前端框架:Nuxt 4
- 数据库:Cloudflare D1(权威链接存储)+ Workers KV(读写缓存)[reference:13]
- ORM:Drizzle ORM
- 分析引擎:Cloudflare Workers Analytics Engine[reference:14]
- 对象存储:Cloudflare R2(可选,用于 OpenGraph 图片上传)[reference:15]
- AI:Cloudflare Workers AI(可选)[reference:16]
- UI 组件:shadcn-vue[reference:17]
- 样式:Tailwind CSS[reference:18]
部署教程
准备工作
开始部署前,你需要准备:
- 一个 Cloudflare 账号
- 一个 GitHub 账号
- (可选)一个自定义域名——如果使用 Cloudflare Pages 默认域名也可正常访问
方式一:Cloudflare Pages 可视化部署(推荐)
这是最简单的部署方式,全程在浏览器中完成。[reference:19]
第 1 步:Fork 仓库
登录 GitHub,打开 Sink 项目仓库,点击右上角的 Fork 按钮,将仓库复制到你的 GitHub 账号下。[reference:20]
第 2 步:进入 Cloudflare Workers & Pages
登录 Cloudflare 控制台,进入 Workers & Pages 创建页面:
https://dash.cloudflare.com/?to=/:account/workers-and-pages/create
第 3 步:连接 GitHub 并选择仓库
点击 连接到 Git,按提示授权 Cloudflare 访问你的 GitHub 账号,然后选择你刚刚 Fork 的 Sink 仓库。[reference:21]
第 4 步:配置构建设置
- 框架预设:选择 Nuxt.js(不要选错成 Next.js)[reference:22]
- 构建命令:
npm run build(会自动带出) - 输出目录:
dist(会自动带出)[reference:23]
第 5 步:配置环境变量
这是至关重要的一步,需要添加以下三个环境变量:[reference:24]
| 变量名 | 说明 | 获取方式 |
|---|---|---|
NUXT_SITE_TOKEN |
网站登录的管理密码 | 自行设置,至少 8 个字符的强密码 |
NUXT_CF_ACCOUNT_ID |
Cloudflare 账号 ID | 在 Cloudflare 仪表盘右侧 "Account details" 中查找 |
NUXT_CF_API_TOKEN |
Cloudflare API 令牌 | 在 Cloudflare API Tokens 创建,至少需要 Account.Account Analytics 权限 |
⚠️ 重要:
NUXT_SITE_TOKEN请使用强随机字符串,不要使用简单密码,这是你访问管理后台的唯一凭证。
第 6 步:保存并触发部署
点击 保存并部署,等待部署流程开始。[reference:28]
第 7 步:配置绑定(关键步骤)
部署开始后,立即取消部署(点击取消),然后进入项目的 设置 → 绑定,添加以下绑定:
KV 命名空间绑定:
- 变量名:
KV - 值:在 Cloudflare 存储和数据库 → KV 中创建一个新的命名空间,然后绑定[reference:30]
- 变量名:
Analytics Engine 绑定(必需):
- 在 Workers & Pages 右侧面板找到 Analytics Engine,点击 Set up 启用免费版
- 返回 设置 → 绑定 → 添加,选择 Analytics Engine
- 变量名:
ANALYTICS,绑定到sink数据集
Workers AI 绑定(可选,用于 AI 生成 Slug):
- 变量名:
AI,绑定到 Workers AI Catalog[reference:33]
- 变量名:
R2 存储桶绑定(可选,用于 OpenGraph 图片上传):
- 在 Cloudflare 创建 R2 存储桶,绑定变量名
R2
- 在 Cloudflare 创建 R2 存储桶,绑定变量名
第 8 步:配置 Compatibility Flags
进入 设置 → 运行时,添加兼容性标志:nodejs_compat
第 9 步:重新部署
完成所有绑定和配置后,回到 部署 页面,点击最新部署记录右侧的 ··· → 重试部署,等待部署完成。[reference:36]
第 10 步:访问使用
部署成功后,访问你的 Pages 域名(或自定义域名),使用你设置的 NUXT_SITE_TOKEN 登录即可开始使用。[reference:37]
💡 官方演示站:https://sink.cool/dashboard(Site Token:
SinkCool)[reference:38]
方式二:Cloudflare Workers 部署(适合进阶用户)
Sink 也支持部署到 Cloudflare Workers:
# 克隆仓库
git clone https://github.com/luochen-zhang/Sink.git
cd Sink
# 安装依赖
npm install
# 登录 Cloudflare
npx wrangler login
# 部署
npx wrangler deploy