Skip to content

基于 Node.js + MongoDB 技术栈的小众开源的短链接程序 —— Lynx ​

前言 ​

开源的短链接程序有很多,像 YOURLS、Shlink 等大多采用 PHP + MySQL 技术栈。但我之前的服务器配置一般,再加上自己写的小玩具使用的是 Node.js + MongoDB,这些环境已经装在服务器上了,因此更倾向于寻找一款同样基于这套技术栈的短链接程序。

搜索了很久才找到这么一款基于 Express + MongoDB 的短链接程序——Lynx。这个开源项目非常小众,Star 数只有两百多。而更巧的是,我用了一个多月后,它的仓库就直接归档了,到现在甚至连网页文档也进不去了……不过好在这个项目的完成度和稳定性都还可以,用了一年多没出过什么问题,配套的文档也是开源的,可以直接去仓库里看 Markdown 文件。

我对于短链接的需求非常的简单,主要就是用它在文章里跳转网盘链接,方便链接失效的时候直接替换,不用重新编辑文章。

满足以下几点就够用了:

  • 支持自定义 Slug
  • 支持 Slug 包含多个斜杠
  • 支持导出 JSON 或者 CSV,方便数据迁移

Lynx 正好满足以上这些功能 ,并且还支持统计短链接的访问次数,也可以直接对接 Umami 记录更加详细的统计数据。更重要的 Lynx 部署起来简单,页面也很清爽,没有什么多余的功能。对于我的需求来说可以说是比较完美了!

安装 ​

直接安装 ​

如果你和我一样服务器已经有 Node.js 环境了,可以直接安装 Lynx。对于熟悉 Node.js 的用户来说,安装还是比较容易的,下面简单描述一下安装思路。

Lynx 前端使用的是 Vue,后端使用的是 Express,因此需要先将前端构建后,再启动后端。

拉取源码。

sh
git clone https://github.com/Lynx-Shortener/Lynx

进入前端目录,安装依赖并构建。

sh
cd Lynx/frontend && pnpm i && pnpm build

接着配置好环境变量,启动后端即可。

Docker ​

对于一般用户,还是建议直接使用 Docker 运行,省去了安装 Node.js 环境和构建前端的步骤,更加的方便。

yaml
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

初始化 ​

给域名做好反代后,访问 https://go.example.com 会自动跳转到登录页面,点击下方的 “Register” 跳转到注册页面。

登录
登录

尽管我们在环境变量中设置 ENABLE_REGISTRATION=false 不允许注册,但是第一个用户还是可以注册的,因此不需要调整环境变量,并且这第一个用户会自动设置成管理员。

需要注意的是密码要求大于 12 个字符并且包含大小写、数字与符号。

注册
注册

功能演示 ​

添加短链接 ​

点击右上角的 “Add Link” 就可以添加一个短链接,上方的 “Desitination URL” 为跳转的目标

下方的 “Custom Slug” 可以自己填写,也可以直接留空

添加短链接
添加短链接

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

主页
主页

导入与导出 ​

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

导入
导入

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

导出
导出

二维码 ​

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

二维码
二维码

总结 ​

以上基本就是 Lynx 的所有功能了,相比于其他成熟的项目来说功能不算丰富,但最核心的短链接功能使用体验还是不错的,并且 Lynx 也是支持 API 的,如果你需要将它集成到你的程序中,可以自行查阅一下文档。

不过目前我已经切换到了 Shlink + PostgreSQL,一方面是它自带统计功能,不需要配合 Umami,也就不需要前端跳转,跳转速度上会更快一些,另一方面是其他大部分程序用的也都是 PostgreSQL,备份数据库的时候方便一些。

Last updated:

Evoxt:Evoxt:
最便宜的亚太优化线路 —— 马来西亚 电信 GIA / 联通 9929 仅需 $3.32 起!
95 折优惠码AFF2377-DEV
🎉银河录像局:
Netflix / Spotify/ ChatGPT / Claude 等 AI 流媒体一站式合租平台!
95 折优惠码zhichao
关注微信公众号
优化线路
Evoxt

Evoxt

最便宜的亚太优化线路

马来西亚 电信 GIA / 联通 9929
优惠码:AFF2377-DEV

1C / 512MB / 5GB SSD / 150GB 流量

$3.32/月
优化线路
搬瓦工

搬瓦工

15 个机房自由切换

洛杉矶 DC6 机房
电信 / 联通 GIA + 移动 CMIN2

2C / 2GB / 40GB SSD / 1TB 流量

$49.99/季