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,也怪我没说清楚吧。。