使用 Docker 安装 Shlink 自建短网址
本文将指导如何在 Debian 11 下使用 Docker 安装 Shlink 搭建自建短网址服务。
PS:本文同时适用于任何可安装 Docker 的 Linux 发行版。
什么是短网址?
短网址,即 URL Shortener (缩略网址服务),一般我们使用 HTTP 协议
的 301
或 302
响应码,现在也有使用 307
或 308
来跳转一个长网址。
MDN 上有对这几个状态码的详细介绍:
301
和 302
有一个最重要的区别,前者会在浏览器留下缓存,后者不会,导致如果你需要精确的统计访客,尤其是有一些使用一个浏览器的重复访客会不准确,但是影响不大,而使用 302
每次都会请求服务器造成服务器资源紧张,所以一般没有特殊需求的话,使用 301
就行。
举一个典型的 301
跳转的例子:
1 |
|
我们可以看到,使用浏览器访问 http://u.sb/
的时候,会返回 HTTP/1.1 301 Moved Permanently
状态,对应跳转到 Location https://u.sb/
。
市面上开源和收费的短网址源码
众所周知,本人的短域名贼多,对各种短网址程序都有所研究,市面上主要有这几款免费的短网址程序:
- Blink - Easy-to-host, SSO-integrated, CDN-powered link shortener (+decoupled analytics) for teams. (Source Code)
AGPL-3.0
Nodejs
- Kutt - A modern URL shortener with support for custom domains. (Source Code)
MIT
Nodejs
- Polr - Modern, minimalist, modular, and lightweight URL shortener. (Source Code)
GPL-2.0
PHP
- Shlink - URL shortener with REST API and command line interface. Includes official progressive web application and docker images. (Source Code, Clients)
MIT
PHP
- YOURLS - YOURLS is a set of PHP scripts that will allow you to run Your Own URL Shortener. Features include password protection, URL customization, bookmarklets, statistics, API, plugins, jsonp. (Source Code)
MIT
PHP
我基本上都安装使用过,数据量大了以后性能基本惨不忍睹,对比以后还是使用 PHP Swoole 写的 Shlink 稍微占优,所以本文推荐安装 Shlink。
至于收费的?呵呵,没一个好用的,建议别去踩坑,我都帮你们踩过了。。。
安装 Shlink Server 和 Web Client
参考官网的安装教程,我们可以把 Server 和 Web Client 装在一个地方方便管理。
首先我们新建 /opt/shlink
和 /opt/shlink/data
目录:
1 |
|
然后我们新建一个 docker-compose.yaml
文件,假设你的域名是 example.com
,放在 /opt/shlink/docker-compose.yaml
:
1 |
|
GEOLITE_LICENSE_KEY
需要在 Maxmind 注册帐号获取,可以参考《[使用 Docker 安装 Plausible Analytics 自建网站统计]([Debian 11 使用 Docker 安装 Plausible Analytics 自建网站统计 - Johnny (johnnysxy.github.io)](Docker 安装 Plausible Analytics 自建网站统计 - Johnny (johnnysxy.github.io))》
MYSQL_ROOT_PASSWORD
和 MYSQL_PASSWORD
记得设置两个随机的密码,同时 MYSQL_PASSWORD
需要和 DB_PASSWORD
一致。
更多的环境变量参数可以参考这里。
然后拉取 Docker 镜像并运行:
1 |
|
然后获取一个 API Key:
1 |
|
注意第一个 shlink
是 Docker 容器名字,第二个 shlink
是命令名称。
所有 API 命令如下:
1 |
|
记得保存你的 API Key,下面会要用到。
安装配置 Nginx 反代
我们的 Docker Compose 配置文件中,Shlink Server 服务监听在 127.0.0.1:8080
端口,Shlink Web Client 监听在 127.0.0.1:8081
端口,所以我们需要配置 Nginx 反代来访问,假设你短网址是 https://example.com/
Web 客户端是 https://app.example.com/
example.com
段配置:
1 |
|
app.example.com
段配置:
1 |
|
最后记得参考本站 Nginx SSL 配置教程加上 SSL 证书后,即可访问 https://app.example.com/
:
点击 + Add a server
添加你的 Shlink 服务:
输入名称,URL 和 API Key 以后点击 Create server
即可使用:
如果你懒得搭建 Web Client,也可以使用官方现成的服务:
数据都是储存在浏览器本地的,可放心使用。
升级 Shlink
直接使用 Docker Compose 升级并删除旧的镜像文件:
1 |
|
备份 Shlink
我们可以定期备份数据库,导出命令如下:
1 |
|
请替换 随机 root 密码
为你的数据库 root
密码。