原文地址:https://lala.im/8038.html,請支持原作者!該處僅作轉載。
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