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

简介: 最近淘了个比较短的域名,没什么用处,就打算搭建一个私人用的短链接服务,然后就找到了Shlink,Shlink 是一个基于 PHP 的开源项目,[官网地址:https://shlink.io/](https://shlink.io/),能够提供个人向短链接服务,可通过API、CLI或者web面板进行管理;支持自定义短网址、访问统计、标签管理、访问次数和时间限制、生成短链二维码等功能。建议搭建在国外服务器且仅作为个人服务使用。

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

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

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

点击Generate new license key

image.png

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

image.png

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

image.png

二、使用 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
AI 代码解读

其中的

-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数据库许可证密钥

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

image.png

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

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

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

按需决定是否申请ssl证书

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

image.png

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

image.png

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
AI 代码解读

其中

-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
AI 代码解读

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

image.png

接下来我们要面临一个选择,是否预配置 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
AI 代码解读

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
AI 代码解读

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

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

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

image.png

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

四、使用 Web 面板管理 Shlink

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

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

点击 Add a server

image.png

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

image.png

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

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

相关文章
使用 docker 快速搭建开发环境的 mongodb 服务
本指南介绍如何使用 Docker 和 Docker Compose 部署 MongoDB 和 Mongo Express。首先,通过 Docker 命令分别启动 MongoDB(镜像 `mongo:7.0.14`)和 Mongo Express(镜像 `mongo-express:1.0.2-20-alpine3.19`),并配置环境变量确保两者能正确连接。接着,提供了一个 `docker-compose.yaml` 文件示例,包含 MongoDB 数据卷、健康检查及服务依赖配置,简化多容器管理。
316 2
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
240 19
|
7月前
|
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
120 5
|
7月前
|
docker swarm 在服务中使用网络
【10月更文挑战第14天】
138 2
docker服务未启动
【10月更文挑战第3天】
257 1
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
336 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
296 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等