Chhoto URL 是用 Rust 写就的极致自托管短链服务,Docker 镜像压缩后仅 6MB、运行内存不到 5MB。支持自定义短链、自动过期、QR 码生成、JSON-RPC API 接口,移动端友好 UI 加深色模式,零追踪零 Cookie 的极简设计哲学,Docker 一行命令即可部署上线。
🎤 引言
自托管短链工具这么多,为什么偏偏推荐这个 913 Stars 的小项目?
因为它太轻了 —— Docker 镜像压缩后 <6MB,运行内存 <5MB,单二进制 Rust 构建,用 SQLite 存数据。整个项目作者明确表态:"我看这玩意儿做完了,不打算加新功能,只修 bug"。这种"极简主义"在臃肿成风的开源圈属实清流。
名字 Chhoto 来自孟加拉语 ছোট = "小"。合起来就是 Small URL。作者 SinTan1729 用它替代同类 Java 写的 ~200MB 镜像,用 Rust 重写后砍了 97% 体积。
今天聊聊这个轻量得让人感动的短链服务。
⭐ 核心功能
1. 短链生成与重定向
最基础也是最重要的功能 —— 把长链接压成短链接。打开短链直接 302 跳到原 URL,没有中间广告页、没有强制等待(某些商业短链的尿性)。
2. 自定义短链 + 自动过期
- 用户可以指定短链后缀(比如
mysite.com/ref-vip),不是每家短链都支持这功能 - 可设置过期时间,过期后访问自动 404
- 短链创建后可编辑长链目标、加备注
3. 隐私优先的点击统计
只记录"点了几次",不记录 IP、不记录 UA、不写 Cookie。不像某些短链服务,访问一次给你来个用户画像。这点作者明确写在 README 的"Bloat that will not be implemented"。
4. QR 码生成
每个短链一键生成 QR 码,分享到微信群、印刷品、海报都方便。
5. 完整的 JSON-RPC API
不只有 Web UI,还提供 API 给自动化工具调用:
POST /api/shorten创建短链POST /api/expand还原长链- 支持 API Key + Hashed Password 鉴权
6. 公共模式 + 完全隐藏前端
支持两种部署姿态:
- 私有模式:必须登录才能创建短链
- 公共模式:任何人可创建短链,但删除/列表需要管理员密码
- 还可彻底禁用前端,只跑 API 服务
7. 自定义落地页
如果不想直接重定向,可以配置一个 HTML 落地页(类似"您即将访问..."的中转页面),适合营销场景。
📥 安装使用
方式一:Docker Compose(强烈推荐)
新建 compose.yml:
services:
chhoto-url:
container_name: chhoto-url
image: sintan1729/chhoto-url
restart: unless-stopped
ports:
- 4567:4567
volumes:
- ./database:/database
- ./html:/html
environment:
- CHHOTO_URL=https://s.yourdomain.com
- CHHOTO_PASS=yourStrongPassword
- CHHOTO_PORT=4567
- CHHOTO_USE_HTTPS=true
- CHHOTO_SLUG_STYLE=UID
- CHHOTO_SLUG_LENGTH=8
- CHHOTO_PUBLIC_MODE=false
- CHHOTO_DISABLE_FRONTEND=false
- CHHOTO_SQLITE_USE_WAL_MODE=true启动:
docker compose up -d浏览器打开 http://your-ip:4567 即可使用。
方式二:Docker CLI
docker run -d \
--name chhoto-url \
--restart unless-stopped \
-p 4567:4567 \
-v ./database:/database \
-v ./html:/html \
-e CHHOTO_PASS=yourStrongPassword \
sintan1729/chhoto-url方式三:直接编译(Rust 工具链)
git clone https://github.com/SinTan1729/chhoto-url.git
cd chhoto-url
cargo build --release
./target/release/chhoto-url编译产物就是单个二进制,扔到任何 Linux/Windows/macOS 机器都能跑。
前置准备:
- Docker 或 Rust 1.75+ 工具链
- 一个反向代理(Caddy / Nginx)做 HTTPS(强烈建议,README 作者也强调)
- 端口
4567可用
官方推荐配置(HS512 passkey + UID 长度 16):
environment:
- CHHOTO_PASS=改成你的密码
- CHHOTO_SLUG_STYLE=UID
- CHHOTO_SLUG_LENGTH=16 # 想跑上万个短链就调大记得看完 INSTALLATION.md,WAL mode 强烈建议开,能大幅减少数据库卡顿。
🎯 适用场景
- 个人博客/作品的短链:把公众号、知乎、B站、GitHub 链接统一成自己域名的短链分享
- 技术文档中的长 URL:写文档时插入
https://yourdomain.com/api-doc比贴 200 字符的链接清爽 - 微信群/QQ群推广:微信会拦截部分长链,短链跳转更安全
- 营销活动临时链接:设个过期时间,活动结束自动失效,省得后台清理
- 极客的玩具/家庭实验室:跑在树莓派上都不成问题,资源占用忽略不计
- API 调用者:需要给爬虫、CI/CD 用的批量短链生成工具
🔍 对比/替代方案
| 项目 | 镜像大小 | 内存 | 语言 | 特点 |
|---|---|---|---|---|
| Chhoto URL | 6MB | <5MB | Rust | 极简、无追踪、Docker 易部署 |
| YOURLS | ~50MB | ~50MB | PHP | 老牌、自托管经典、需要 PHP+MySQL |
| Shlink | ~100MB+ | ~50MB | PHP/Rust 部分 | 功能丰富(QR、标签、统计)、有 Docker |
| Kutt | ~150MB | ~100MB | Node.js | 现代 UI、需 PostgreSQL/Redis |
| Polr | ~80MB | ~30MB | PHP/Lumen | 简单,但开发停滞 |
| UrlShortener (simply-shorten) | ~200MB | ~100MB | Java | Chhoto 作者参考的原始项目,被嫌太重 |
如果追求"装好就用、零追踪、低资源",Chhoto URL 是最舒服的选择。如果需要复杂的权限管理、团队协作、点击画像,请上 YOURLS / Shlink。
⚠️ 注意事项
- 必须 HTTPS:内置 HTTP 模式没有 TLS 加密,密码 API Key 都会裸传。生产环境一定要套 Caddy/Nginx 反代。
- 公共模式的边界:设为
CHHOTO_PUBLIC_MODE=true后,任何人可创建短链。你无法控制他们发布什么内容,短链服务可能被用来发违规链接(和你域名关联),需要自己审核或干脆关掉。 - 短链长度限制:默认 8 字符 UID 模式下,约能生成 ~280 万个独立短链。如果你要存几十万条链接,把
CHHOTO_SLUG_LENGTH调到 16 以上,否则可能撞库。 - 数据库备份:SQLite 单文件,建议每天
cp database.db backup/。虽然有 WAL 模式降低损坏风险,但硬盘爆了、神仙难救。 - API Key 安全:JSON-RPC API 鉴权用的密码虽然支持 hash 存储,但默认是明文在环境变量里。生产环境建议改成 Docker secrets 或 k8s Secret。
- 功能锁定:作者明确不打算加新功能。如果你的需求超出"创建+跳转+统计+过期"四件套,这项目就不适合你。
- 二次开发难度:作者单方面维护,二次开发需要 fork 自行维护。PR 接受度未知。
✅ 总结
Chhoto URL 是个"做完了就躺平"的少见项目。Rust 写就、6MB 镜像、5MB 内存、SQLite 存储、零追踪零 Cookie、JSON-RPC API、Docker 一键起 —— 对"轻量自托管"的需求来说几乎是终极答案。
它不是给企业团队用的,给极客、个人开发者、小团队、个人博客作者用的。装好扔 VPS 上能用好几年,不管维护。
适合人群:极客、个人博客作者、自托管爱好者、追求轻量的运维人员。
不适合人群:企业团队、需要复杂权限/审计、需要大量链接分析(GA/Click 漏斗等)的场景。
推荐指数:⭐⭐⭐⭐⭐(5/5,纯粹度满分)
去 GitHub 仓库 看看,Docker Hub 镜像 拉个下来试试,官方 demo(密码 chhoto-url-demo-pass)体验一下。