Chhoto URL 介绍与选型指南
Chhoto URL 自托管短链接服务认知篇:Rust/Actix + SQLite 极简架构、功能特性、官方部署形态溯源,与 Shlink/YOURLS/Kutt 的量化选型对比(v7.10.3,2026-10-30 实查)。
Chhoto URL 介绍与选型指南
目标:本文是 Chhoto URL 的认知篇,面向「自托管短链接服务怎么选、Chhoto URL 适合谁」的问题,基于官方资料完成全景溯源与选型对比。全部信息来自官方仓库与官方徽章接口的联网实查(查询日期 2026-10-30),不涉及本地实测数据;部署与配置的实测内容见本专栏后续篇章。
一、信息基准
本文为 Chhoto URL 认知篇,全部信息基于官方资料溯源编写,不涉及本地实测数据。查询日期为 2026-10-30。
| 项目 | 内容 |
|---|---|
| 软件名称 | Chhoto URL(Chhoto 为孟加拉语「小」,即 Small URL) |
| 本文信息基准版本 | v7.10.3(GitHub 最新 Release 实查,对应 git 标签 7.10.3) |
| 开源许可 | MIT(官方仓库 LICENSE 文件实查,源码包内 SPDX 标记 MIT) |
| 实现语言 | 后端 Rust(Actix Web 框架),前端原生 HTML + JavaScript(Pure CSS 样式) |
| 数据存储 | SQLite 单文件数据库(默认开启 ACID,可选 WAL 日志模式) |
| 官网 | https://chhoto.link |
| 官方文档 | 官方仓库 docs/ 目录(INSTALLATION.md、CLI.md、SECURITY.md 等) |
| 源码仓库 | https://github.com/SinTan1729/chhoto-url 与 https://codeberg.org/SinTan1729/chhoto-url(双镜像) |
| 容器镜像 | Docker Hub sintan1729/chhoto-url(官方推荐)与 ghcr.io/sintan1729/chhoto-url |
| 在线演示 | https://demo.chhoto.link(演示密码 chhoto-url-demo-pass,数据库每 15 分钟清空) |
| 维护方 | Sayantan Santra(SinTan1729),个人开源项目 |
| GitHub stars | 996(shields.io 官方徽章接口实查,2026-10-30) |
| 最近提交 | 昨天(shields.io last-commit 徽章实查,2026-10-30) |
💡 说明:Chhoto URL 的 Release 名称带
v前缀(如 v7.10.3),而 git 标签本身不带前缀(7.10.3),下载源码包时使用https://codeload.github.com/SinTan1729/chhoto-url/tar.gz/refs/tags/7.10.3这种不带v的标签路径(2026-10-30 实测可下载,压缩包约 217 KB)。
二、软件概述
Chhoto URL 是一款极简的自托管短链接服务,官方定位是「一个没有不必要功能的简单自托管短链接器,简洁与速度是本项目的核心追求」。它把任意长度的 URL 缩短为一个随机生成的短链,访问短链时直接以 HTTP 307/308 跳转到目标长地址,没有中转广告页、没有跳转等待页。
项目起源于 simply-shorten(draganczukp)项目:作者认为原版理念不错但缺少关键功能,且一个简单的短链服务竟带着约 200 MB 的 Java 运行时镜像,于是用 Rust 重写了整个后端,并补充了命中计数等必要功能。重写后 scratch 基础的容器镜像压缩后不足 6 MB,alpine 基础的镜像压缩后不足 10 MB,常规使用内存占用低于 15 MB(以上均来自官方 README v7.10.3 实查)。
维护节奏上有一个值得注意的「反直觉」声明:作者明确表示「长时间看不到活动不用担心,我认为这个项目已经完成(complete),而不是死亡(dead)」——不太可能再新增功能,但会修复每一个被报告的 bug,并持续跟进安全漏洞更新。2026-10-30 实查其最近提交就在前一天,星数 996 且持续增长,属于典型的「小而稳」型个人维护项目。如果你追求的是功能全面、多租户、团队协作,它不是合适对象;如果你要的是给自己(或小团队)部署一个占用极低、常年不用操心的私人短链服务,它正中靶心。
三、核心架构
3.1 技术栈与进程模型
Chhoto URL 是单进程单体服务:Rust 编写的 Actix Web 后端在一个静态链接二进制内同时承载 HTTP 服务、短链解析跳转、管理 REST API 与前端静态资源,前端以纯 HTML + 原生 JavaScript + Pure CSS 实现(无 Node 构建链、无前端框架运行时),数据落 SQLite 单文件数据库。整个服务没有外部依赖组件,不需要独立的数据库进程、消息队列或缓存层。
- 后端:Rust + Actix Web(官方 README 实查),面向
x86_64-unknown-linux-musl等目标静态编译,scratch 镜像内没有任何系统工具与 shell。 - 前端:构建产物由后端直接托管,管理界面支持移动端自适应与自动深色模式;可通过配置完全关闭前端,只保留 API。
- 存储:SQLite 单文件,默认 DELETE 日志模式 + EXTRA 同步级别(完全 ACID),官方强烈建议开启 WAL 模式提升并发读写性能;WAL 模式相关原理与调优可参考《SQLite PRAGMA 与配置调优详解》。
- 健康检查:应用在容器内部回环地址
127.0.0.1:1729上额外监听一个不对外暴露的/healthz路由,返回healthy/unhealthy,供编排层做存活探测(官方 docs/CLI.md 实查)。
3.2 分发形态
官方主推 OCI 容器镜像分发,Docker Hub 与 GHCR 双渠道同步发布(dev 标签仅 GHCR),同一镜像支持 linux/amd64、linux/arm64、linux/arm/v7、linux/riscv64 四种架构(官方 docs/INSTALLATION.md 实查)。镜像分三档:
| 镜像标签 | 基础 | 特点 | 适用 |
|---|---|---|---|
latest / scratch | scratch(空镜像) | 压缩后 <6 MB,无 shell、无调试工具 | 追求极限体积的生产部署 |
latest-alpine / alpine | alpine | 压缩后 <10 MB,含基础 Unix 工具 | 需要进容器排查、使用健康检查 wget 的常规部署 |
dev 系列 | alpine | 测试用途,仅发布到 GHCR | 上游开发测试,官方明确不建议生产使用 |
官方同时提供 Kubernetes Helm Chart(仓库 deploy/helm-chart 目录)与 Podman Quadlet 样例(chhoto-url.container),官方正式支持的运行方式为 Docker 与 Podman。除容器外,也可以参照仓库 Makefile 自行编译 Rust 二进制直接运行;社区还有非官方的 FreeBSD port 与 NixOS 包(官方 README「Related software」章节实查,非官方支持)。
3.3 认证与 API 层
认证支持三种方式并可组合:固定管理密码(CHHOTO_PASSWORD,可存 Argon2 哈希)、OIDC 对接(Authelia/Authentik/Pocket ID 等外部身份源)、面向程序调用的 API Key(X-API-Key 请求头)。全部管理操作(增删改查短链)都有对应的 REST API,官方维护了一个同作者开发的命令行客户端 chhoto-url-cli,以及浏览器扩展、Raycast 扩展、Home Assistant 插件、MCP Server 等第三方生态(官方 docs/TOOLS.md 实查)。
💡 技术拓展:自托管短链服务的「跳转语义」有临时与永久两种可选。HTTP 301/308 为永久重定向,浏览器与搜索引擎会长期缓存映射,短链目标变更后旧缓存可能不失效;HTTP 307/308 中的 307 与「临时」302 语义类似但保留请求方法,浏览器每次都会回来问服务器。Chhoto URL 通过
CHHOTO_REDIRECT_METHOD在TEMPORARY(307)与PERMANENT(308)间选择,默认PERMANENT(官方 docs/INSTALLATION.md 实查)。短链服务一般建议用临时跳转,避免目标地址调整后被浏览器缓存卡住——本专栏部署篇实测即采用TEMPORARY。
四、功能特性
以下特性清单来自官方 README(v7.10.3,2026-10-30 实查):
- 任意长度 URL 缩短为随机生成的短链;可选自定义短链别名(官方特别指出这在同类中「出奇地少见」)。
- 短链支持设定到期时间,到期自动失效;公开模式下可强制所有新建短链带过期时间。
- 短链创建后可编辑目标地址,也可临时禁用/启用。
- 每条短链可附加备注(notes),管理界面支持按短链、长链、备注过滤搜索。
- 访问短链立即重定向,无中转页;以隐私友好方式统计命中次数——只记次数,不记访问者任何信息。
- 一键生成短链二维码,方便移动端分享。
- 支持 OIDC 认证(Authelia、Authentik、Pocket ID 等);管理密码与 API Key 均支持存 Argon2 哈希而非明文。
- 提供完整的 JSON API(官方称「JSON-RPC adjacent API」),配合 API Key 可脱离网页完成全部管理操作。
- 公开模式(Public Mode):任何访客可建短链,列出与删除仍需管理员密码;甚至可以完全关闭前端只留 API。
- 站点标题可自定义,可挂载自定义落地页;可配置
Cache-Control响应头。 - SQLite 存储默认 ACID,可选 WAL 模式与放弃持久性换取吞吐(
CHHOTO_SQLITE_ENSURE_ACID=False)。 - 数据库自动备份:初始化时与每日 3-4 点间自动备份,保留最近 3 份初始化备份与 7 份每日备份。
- 长链接协议白名单:默认仅允许
http、https、ftp、magnet,可按需追加。
同时官方在 README 中明确了「拒绝实现」的边界:不做任何跟踪/埋点、不做用户管理(需要给全组织用就「一人一容器」或换别的)、无 Cookie 弹窗与新闻订阅、无付费墙与求捐赠横幅。
五、快速开始(官方最小部署形态)
以下为官方仓库 deploy/compose.yaml(v7.10.3)的最小部署形态摘要,本文认知篇不做本地实测,逐项配置详解与本机实测见本专栏部署篇。
services:
chhoto-url:
image: sintan1729/chhoto-url:alpine
restart: unless-stopped
ports:
- 4567:4567
environment:
- CHHOTO_DB_URL=/data/urls.sqlite
- CHHOTO_SQLITE_USE_WAL_MODE=True
- CHHOTO_PASSWORD=TopSecretPass # 官方示例原值,部署前必须修改
- CHHOTO_EXIT_ON_NO_AUTH=True
- CHHOTO_REDIRECT_METHOD=TEMPORARY
- CHHOTO_SLUG_STYLE=Pair
volumes:
- data:/data
healthcheck:
test: wget -qO- http://127.0.0.1:1729/healthz || exit 1
interval: 60s
start_period: 10s
retries: 3
timeout: 10s
volumes:
data:
启动后浏览器访问 http://<服务器IP>:4567 输入管理密码即可进入管理界面;Compose 环境准备可参考《Docker Compose 安装与多容器编排》。命令行侧的最小验证形态为官方 CLI.md 提供的无认证只读接口:
curl http://localhost:4567/api/version # 查询服务端版本
curl http://localhost:4567/api/siteurl # 查询配置的站点 URL
两个路由无需认证即可访问,是部署后确认服务存活最快的探针(官方 docs/CLI.md 实查)。
六、适用场景与限制
6.1 适用场景
- 个人或家庭自托管:NAS/VPS 上挂一个常驻短链服务,占用个位数 MB 内存与不到 10 MB 的镜像,几乎无存在感。
- 域名换归属后保链接:自建短链域名在自己手里,公众号/印刷品/文档里只发短链,目标地址随时可改。
- 需要命中统计但拒绝用户画像:只数次数不记访客,符合隐私最小化取向。
- 面向程序调用的短链基础设施:完整 REST API + API Key,可嵌入自动化脚本、浏览器扩展、Raycast 等工作流。
- 内网/团队工具链:配合 OIDC 对接已有身份认证栈(Authelia/Authentik),作为内网门户的短链组件。
6.2 限制
- 单用户哲学:无用户体系、无团队空间、无权限分级,公开模式也只是「谁能建链」的开关,不适合多租户运营。
- SQLite 单机存储:无主从/集群形态,官方也未提供多实例共享存储方案;超大流量(每秒数百读写)场景需自行权衡 ACID 与吞吐开关。
- 传输加密不内置:管理密码明文传输,官方强烈建议前置 Caddy/Nginx 反代做 HTTPS(反代选型可参考《Caddy 2.11 介绍与选型指南》与《Caddy 2.11.7 Docker Compose 部署指南》)。
- 功能克制:无 UTM 参数追加、无 A/B 跳转、无地理/设备分流、无访问日志导出,这些是设计上的「不做」而非缺陷。
- 短链别名总量上限:形容词-名词对(Pair 风格)自动生成的组合空间有限,官方建议超过数千条短链时改用 UID 风格并把长度设为 16 以上。
七、同类选型对比
自托管短链领域常见方案横向对比(架构定性信息按各项目官方 README 惯常口径归纳;星数与版本仅 Chhoto URL 为本次 shields.io/Release 实查值,其余项目未逐一实查、不落具体数字):
| 维度 | Chhoto URL | Shlink | YOURLS | Kutt |
|---|---|---|---|---|
| 实现语言 | Rust(Actix Web) | PHP | PHP | Node.js(TypeScript) |
| 数据存储 | SQLite 单文件 | SQLite/MySQL/PostgreSQL | MySQL/MariaDB | PostgreSQL/SQLite |
| 资源定位 | 极致轻量(<15 MB 内存、<10 MB 镜像) | 功能全面型 | 经典 LAMP 风格 | 功能丰富、界面现代 |
| 多用户/多租户 | 明确不做 | 支持(API Key 多域) | 插件生态扩展 | 支持 |
| 管理 API | REST + API Key,全功能覆盖 | REST API 成熟 | REST API + 插件 | REST API |
| 认证方式 | 密码/Argon2、OIDC、API Key | API Key + 用户体系 | 账号密码 | 账号 + JWT |
| 部署形态 | OCI 镜像(双注册表、四架构)+ Helm/Quadlet | Docker 镜像 | Docker/传统 PHP 主机 | Docker 镜像 |
| 维护哲学 | 「完成而非死亡」,修 bug + 安全更新,克制加功能 | 活跃迭代 | 长期稳定、更新平缓 | 活跃 |
| 量化锚点(2026-10-30 实查) | v7.10.3、GitHub stars 996、最近提交昨天 | 未逐一实查 | 未逐一实查 | 未逐一实查 |
选型解读:要「给自己用、十年不坏、占用极低」选 Chhoto URL;要「多用户、多域名、详尽统计报表」选 Shlink 或 Kutt;要「老牌稳定、PHP 主机即开即用、插件多」选 YOURLS。Chhoto URL 的差异化在于把「轻」做成了硬指标——镜像体积、内存占用、功能面、依赖数同时收敛,这在本赛道没有第二个同量级选手(本表对比对象均为独立开源项目,平台专栏暂未收录,勿与本文混淆)。
八、参考链接
- 官方网站:https://chhoto.link
- GitHub 仓库:https://github.com/SinTan1729/chhoto-url
- Codeberg 镜像:https://codeberg.org/SinTan1729/chhoto-url
- Docker Hub:https://hub.docker.com/r/sintan1729/chhoto-url
- GHCR 镜像:https://ghcr.io/SinTan1729/chhoto-url
- 安装与配置文档(仓库内):https://github.com/SinTan1729/chhoto-url/blob/main/docs/INSTALLATION.md
- API/CLI 使用文档(仓库内):https://github.com/SinTan1729/chhoto-url/blob/main/docs/CLI.md
- 官方 CLI 客户端:https://github.com/SinTan1729/chhoto-url-cli
- 在线演示:https://demo.chhoto.link
- 信息基准与星数取证:GitHub Releases Feed 与 shields.io 徽章接口,查询日期 2026-10-30