shlink是一个开源的url缩短工具,功能方面已经很完善了,有添加标签,统计访问次数,统计浏览者使用的系统、浏览器版本等功能。
本来shlink只是一个命令行工具,但是官方也提供了一个web客户端,而且这个web客户端也可以自行搭建。
官方有docker镜像而且支持多架构,我就在甲骨文的arm上安装了,系统是oraclelinux8。
需要用到docker/docker-compose/nginx/certbot等软件,如果你的系统也是oraclelinux8可以参考这里先安装一下,这里就不重复写同样的步骤了:
准备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
https://github.com/shlinkio/shlink/blob/develop/docker-compose.yml
官方有提供 docker-compose 的 example
我知道官方存储库里面有这个,但这是搭建给本地开发用的,我文章里面是想说官方没有提供生产用的compose,也怪我没说清楚吧。。