先把结论放前面:一小时、零成本、一个你自己的短链接服务,跑在 Cloudflare Workers 上。
实例:sink.yuanbixue.com,已经在跑了。密码是sink123456
为什么是 Sink
Sink 是一款开源短链接工具,亮点就三个:
- 100% 跑在 Cloudflare Workers 上——Workers 免费额度每天 10 万次请求,个人用绰绰有余
- Nuxt 3 全栈——前后端一套代码,部署就是
wrangler deploy一条命令 - 内置分析——点击统计、热力图、来源/地区/浏览器筛选、CSV 导出,全有
比自建 Shlink/YOURLS 省一台服务器,比用第三方 SaaS 安心。
部署七步走
1. Fork 仓库
原项目:ccbikai/Sink,fork 到自己账号下。
2. 本地构建
git clone https://github.com/zyhui98/Sink.git
cd Sink
pnpm install
pnpm run build
3. 创建 KV Namespace
Cloudflare Dashboard → Workers & Pages → KV,建一个 Namespace,拿到 ID 填到 wrangler.jsonc 里。
Sink 用 KV 存短链接数据。
4. 部署
npx wrangler deploy
第一次部署给一个 xxx.workers.dev 域名,先测通。
5. 绑自定义域名
Dashboard 里给 Worker 绑个域名(如 sink.yuanbixue.com),CDN 自动生效,不用手动配 DNS。
6. 配环境变量
NUXT_SITE_TOKEN=你的登录密码
NUXT_CF_ACCOUNT_ID=你的账号ID
NUXT_CF_API_TOKEN=你的API Token # 查统计用
API Token 建议用 secret 方式:
echo "你的token" | wrangler secret put NUXT_CF_API_TOKEN
7. 最终 wrangler.jsonc
{
"name": "sink",
"main": ".output/server/index.mjs",
"kv_namespaces": [
{ "binding": "KV", "id": "你的KV ID" }
],
"analytics_engine_datasets": [
{ "binding": "ANALYTICS", "dataset": "see" }
],
"triggers": { "crons": ["0 0 * * *"] }
}
三个坑
坑一:Analytics Engine 必须手动启用
Sink 的统计依赖 Cloudflare Workers Analytics Engine。这东西不能通过 API 或 wrangler 启用。 作者试了 API Token、Headless Browser、MCP 调用 Cloudflare API——全部失败。
必须登录 Dashboard → Workers & Pages → Analytics Engine,手动点 Enable。再建一个 dataset(命名为 see),在 wrangler.jsonc 加上 binding。
这个坑的影响:没法 CI/CD 全自动。第一次必须人肉点一下。
坑二:缺 binding 导致报错
第一次部署没加 analytics_engine_datasets binding,打开统计面板直接报错。补上 binding 重新部署后硬刷新解决——浏览器缓存问题。
坑三:API Token 权限不够
NUXT_CF_API_TOKEN 必须有读 Analytics Engine SQL API 的权限。配错了统计面板能打开但数据加载不出来。
验证
部署完查一下数据有没有写入:
curl -X POST \
-H "Authorization: Bearer 你的token" \
"https://api.cloudflare.com/client/v4/accounts/{account_id}/analytics_engine/sql" \
-d "SELECT blob1 AS slug, SUM(_sample_interval) AS visits
FROM see
WHERE timestamp >= NOW() - INTERVAL '7' DAY
GROUP BY slug"
返回正常就是跑通了。
一句总结
比用第三方短链接服务安心,比自建 Shlink 省钱。Cloudflare 免费额度吃一辈子。
声明:来自猿必学,仅代表创作者观点。链接:https://eyangzhen.com/8478.html