短链接管理
随机短码或自定义短码,带标题备注、启用停用;支持批量启停、批量删除、批量改分组,以及 CSV 导入导出。
不是「能跳转就行」的玩具。从短码策略到访问统计,一套自建服务该具备的能力都在里面。
随机短码或自定义短码,带标题备注、启用停用;支持批量启停、批量删除、批量改分组,以及 CSV 导入导出。
永久、1 小时、1 天、7 天、30 天或自定义到期时间;还能设「最大访问次数」,用完自动失效。
单条链接可设访问密码。验证通过后 12 小时内免重复输入,靠 HMAC 签名 Cookie 记住,不用每次转发都问一遍。
302 / 301 / 307 / 中间提示页四种方式,按「全局默认 → 分组 → 单条链接」逐级覆盖,任意一级都可跟随上级。
分组可设名称、颜色、描述和分组级跳转方式,一眼分清推广渠道。删除分组不会连带删除里面的链接。
按天趋势画访问量与独立访客双线,另有来源渠道、设备 / 系统 / 浏览器分布和访问明细,IP 自动脱敏。
每条短链一键出码,支持自定义尺寸与 L/M/Q/H 纠错等级,可直接下载 PNG 拿去印刷或贴物料。
API Key 鉴权,创建、查询、修改、删除短链,查统计、查分组全都能脚本化,接进你自己的发布流程。
后台登录与短链密码都有失败次数限制,超限临时封禁来源。体检、在线备份、重置密码全程不用停服。
内嵌在二进制里的管理界面,不需要 Node 构建,深浅色双主题跟随系统。以下是真实截图。
刻意不用框架,刻意不引前端构建链。换来的是一个可以直接 scp 上去就跑的静态二进制。
路由走 net/http 原生实现,没有 Gin、没有 Echo。依赖越少,升级越省心,出问题时能读懂每一行。
默认用 modernc.org/sqlite,不需要 gcc,可以直接交叉编译出静态二进制;想换 mattn/go-sqlite3 加个 build tag 即可。
模板和静态资源用 go:embed 打包,不需要 Node、不需要 npm install。部署时只有孤零零一个可执行文件。
自己实现的 QR 编码器,不引第三方库,已通过 zxing 解码交叉验证,出码能被主流扫码器正确识别。
备份就是拷一个 .db 文件。内置 VACUUM INTO 在线备份,服务运行中执行也不会读到写了一半的状态。
install / doctor / backup / reset-password / logs —— 体检、备份、找回密码都不用停服,也不用翻文档。
从源码到线上服务,全程不到两分钟。默认只监听 127.0.0.1,前面挂 Nginx 或 Caddy 反代即可。
在本地(或任意有 Go 的机器)产出目标平台的静态二进制,无 CGO 依赖。
export GOPROXY=https://goproxy.cn,direct
make deps
make build-linux # bin/linkfly-linux-amd64
就一个文件,scp 上去即可,不需要装运行时、不需要拉依赖。
scp bin/linkfly-linux-amd64 root@服务器:/root/linkfly
自动建用户、建数据目录、写配置、注册 systemd 并启动,最后打印初始密码。
ssh root@服务器 "chmod +x /root/linkfly && \
/root/linkfly install --base-url https://hfw.me"
$ sudo ./linkfly install --base-url https://hfw.me
✓ 链飞 · LinkFly 安装完成
────────────────────────────────────────────────
服务名称 linkfly.service
程序位置 /usr/local/bin/linkfly
配置文件 /etc/linkfly/linkfly.env
数据目录 /var/lib/linkfly
监听地址 127.0.0.1:8080
运行状态 运行中
────────────────────────────────────────────────
管理后台 https://hfw.me/admin
管理员账号 admin
初始密码 YSmF3NCNm2EaAk
────────────────────────────────────────────────
⚠ 该密码只显示这一次,登录后请立即修改
装完默认是 127.0.0.1:8080,用 Caddy 反代到你的域名即可自动签发 HTTPS 证书(配置示例在仓库 deploy/Caddyfile)。反代后保持 HFW_TRUST_PROXY=true,统计才能拿到访客真实 IP。想直接对外就跑 install --public。
后台生成 API Key 后即可调用。所有 /api/v1/* 接口统一返回 { ok, data } 结构。
$ curl -X POST https://hfw.me/api/v1/shorten \
-H "X-API-Key: hfw_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"target": "https://example.com/a/very/long/path",
"code": "spring26",
"title": "春季大促",
"group": "市场推广",
"expires_in": 604800,
"password": "8888",
"redirect_type": "page"
}'
POST /api/v1/shorten创建短链接GET /api/v1/links列表与检索GET /api/v1/links/{code}查询单条PUT /api/v1/links/{code}修改短链接DELETE /api/v1/links/{code}删除短链接GET /api/v1/stats/{code}访问统计GET /api/v1/groups分组列表GET /qr/{code}.png二维码(免鉴权)