最近一直有人在问,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
# 新建文件夹 shlink 和 子目录
mkdir -p /volume2/docker/shlink/data
# 进入 shlink 目录
cd /volume2/docker/shlink
# 运行服务端容器
docker run -d \
--restart unless-stopped \
--name shlink-server \
-p 8019:8080 \
-e DEFAULT_DOMAIN=st.laosu.ml:444 \
-e IS_HTTPS_ENABLED=true \
-e GEOLITE_LICENSE_KEY=<你的 GeoLite2 许可证密钥> \
-e DB_DRIVER=mysql \
-e DB_HOST=192.168.0.197 \
-e DB_PORT=3307 \
-e DB_USER=shlink \
-e DB_PASSWORD=123456 \
-e DB_NAME=shlink \
shlinkio/shlink:stable
# 运行客户端容器
docker run -d \
--restart unless-stopped \
--name shlink-web-client \
-p 8020:80 \
shlinkio/shlink-web-client
也可以用 docker-compose
安装,将下面的内容保存为 docker-compose.yml
文件
version: '3'
services:
server:
image: shlinkio/shlink:stable
container_name: shlink-server
restart: unless-stopped
ports:
- 8019:8080
volumes:
- ./data:/data
environment:
- DEFAULT_DOMAIN=st.laosu.ml:444
- IS_HTTPS_ENABLED=true
- GEOLITE_LICENSE_KEY=<你的 GeoLite2 许可证密钥>
- DB_DRIVER=mysql
- DB_HOST=192.168.0.197
- DB_PORT=3307
- DB_USER=shlink
- DB_PASSWORD=123456
- DB_NAME=shlink
client:
image: shlinkio/shlink-web-client
container_name: shlink-web-client
restart: unless-stopped
ports:
- 8020:80
然后执行下面的命令
# 新建文件夹 shlink 和 子目录
mkdir -p /volume2/docker/shlink/data
# 进入 shlink 目录
cd /volume2/docker/shlink
# 将 docker-compose.yml 放入当前目录
# 一键启动
docker-compose up -d
运行
一开始会下载 GeoLite2
数据库
在浏览器中输入 http://群晖IP:8019
访问服务端,但实际上只能看到 404
错误
接下来要使用以下命令生成新的 API
密钥
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/shlink
Shlink — The URL shortener — Documentation
地址:https://shlink.io/documentation/