开源URL短链接服务Shlink
最近一直有人在问,docker 查询注册表失败的问题,目前老苏验证可用的方法有 2 个:
- 方法一(可用):
- 看过老苏以前文章的读者都知道,在遇到发布到 ghcr.io的镜像时,老苏都会推荐用dockerproxy,其实发布到hub.docker.com的镜像也是一样可用的

- 打开 https://dockerproxy.com,在第一步中输入镜像的 用户名/镜像名称:tag,点获取命令

- 用 ssh客户端登录到群晖,在命令行依次执行第二步~第四步的命令,权限不够的话,加sudo再执行
此方法虽然麻烦,但适合没有条件科学上网的人,如果你觉得好用的话,记得去给网站捐助一下,不过这个方法并不能解决注册表搜索的问题
更多的玩法请看官方文档:https://dockerproxy.com/docs
- 方法二(不可用)
从文档看,似乎有更简单的方式,但老苏没成功,大家可以试试看
注册表 –> 设置,选中 https://rigistry.hub.docker.com,点 编辑

勾选 启用注册表镜像,在 注册表镜像 URL 中填入 https://dockerproxy.com 

但老苏试了还是不行,当然你也可以找找其他的镜像 URL 试试,其中阿里和华为需要注册自己的账号

- 方法三(可用):
就用科学上网了,把 docker.com 加入到域名黑名单,一劳永逸
本文完成于
2月上旬;
什么是 Shlink ?
Shlink是一个自托管的开源URL缩短器,它提供了一个REST和一个CLI接口来与之交互。此外,还有一个官方的Shlink web客户端,通过使用Shlink的REST API,提供了一个漂亮的web UI来处理多个Shlink实例。
前期准备
获取 API key
Shlink 使用 MaxMind 的 GeoLite2 数据库来定位对您的短 URL 的访问。
Shlink 需要一个 GeoLite2 许可证密钥,用来定期下载新版本的数据库,确保数据始终是最新的。
这些许可证是免费的,只需要在 https://www.maxmind.com/en/geolite2/signup 注册用户,然后生成一个 license key 就可以
保存这个
License Key值很重要,因为也是只显示一次的

建数据库
老苏用了群晖自带的  MariaDB 10 数据库。

在 phpMyAdmin 中创建名为 shlink 的空数据库。
为便于说明,假设数据库密码为
123456

反向代理
短链接应该是放在公网用的,用局域网 IP 方式显然是不合理的
| 域名 | 局域网地址 | 说明 | 
|---|---|---|
| st.laosu.ml | 192.168.0.197:8019 | 服务端 | 
| stc.laosu.ml | 192.168.0.197:8020 | 客户端 | 
老苏的域名没有备案,在实际访问时是要带端口的,例如服务端是
https://st.laosu.ml:444
虽然老苏已经尽量缩短 url,但是实际上还是有点长,毕竟是二级域名,有条件的话,最好用短的一级域名 😂

SSL 还是没问题就全选

客户端也是一样的

环境变量
老苏用到了下面👇这些环境变量
| 可变 | 值 | 
|---|---|
| DEFAULT_DOMAIN | 用于此 Shlink实例的自定义域名 | 
| IS_HTTPS_ENABLED | 是否启用 https协议 | 
| GEOLITE_LICENSE_KEY | 您的 GeoLite2许可证密钥 | 
| DB_DRIVER | 使用值 mysql、maria、postgres或mssql来防止使用SQLite数据库 | 
| DB_USER | 数据库服务器的用户名 | 
| DB_PASSWORD | 数据库服务器的口令 | 
| DB_HOST | 运行数据库引擎的服务器的主机名 | 
| DB_PORT | 运行数据库服务的端口 | 
| DB_NAME | 要使用的数据库名称 | 
更多的环境变量请看官方文档:https://shlink.io/documentation/environment-variables/
命令行安装
如果你熟悉命令行,可能用 docker cli 更快捷
老苏安装的
stable版对应的版本是3.5.1
| 1 | # 新建文件夹 shlink 和 子目录 | 
也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
| 1 | version: '3' | 
然后执行下面的命令
| 1 | # 新建文件夹 shlink 和 子目录 | 
运行
一开始会下载 GeoLite2 数据库

在浏览器中输入 http://群晖IP:8019 访问服务端,但实际上只能看到 404 错误

接下来要使用以下命令生成新的 API 密钥
| 1 | docker exec -it shlink-server shlink api-key:generate | 

也可以从 终端机 进入

输入 shlink api-key:generate
每次执行都会生成不同的
API key,所以截图中的API key都是不一样的

在浏览器中输入 http://群晖IP:8020 就能看到客户端的主界面

点  + Add a server,因为前、后端在同一个局域网,所以写 IP  就可以了

添加成功后的主界面

创建一个短链接

生成的短链接类似于 –> https://st.laosu.ml:444/ivyCe

参考文档
shlinkio/shlink: The definitive self-hosted URL shortener
地址:https://github.com/shlinkio/shlinkShlink — The URL shortener — Documentation
地址:https://shlink.io/documentation/
