Shlink:基于PHP的开源自托管URL缩短器

shlink是一个开源的url缩短工具,功能方面已经很完善了,有添加标签,统计访问次数,统计浏览者使用的系统、浏览器版本等功能。

本来shlink只是一个命令行工具,但是官方也提供了一个web客户端,而且这个web客户端也可以自行搭建。

官方有docker镜像而且支持多架构,我就在甲骨文的arm上安装了,系统是oraclelinux8。

需要用到docker/docker-compose/nginx/certbot等软件,如果你的系统也是oraclelinux8可以参考这里先安装一下,这里就不重复写同样的步骤了:

PhotoPrism:功能强大的开源照片管理程序

准备shlink运行的目录,新建compose文件:

mkdir /opt/shlink && cd /opt/shlink && nano docker-compose.yml

看了官方的文档后,发现没有提供compose的部署方案,遂自己手搓了一个:

version: '3.5'
services:
shlink-frontend:
image: shlinkio/shlink-web-client:stable
container_name: shlink-frontend
restart: unless-stopped
depends_on:
- shlink-backend
- shlink-db
#    environment:
#      - SHLINK_SERVER_NAME=moonbridge
#      - SHLINK_SERVER_URL=https://link.233.fi
#      - SHLINK_SERVER_API_KEY=
ports:
- 10000:80
shlink-backend:
image: shlinkio/shlink:stable
container_name: shlink-backend
restart: unless-stopped
depends_on:
- shlink-db
environment:
- SHORT_DOMAIN_HOST=link.233.fi
- SHORT_DOMAIN_SCHEMA=https
- GEOLITE_LICENSE_KEY=
- DB_DRIVER=maria
- DB_HOST=shlink-db
- DB_NAME=shlink
- DB_USER=imlala
- DB_PASSWORD=password
ports:
- 10001:8080
shlink-db:
image: mariadb:10.6
container_name: shlink-mariadb
restart: unless-stopped
environment:
- MARIADB_ROOT_PASSWORD=password
- MARIADB_DATABASE=shlink
- MARIADB_USER=imlala
- MARIADB_PASSWORD=password
volumes:
- ./data:/var/lib/mysql

至少需要修改以下环境变量:

SHORT_DOMAIN_HOST=
GEOLITE_LICENSE_KEY=
DB_PASSWORD=
MARIADB_ROOT_PASSWORD=
MARIADB_PASSWORD=

其中GEOLITE_LICENSE_KEY(GEOIP密钥)可以在这里先注册账号:https://www.maxmind.com/en/geolite2/signup

然后在此生成密钥:https://www.maxmind.com/en/accounts/current/license-key

生成的时候这个选项选NO:

up起来:

docker-compose up -d

生成第一个apikey:

docker exec -it shlink-backend shlink api-key:generate

配置使用nginx反向代理:

nano /etc/nginx/conf.d/shlink-backend.conf

写入如下配置:

server {
listen 80;
server_name link.233.fi;
charset utf-8;
location / {
proxy_pass http://localhost:10001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 90s;
}
}

再新建一个nginx站点配置文件,用于反代web客户端:

nano /etc/nginx/conf.d/shlink-frontend.conf

写入如下配置:

server {
listen 80;
server_name app.233.fi;
client_max_body_size 0;
location / {
proxy_pass http://localhost:10000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

签发ssl证书:

certbot --nginx

访问你的前端,正常的话应该能看到这个界面:

添加服务器,其中apikey是之前用命令生成的:

正常的话就可以看到主页了:

统计访问者操作系统,浏览器版本等:

关于之前compose内的shlink-frontend服务下面还有几个这样被注释掉的环境变量:

SHLINK_SERVER_NAME=
SHLINK_SERVER_URL=
SHLINK_SERVER_API_KEY=

如果你不担心滥用的话,可以在这里把你之前生成的apikey填上去,这样web客户端就不用手动添加服务器了,默认就会连接你的这台服务器。

但是这样的话,也就相当于是个公共服务器了,并且你的apikey任何人都能查看的到。

做了这些更改后,只需重新up一次即可生效:

docker-compose up -d
全部为采集文章,文中的 联系方式 均不是 本人 的!

发表评论