使用docker搭建Shlink个人向短链接服务

December 09, 2023
测试
测试
测试
测试
6 分钟阅读

#本文使用了宝塔面板,如不愿使用宝塔面板请自行解决部分技术性问题(例如docker安装,nginx反代)

最近淘了个比较短的域名,没什么用处,就打算搭建一个私人用的短链接服务,然后就找到了Shlink

Shlink 是一个基于 PHP 的开源项目,官网地址:https://shlink.io/,能够提供个人向短链接服务,可通过API、CLI或者web面板进行管理;支持自定义短网址、访问统计、标签管理、访问次数和时间限制、生成短链二维码等功能。建议搭建在国外服务器且仅作为个人服务使用。

一、获取GeoLite2数据库许可证密钥

Shlink利用MaxMind的GeoLite2数据库来定位访客,所以我们需要先生成许可证密钥

进入https://www.maxmind.com/en/accounts/current/license-key

如果没注册过的话先注册并登录

点击Generate new license key

按下图所示选择,许可描述随意,点击确定

将生成的许可秘钥记录下来,然后就可以关掉网页了(密钥只会展示一次,请妥善保存)

二、使用 docker 镜像安装 Shlink 并使用 nginx 反代

1.使用默认sqlite数据库

docker run:

docker run \
    --name my_shlink \
    -p 25600:8080 \
    -e DEFAULT_DOMAIN=yourshlink.com \
    -e IS_HTTPS_ENABLED=true \
    -e GEOLITE_LICENSE_KEY=Ojf****di****3X0 \
    shlinkio/shlink:stable

其中的

-p 25600:8080 \ 可以将25600替换为你想要映射的主机端口

-e DEFAULT_DOMAIN=yourshlink.com \ 将yourshlink.com替换为你的域名

-e IS_HTTPS_ENABLED=true \ 如果使用https请填 true

-e GEOLITE_LICENSE_KEY=Ojfxxxxdixxxx3X0 \ 将Ojfxxxxdixxxx3X0替换为你第一步生成的GeoLite2数据库许可证密钥

使用命令行执行修改好的命令,如果出现类似下图的提示

不要惊慌,这证明你的Shlink搭建成功了

接下来使用宝塔面板进行nginx反代(或自行设置反代)

新建一个网站,域名为刚刚docker run 里填的域名

按需决定是否申请ssl证书

设置nginx反代,目标url里的端口就是你自定义的端口,点击提交

这时候访问你的域名,如果显示404(如下图),就代表你反代成功了

2.使用其他数据库(支持mysqlmariapostgresmssql

如果要使用其他数据库只需要在 docker run 的代码里添加相应的环境变量就可以了,例如

docker run \
    --name my_shlink \
    -p 25600:8080 \
    -e DEFAULT_DOMAIN=shlink.io \
    -e IS_HTTPS_ENABLED=true \
    -e GEOLITE_LICENSE_KEY=Ojf****di****3X0 \
    -e DB_DRIVER=mysql \
    -e DB_PORT=3306 \
    -e DB_NAME=shlink \
    -e DB_USER=root \
    -e DB_PASSWORD=123abc \
    -e DB_HOST=yourdatabase.com \
    shlinkio/shlink:stable

其中

-e DB_DRIVER=mysql \ 为数据库类型

-e DB_PORT=3306 \ 为数据库端口,默认为DB_DRIVER中数据库的默认端口

-e DB_NAME=shlink \ 为数据库中使用的表名

-e DB_USER=root \ 为数据库用户名

-e DB_PASSWORD=123abc \ 为数据库密码

-e DB_HOST=yourdatabase.com \ 为数据库地址

三、使用 docker 镜像安装 Shlink 的 web面板【并使用 nginx 反代(可选)】

我们先获取 Shlink 的 API密钥

使用命令行运行命令,其中的 my_shlink 为 Shlink 的容器名

docker exec -it my_shlink shlink api-key:generate

得到 Shlink 的 API密钥,记录下来

接下来我们要面临一个选择,是否预配置 Shlink 服务器信息

1.如果没有预配置,那你第一次从浏览器访问 Shlink Web 面板时,需要配置 shlink 服务器信息,这些信息填写后是保存在本地存储中的,那就意味着如果你使用另一台电脑或清空了浏览器cookie,你就需要重新配置 shlink 服务器信息。

2.如果预配置了 Shlink 服务器信息,那就意味着任何一个人如果知道了你的面板地址并且能访问,那他就可以管理你的 Shlink ,所以如果你选择预配置的话那你就需要隐藏你的面板地址,或者限制访问设备,或者将面板地址设置为密码访问。

1.选择不预配置 Shlink 服务器信息

这样的话搭建起来就比较简单

直接docker run,记得端口和Shlink不能一样

docker run \
  --name shlink-web-client \
  -p 25601:80 \
  shlinkio/shlink-web-client

2.选择预配置 Shlink 服务器信息

这样的话你可以在docker run的时候直接指定环境变量

docker run \
  --name shlink-web-client \
  -p 25601:80 \
  -e SHLINK_SERVER_URL=http(s)://yourshlink.com/ \
  -e SHLINK_SERVER_API_KEY=e51befb9-c5c2-4b**-****-******892927 \
  shlinkio/shlink-web-client

-e SHLINK_SERVER_URL=http(s)://yourshlink.com/ \ 是你的shlink的域名

-e SHLINK_SERVER_API_KEY=e51befb9-c5c2-4b**-****-******892927 \ 是上面你获取的 Shlink API 密钥

使用命令行执行修改好的命令,如果出现类似下图的提示则代表你的 Shlink Web 面板搭建好了

接下来我们可以将 Shlink Web 面板进行nginx反代(反代域名不能和 Shlink 的反代域名一样),具体方式参考 Shlink 的 nginx 反代,或者我们不反代,直接访问 IP:端口 来管理 Shlink

四、使用 Web 面板管理 Shlink

访问IP : Web面板端口或反代后的域名访问面板

1.选择不预配置 Shlink 服务器信息

点击 Add a server

Name 为备注, URL 为Shlink反代后的域名, APIKey 为 Shlink 的 API密钥,点击 Create serve

2.选择预配置 Shlink 服务器信息

直接访问即可,在首页就可以添加短链接

如果需要更详细的参数点击 Create short URL 即可,具体功能参考下图谷歌的翻译

List short URLs 里可以管理已经添加的短链接

Manage tags 里可以管理已经添加的标签

Manage domains 里可以管理 shlink 的相关设置

点击上图的Edit redirects即可设置 shlink 域名相关的重定向


腾云先锋(TDP,Tencent Cloud Developer Pioneer)是腾讯云 GTS 官方组建并运营的技术开发者群体。这里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹。来加入属于我们开发者的社群吧 。

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多