Kutt 是什么
Kutt 是一款现代开源 URL 缩短器,支持自定义域名,提供创建/编辑短链接、查看统计信息、管理用户等能力。

主要特点
-
自托管适配性强
- 零配置快速启动,无额外构建步骤;
- 数据库支持:默认 SQLite(无需额外安装),可选 Postgres、MySQL/MariaDB;
- 缓存支持:可选 Redis 提升性能;
- 权限管控:可禁用用户注册、关闭匿名链接生成,支持 OpenID Connect (OIDC) 登录。
-
丰富的自定义能力
- 自定义域名:支持绑定自有域名生成短链接;
- 链接精细化配置:可为短链接设置自定义 URL、访问密码、描述、过期时间;
- 链接管理:支持对已生成的链接进行查看、编辑、删除等操作。
-
统计与管理
- 私有统计:短链接的访问数据仅对创建者/管理员可见;
- 管理员面板:支持后台管理用户、审核/操作所有链接。
-
其他能力
- 主题定制:支持界面主题自定义;
- RESTful API:提供完整的接口,便于集成到其他系统。
安装
下面用 Docker Compose 方式部署(更适合 NAS 场景)。如果你平时也在折腾容器编排与服务运维,可以在 运维/DevOps/SRE 里找更多反代、证书、日志排障的相关经验帖。
Docker Compose
services:
kutt:
image: kutt/kutt:latest
container_name: kutt
ports:
- 3000:3000
volumes:
- ./db_data_sqlite:/var/lib/kutt
- ./custom:/kutt/custom
environment:
- DB_FILENAME=/var/lib/kutt/data.sqlite
- JWT_SECRET=sk-xxxxx
- DEFAULT_DOMAIN=192.168.31.90:3000
restart: always
参数说明(更多参数建议去看文档)
:::
DB_FILENAME:SQLite 数据库的文件路径
JWT_SECRET:用于对身份验证令牌进行签名(建议使用长随机字符串)
DEFAULT_DOMAIN:域名地址
:::
数据库/缓存扩展:如果你计划从 SQLite 切到 MySQL/Postgres,或加 Redis 提升性能,可以参考 数据库/中间件/技术栈 相关板块的选型与配置实践。
使用
1)访问 Web 界面
浏览器中输入 http://NAS的IP:3000 就能看到界面。

2)创建管理员账号
根据页面提示,先创建一个管理员账号。

创建成功后即可登录。

3)HTTPS 访问注意事项(重要)
TIP:页面需要通过 HTTPS 访问。我这里做了一个反代到 3001 端口,否则页面跳转可能会有问题。涉及 HTTPS、反代、证书、浏览器安全策略等内容时,也可以在 网络/系统 里查对应的排障思路。

基本功能演示
进入面板后界面比较简洁,下面按流程快速过一遍常用功能。

1)生成短链接
输入一条很长的访问链接,点击发送按钮。

短链接生成成功后,点击即可访问。

TIP:记得把 DEFAULT_DOMAIN 环境变量改成反代后的 IP 地址(或域名)与端口,否则生成的短链域名可能不符合你实际的访问入口。

2)管理已创建的链接
页面下方能看到前面添加的链接列表,可直接进行管理。

很多时候,短链接的价值并不只是“缩短”,而是不改原始链接的前提下,后续还能把跳转目标换到不同地方。

3)访问统计与密码保护
除了统计访问次数,还可以给短链接设置密码。

勾选显示高级选项后,还能进行更细致的配置。

其他设置这里不再展开,按需部署体验即可。

总结
Kutt 这个 URL 缩短器其实很适合自托管:部署简单、界面清爽、功能够用。但实际体验里有一个绕不开的点——需要 HTTPS 访问,否则登录/跳转等流程可能出现问题,所以通常要配合反代一起做。
这类工具的核心价值是什么?不是“更短”,而是“原地址不变,跳转可控”,再加上访问统计能力。对一般用户来说未必刚需;但如果你需要统一入口、活动投放、内网服务对外转发、或者做简单的点击统计,它就很实用。
综合推荐:⭐⭐(看个人需要,一般人未必用得上)
使用体验:⭐⭐⭐(需要 HTTPS 代理,上手使用简单)
部署难易:⭐⭐(简单)
更多 NAS、自托管、容器化部署的实战内容,可在 云栈社区 继续延伸阅读。
|