miantiao-me/Sink
A Simple / Speedy / Secure Link Shortener with Analytics, 100% run on Cloudflare.
miantiao-me/Sink
A Simple / Speedy / Secure Link Shortener with Analytics, 100% run on Cloudflare.
Sink 是一款完全运行在 Cloudflare 上的短链接服务:用 Workers KV 存链、Analytics Engine 做统计,Nuxt 构建管理后台与跳转页。它把「缩短 URL → 自定义 Slug → 查看点击分析 → 生成社交预览」收成一套 Serverless 方案,无需自建 VPS 或数据库。项目曾登上 Hacker News 与 HelloGitHub,提供在线 Demo(sink.cool/dashboard)与浏览器扩展、Raycast、iOS App 等生态扩展。
自建短链往往要在「付费 SaaS」「PHP 自托管」与「手写 Workers 脚本」之间取舍:前者按量计费且数据不在自己手里,后者运维成本高或功能单薄。Sink 把短链、分析、预览与 AI 能力打包进 Cloudflare 免费/低成本套餐,Fork 后按文档绑定 KV、Analytics Engine 即可上线独立域名。对个人站长,它适合博客外链、活动落地页与社交分享;对团队,统一 API 与批量导入降低从 Bitly 等平台的迁移摩擦。AGPL-3.0 许可意味着若你修改后对外提供网络服务,需开放相应源码。
wrangler 路由或静态重定向更轻;若需要企业级团队协作与合规审计,商业平台仍更合适。*.workers.dev 子域)pnpm run build 或 npm run build)NUXT_SITE_TOKEN(Dashboard 登录令牌)、NUXT_CF_ACCOUNT_ID 与具备 Analytics 权限的 NUXT_CF_API_TOKEN推荐:Cloudflare Workers 部署
wrangler.jsonc 中的 kv_namespaces ID 替换为你的命名空间 IDsink 的 R2 桶用于 OG 图片上传;不需要可在 wrangler.jsonc 注释 r2_bucketsSink 仓库:
pnpm run build 或 npm run buildnpx wrangler deploysink(或通过 NUXT_DATASET 自定义,并同步 wrangler.jsonc)备选:Cloudflare Pages 部署
详见仓库 Pages 部署文档:选择 Nuxt 预设,绑定 KV / Analytics Engine /(可选)Workers AI 与 R2,并设置 Compatibility flag nodejs_compat。
本地开发(可选)
git clone https://github.com/miantiao-me/Sink.gitcd Sinkpnpm installcp .env.example .env # 按 docs/configuration.md 填写pnpm devNUXT_SITE_TOKEN:Dashboard 访问令牌(≥ 8 字符)NUXT_CF_ACCOUNT_ID:Cloudflare 账户 IDNUXT_CF_API_TOKEN:至少含 Account.Account Analytics 权限的 API TokenNUXT_PUBLIC_ 前缀的变量(如 NUXT_PUBLIC_HOME_URL 自定义首页)在 Workers 场景下需同时配置在 Build 与 Runtime 的 Variables and Secretshttps://<你的域名>/dashboard,使用 NUXT_SITE_TOKEN 登录NUXT_REDIRECT_STATUS_CODE 调整)SinkCool 登录 sink.cool/dashboardNUXT_PUBLIC_* 在 Worker 部署下要同时配 Build 与 Runtime,否则前端读不到NUXT_PUBLIC_KV_BATCH_LIMIT),大批量迁移需分批NUXT_LINK_CACHE_TTL 默认 60 秒,改链后可能不会立即生效NUXT_PUBLIC_PREVIEW_MODE 下链接 5 分钟过期且不可编辑,勿在生产误开