前言:为什么选择 Node.js + MongoDB 的短链接系统?
开源的短链接程序有很多,像 YOURLS、Shlink 等大多采用 PHP + MySQL 技术栈。
但我之前的服务器配置一般,再加上自己写的小玩具使用的是 Node.js + MongoDB,这些环境已经装在服务器上了,因此更倾向于寻找一款同样基于这套技术栈的短链接程序。
搜索了很久才找到这么一款基于 Express + MongoDB 的短链接程序——Lynx。
这个开源项目非常小众,Star 数只有两百多。更巧的是,我用了一个多月后,它的仓库就直接归档了,到现在甚至连网页文档也进不去了……
不过好在这个项目的完成度和稳定性都还可以,用了一年多没出过什么问题,配套的文档也是开源的,可以直接去仓库里看 Markdown 文件。
我对于短链接的需求非常简单,主要就是用它在文章里跳转网盘链接,方便链接失效的时候直接替换,不用重新编辑文章。
满足以下几点就够用了:
- 支持自定义 Slug
- 支持 Slug 包含多个斜杠
- 支持导出 JSON 或者 CSV,方便数据迁移
Lynx 正好满足以上这些功能,并且还支持统计短链接的 访问次数,也可以直接对接 Umami 记录更加详细的统计数据。
更重要的是,Lynx 部署起来简单,页面也很清爽,没有什么多余的功能。
对于我的需求来说可以说是比较完美了!
安装 Lynx:Node.js 与 Docker 双方案
方式一:直接安装(Node.js 环境)
如果你和我一样服务器已经有 Node.js 环境了,可以直接安装 Lynx。
对于熟悉 Node.js 的用户来说,安装还是比较容易的,下面简单描述一下安装思路。
Lynx 前端使用的是 Vue,后端使用的是 Express,因此需要先将前端构建后,再启动后端。
1. 拉取源码
git clone https://github.com/Lynx-Shortener/Lynx
2. 构建前端
cd Lynx/frontend && pnpm i && pnpm build
3. 配置环境变量并启动后端
配置好环境变量后,启动后端即可。
方式二:使用 Docker 一键部署(推荐)
对于一般用户,还是建议直接使用 Docker 运行,省去了安装 Node.js 环境和构建前端的步骤,更加方便。
services:
lynx:
image: jackbailey/lynx:latest
container_name: lynx
restart: unless-stopped
network_mode: host
environment:
- EXPRESS_PORT=3000 # 端口
- DOMAIN=https://go.example.com
# MongoDB 数据库
- DB_HOST=127.0.0.1
- DB_PORT=27017
- DB_USER=admin
- DB_PASSWORD=<password>
- HOME_REDIRECT=/dash/overview
- ENABLE_REGISTRATION=false
- NODE_ENV=production
- DEMO=false
# 生成随机字符并填入
- JWT_KEY=<random>
- USE_HTTPS=true
- CORS=*
- URL_LENGTH=8
- URL_SET=standard
- URL_ONLY_UNIQUE=false
- UMAMI_SITEID=<site_id>
- UMAMI_URL=https://umami.is/script.js
# Umami 需要开启前端重定向,会略微增加跳转延迟
- FORCE_FRONTEND_REDIRECT=true
初始化 Lynx:首次登录与管理员注册
给域名做好反代后,访问 https://go.example.com 会自动跳转到登录页面,点击下方的 “Register” 跳转到注册页面。

尽管我们在环境变量中设置 ENABLE_REGISTRATION=false 不允许注册,但是第一个用户还是可以注册的,因此不需要调整环境变量,并且这第一个用户会自动设置成管理员。
注意: 密码要求大于 12 个字符并且包含大小写、数字与符号。

功能演示:Lynx 的核心功能展示
1. 添加短链接
点击右上角的 “Add Link” 就可以添加一个短链接,上方的 “Destination URL” 为跳转的目标。
下方的 “Custom Slug” 可以自己填写,也可以直接留空。

接着就可以在首页看到刚才添加的短链接了。
如果你没有填写 Slug,系统会自动生成,可以在环境变量中通过 URL_LENGTH 与 URL_SET 这两项来修改自动生成的 URL 长度与字符。

2. 导入与导出短链接数据
Lynx 支持从 Shlink、YOURLS 以及 Lynx 自身中导入短链接,直接将对应的文件上传即可。

同样的,Lynx 自然也支持导出,可以直接将所有短链接导出到 JSON 或者 CSV 中。
导出的文件中不但包含了 链接和 Slug,还有 创建、修改的时间 以及 访问次数。

3. 生成二维码
点击链接后面的三个小点还可以获取到对应的二维码,可以直接右键将其保存到本地使用。

总结:Lynx 的优缺点与使用体验
以上基本就是 Lynx 的所有功能了。
相比于其他成熟的项目来说功能不算丰富,但最核心的短链接功能使用体验还是不错的。
并且 Lynx 也是支持 API 的,如果你需要将它集成到你的程序中,可以自行查阅一下文档。
不过目前我已经切换到了 Shlink + PostgreSQL,原因主要有两点:
- Shlink 自带统计功能,不需要配合 Umami,也就不需要前端跳转,跳转速度更快;
- 大部分程序使用 PostgreSQL,备份数据库时更方便。
常见问题解答(FAQ)
Q1:Lynx 还能正常使用吗?
A:可以。虽然仓库被归档,但项目本身功能完整,依然可以正常部署与使用。
Q2:Lynx 支持 HTTPS 吗?
A:支持。只需在环境变量中设置 USE_HTTPS=true 并配置反向代理即可。
Q3:可以多用户使用吗?
A:可以。第一个注册用户为管理员,可创建其他用户账号。
Q4:如何备份 Lynx 数据?
A:直接导出 JSON 或 CSV 文件,或备份 MongoDB 数据库。
Q5:Lynx 是否支持 API?
A:支持。可通过 REST API 创建、查询、删除短链接,适合自动化集成。
原创文章,作者:KUKU,如若转载,请注明出处:https://wankewu.com/linux/1182.html

评论列表(1条)
这项目居然归档了?还好功能稳!