news 2026/9/15 15:26:05

10分钟跑通自己的短链接站:kutt 自托管零配置上手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
10分钟跑通自己的短链接站:kutt 自托管零配置上手

10分钟跑通自己的短链接站:kutt 自托管零配置上手

【免费下载链接】kuttFree Modern URL Shortener.项目地址: https://gitcode.com/GitHub_Trending/ku/kutt

想发给同事的链接有 300 多个字符,往 IM 里一贴折了两行,对方还得全选复制。你要的其实就是一条几个字符的短链,随手转发、点击数还能随时看。kutt 就是一个免费、自托管的现代短链接服务(URL Shortener):默认用 SQLite 存数据,不用装数据库,仓库里没有构建步骤,clone 下来就能跑。下面这条流程大概 10 分钟能走完,顺手把按场景调参数和最容易踩的坑都讲了。

跑通它:4 条命令出第一条短链

唯一的前置条件是 Node.js 20 以上。打开终端,在你想放代码的目录里执行:

git clone https://gitcode.com/GitHub_Trending/ku/kutt cd kutt && npm install && npm run migrate && npm run dev

npm run migrate负责初始化数据库(跑 knex 迁移脚本),npm run dev带文件监听启动服务。浏览器打开localhost:3000,第一次访问会直接把你带到"创建管理员账户"页面,填好邮箱密码就进入主站。首页粘贴一条长 URL、点发送,6 个字符的短链就出来了;点进链接详情能看到每次点击的统计。

这里省事的原因是:默认数据库就是 SQLite,数据落在db/目录下一个文件里,端口默认 3000,你什么都不用准备。

更省事:Docker 一行启动

不想在机器上装 Node 的话,仓库根目录自带几套 compose 配置。最原味的是 docker-compose.yml,SQLite + 数据卷:

docker compose up

容器启动时会自动先跑迁移再启动应用(见 Dockerfile 最后的 CMD)。SQLite 数据文件被挂到命名卷里,custom/目录也做了挂载——后面要改主题就把文件放这里。想上 Postgres 或 MariaDB,换成 docker-compose.postgres.yml 或 docker-compose.mariadb.yml,按注释补上DB_PASSWORDDB_NAME等几个必需变量即可。

按场景调:所有参数都是环境变量

配置全靠环境变量,直接传或者写进.env文件都行,完整清单参考 env 配置模板,解析逻辑在 server/env.js——遇到没定义的变量启动会直接报错,拼错一个字母藏不住。

几个大概率要动的:

SITE_NAME=我的短链站 DEFAULT_DOMAIN=link.example.com JWT_SECRET=一串足够长的随机字符串 PORT=3000
  • DEFAULT_DOMAIN决定生成的短链长什么样,正式对外开放前一定先设好;
  • JWT_SECRET是登录态 token 的签名密钥,生产环境必填;
  • DISALLOW_ANONYMOUS_LINKS控制未登录能否建链,默认禁止,保持默认就对了;
  • TRUST_PROXY声明应用是否跑在 nginx 或 Cloudflare 后面。没有代理就设false,否则用户可以伪造 IP,统计页的访客 IP 会一片混乱。

这里有个坑,提前说:注册默认是关的(DISALLOW_REGISTRATION=true)。想开放注册,得先把邮件跑通——MAIL_ENABLED加一组MAIL_*变量,因为注册流程依赖验证邮件。内部给团队用,更干净的做法是开 OIDC(OIDC_ENABLED及相关变量),让同事拿现成的 SSO 登录,连注册都省了。

正式环境用npm start启动(自动带上--production),从这一刻起JWT_SECRET不填就起不来,这是故意的,别嫌它烦。

避坑:这四个地方最容易绊一下

  • 想换数据库驱动?sqlite3pg-native这两个 client 默认没装进依赖,得先手动npm install再改DB_CLIENT,否则启动报错很费解。
  • 自定义域名:短链可以挂你自己的子域名,CUSTOM_DOMAIN_USE_HTTPS控制生成的链接用不用 https。但注意这些域名的 SSL 证书要你自己签发挂载,应用不负责。
  • 接口被刷?ENABLE_RATE_LIMIT=true打开限流,启了 Redis 就用 Redis 计数,否则走内存。生产环境建议顺手把REDIS_ENABLED也开了,缓存和限流一起受益。
  • db/目录别乱动,那是 SQLite 的数据本体;用 Docker 的话对应的是那个db_data_sqlite卷。要备份,备份它。

回到开头那个场景:现在你 IM 里那条 300 字的链接已经变成 6 个字符,每次点开都留了记录。下一步值得做的事,按顺序排:绑定自己的域名让短链更像正式出品,开邮件或 OIDC 把注册放给团队,再把 CSS 和页面模板丢进 custom/ 目录换成你自己的皮肤。想深入源码,全部逻辑在 server/ 下,路由、数据模型、迁移脚本分目录放着,结构很直白。

【免费下载链接】kuttFree Modern URL Shortener.项目地址: https://gitcode.com/GitHub_Trending/ku/kutt

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 15:22:58

Proteus仿真PIC16F877:从最小系统到MPLAB X固件调试全攻略

简介:面向PIC16F877微控制器开发者,这份Proteus仿真与C语言实例包,围绕《基于Proteus的PIC16F877微控制器应用实例详解》设计,重在解决缺少实物开发板时难以验证嵌入式功能的问题,可直接在虚拟环境中完成从代码到电路的…

作者头像 李华
网站建设 2026/9/15 15:22:32

ARM7无功补偿控制器固件:Modbus+电容投切+谐波分析一体化方案

简介:本资源是一套基于ARM架构的低压无功补偿装置完整嵌入式开发资料,面向电力电子、自动化及嵌入式系统工程师,解决配电侧功率因数偏低、电压波动大、线路损耗高等实际工程问题。压缩包共94个文件,含50个头文件(.h&am…

作者头像 李华
网站建设 2026/9/15 15:20:13

Word页眉形状自动调整全攻略:从相对定位到VBA动态控制

1. 写在前面:为什么会有这篇“Word页眉形状自动调整”的折腾记录先交代一下背景。我平时的工作里,有相当一部分时间在跟 Word 排版打交道,特别是标书、技术方案、验收报告这类文档。这类文档有个共同的审美需求:页眉不能光秃秃地放…

作者头像 李华
网站建设 2026/9/15 15:17:27

用Codex合并CSV文件:一份清晰需求文档如何让AI自动搞定数据清洗

1. 项目背景与需求拆解1.1 为什么选 Codex 来干这活儿先交代一下背景。我手头有三份 CSV,分别是用户订单明细、用户基础信息、商品类目映射,需要按用户ID和商品ID合并成一份宽表,给下游的看板用。三份文件加起来大概两万行左右,不…

作者头像 李华