静看光阴荏苒
不管不顾不问不说也不念

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
赞(2)
未经允许不得转载:荒岛 » Shlink:基于PHP的开源自托管URL缩短器
分享到: 更多 (0)

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    https://github.com/shlinkio/shlink/blob/develop/docker-compose.yml

    官方有提供 docker-compose 的 example

    Showfom3年前 (2021-09-14) Firefox 92.0 Firefox 92.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 我知道官方存储库里面有这个,但这是搭建给本地开发用的,我文章里面是想说官方没有提供生产用的compose,也怪我没说清楚吧。。

      LALA3年前 (2021-09-14) Google Chrome 93.0.4577.63 Google Chrome 93.0.4577.63 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿