开源URL短链接服务Shlink

news2024/9/20 7:48:34

在这里插入图片描述

最近一直有人在问,docker 查询注册表失败的问题,目前老苏验证可用的方法有 2 个:

  • 方法一(可用):
  1. 看过老苏以前文章的读者都知道,在遇到发布到 ghcr.io 的镜像时,老苏都会推荐用 dockerproxy,其实发布到 hub.docker.com 的镜像也是一样可用的

在这里插入图片描述

  1. 打开 https://dockerproxy.com,在第一步中输入镜像的 用户名/镜像名称:tag,点 获取命令

在这里插入图片描述

  1. ssh 客户端登录到群晖,在命令行依次执行第二步~第四步的命令,权限不够的话,加 sudo 再执行

此方法虽然麻烦,但适合没有条件科学上网的人,如果你觉得好用的话,记得去给网站捐助一下,不过这个方法并不能解决注册表搜索的问题

更多的玩法请看官方文档:https://dockerproxy.com/docs

  • 方法二(不可用)

从文档看,似乎有更简单的方式,但老苏没成功,大家可以试试看

注册表 --> 设置,选中 https://rigistry.hub.docker.com,点 编辑

在这里插入图片描述

勾选 启用注册表镜像,在 注册表镜像 URL 中填入 https://dockerproxy.com

在这里插入图片描述

但老苏试了还是不行,当然你也可以找找其他的镜像 URL 试试,其中阿里和华为需要注册自己的账号

在这里插入图片描述

  • 方法三(可用):

就用科学上网了,把 docker.com 加入到域名黑名单,一劳永逸


本文完成于 2 月上旬;

什么是 Shlink ?

Shlink 是一个自托管的开源 URL 缩短器,它提供了一个 REST 和一个 CLI 接口来与之交互。此外,还有一个官方的 Shlink web 客户端,通过使用 ShlinkREST API,提供了一个漂亮的 web UI 来处理多个 Shlink 实例。

前期准备

获取 API key

Shlink 使用 MaxMindGeoLite2 数据库来定位对您的短 URL 的访问。

Shlink 需要一个 GeoLite2 许可证密钥,用来定期下载新版本的数据库,确保数据始终是最新的。

这些许可证是免费的,只需要在 https://www.maxmind.com/en/geolite2/signup 注册用户,然后生成一个 license key 就可以

保存这个 License Key 值很重要,因为也是只显示一次的

在这里插入图片描述

建数据库

老苏用了群晖自带的 MariaDB 10 数据库。

在这里插入图片描述

phpMyAdmin 中创建名为 shlink 的空数据库。

为便于说明,假设数据库密码为 123456

在这里插入图片描述

反向代理

短链接应该是放在公网用的,用局域网 IP 方式显然是不合理的

域名局域网地址说明
st.laosu.ml192.168.0.197:8019服务端
stc.laosu.ml192.168.0.197:8020客户端

老苏的域名没有备案,在实际访问时是要带端口的,例如服务端是 https://st.laosu.ml:444

虽然老苏已经尽量缩短 url,但是实际上还是有点长,毕竟是二级域名,有条件的话,最好用短的一级域名 😂

在这里插入图片描述

SSL 还是没问题就全选

在这里插入图片描述

客户端也是一样的

在这里插入图片描述

环境变量

老苏用到了下面👇这些环境变量

可变
DEFAULT_DOMAIN用于此 Shlink 实例的自定义域名
IS_HTTPS_ENABLED是否启用 https 协议
GEOLITE_LICENSE_KEY您的 GeoLite2 许可证密钥
DB_DRIVER使用值 mysqlmariapostgresmssql来防止使用 SQLite 数据库
DB_USER数据库服务器的用户名
DB_PASSWORD数据库服务器的口令
DB_HOST运行数据库引擎的服务器的主机名
DB_PORT运行数据库服务的端口
DB_NAME要使用的数据库名称

更多的环境变量请看官方文档:https://shlink.io/documentation/environment-variables/

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

老苏安装的 stable版对应的版本是 3.5.1

# 新建文件夹 shlink 和 子目录
mkdir -p /volume2/docker/shlink/data

# 进入 shlink 目录
cd /volume2/docker/shlink

# 运行服务端容器
docker run -d \
   --restart unless-stopped \
   --name shlink-server \
   -p 8019:8080 \
   -e DEFAULT_DOMAIN=st.laosu.ml:444 \
   -e IS_HTTPS_ENABLED=true \
   -e GEOLITE_LICENSE_KEY=<你的 GeoLite2 许可证密钥> \
   -e DB_DRIVER=mysql \
   -e DB_HOST=192.168.0.197 \
   -e DB_PORT=3307 \
   -e DB_USER=shlink \
   -e DB_PASSWORD=123456 \
   -e DB_NAME=shlink \
   shlinkio/shlink:stable

# 运行客户端容器
docker run -d \
   --restart unless-stopped \
   --name shlink-web-client \
   -p 8020:80 \
   shlinkio/shlink-web-client

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: '3'

services:
  server:
    image: shlinkio/shlink:stable
    container_name: shlink-server
    restart: unless-stopped
    ports:
      - 8019:8080
    volumes:
      - ./data:/data
    environment:  
      - DEFAULT_DOMAIN=st.laosu.ml:444
      - IS_HTTPS_ENABLED=true
      - GEOLITE_LICENSE_KEY=<你的 GeoLite2 许可证密钥>
      - DB_DRIVER=mysql
      - DB_HOST=192.168.0.197
      - DB_PORT=3307
      - DB_USER=shlink
      - DB_PASSWORD=123456
      - DB_NAME=shlink
  
  client:
    image: shlinkio/shlink-web-client
    container_name: shlink-web-client
    restart: unless-stopped
    ports:
      - 8020:80

然后执行下面的命令

# 新建文件夹 shlink 和 子目录
mkdir -p /volume2/docker/shlink/data

# 进入 shlink 目录
cd /volume2/docker/shlink

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

一开始会下载 GeoLite2 数据库

在这里插入图片描述

在浏览器中输入 http://群晖IP:8019 访问服务端,但实际上只能看到 404 错误

在这里插入图片描述

接下来要使用以下命令生成新的 API 密钥

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

在这里插入图片描述

也可以从 终端机 进入

在这里插入图片描述

输入 shlink api-key:generate

每次执行都会生成不同的 API key,所以截图中的 API key 都是不一样的

在这里插入图片描述

在浏览器中输入 http://群晖IP:8020 就能看到客户端的主界面

在这里插入图片描述

+ Add a server,因为前、后端在同一个局域网,所以写 IP 就可以了

在这里插入图片描述

添加成功后的主界面

在这里插入图片描述

创建一个短链接

在这里插入图片描述

生成的短链接类似于 --> https://st.laosu.ml:444/ivyCe

在这里插入图片描述

参考文档

shlinkio/shlink: The definitive self-hosted URL shortener
地址:https://github.com/shlinkio/shlink

Shlink — The URL shortener — Documentation
地址:https://shlink.io/documentation/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/676178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MacOS Ventura 13.4.1 (22F82) 带 OC 引导双分区黑苹果镜像

苹果今日向 Mac 电脑用户推送了 macOS 13.4.1 更新&#xff08;内部版本号&#xff1a;22F82&#xff09;&#xff0c;根据Apple的发布说明&#xff0c;该更新提供了重要的安全修复&#xff0c;并建议所有用户进行更新。Apple还为无法运行Ventura的用户发布了macOS 11.7.8和mac…

Git进阶系列 | 5. Rebase vs Merge

Git是最流行的代码版本控制系统&#xff0c;这一系列文章介绍了一些Git的高阶使用方式&#xff0c;从而帮助我们可以更好的利用Git的能力。本系列一共8篇文章&#xff0c;这是第5篇。原文&#xff1a;Rebase vs. Merge: Integrating Changes in Git[1] 大多数开发人员都理解在G…

【五子棋实战】第4章 部署五子棋计算接口到Window、Linux上

【五子棋实战】第4章 部署五子棋计算接口到Window、Linux上 python项目打包成exe可执行文件 ## 步骤一、安装pyinsatller ## 步骤二、使用pyinstaller打包Python程序 ## 操作演示 ## 注意事项&#xff01;&#xff01; python的Flask接口部署&#xff08;Linux&#xff09; ##…

二叉树-理论基础

文章目录 前言一、二叉搜索树平衡二叉搜索树 二、二叉树的存储方式二叉树的遍历方式二叉树的定义总结 前言 二叉树有两种主要的形式&#xff1a;满二叉树和完全二叉树。满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上…

16.vant Weapp

目录 1 使用npm 2 安装 vant 3 构建npm 4 去除 style:v2 5 使用 vant 6 样式变量 1 使用npm 微信小程序不支持下面三种包 不支持依赖 Node.js 内置库的包不支持依赖 浏览器内置对象 的包不支持依赖 C插件 的包 除去上面三种&#xff0c;能用的包就不多了&#…

面向AI的新编程范式

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 联合制作 / 声网 产品统筹 / bobo 录音间 / 声湃轩北京站 在这期播客节目中&#xff0c;我们将探讨AI与程序员如何共同进步。随着AI热潮席卷全球&#xff0c;许多程序员尝试着使…

python爬虫_python基础数据类型

文章目录 ⭐前言⭐python&#x1f496; Number&#x1f496; String&#x1f496; List&#x1f496; Tuple&#x1f496; Dict ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于python的基础数据类型&#xff0c;作为python爬虫专栏的基石。 ⭐python 发…

【Note8】网络管理

文章目录 1.MII介绍2.BMC MAC3.MDIO&MDC4. 1.MII介绍 SOC内部没有网络MAC外设&#xff1a;缺&#xff1a;网络效率不高&#xff0c;一般芯片内置的MAC会网络加速引擎&#xff0c;如网络专用DMA&#xff0c;网络处理效率会很高。 SOC内部集成网络MAC外设&#xff1a;MII/RM…

【MySQL】不就是子查询

前言 今天我们来学习多表查询的下一个模块——子查询&#xff0c;子查询包括了标量子查询、列子查询、行子查询、表子查询&#xff0c;话不多说我们开始学习。 目录 前言 目录 一、子查询 1. 子查询的概念 2. 子查询语法格式 2.1 根据子查询结果不同可以分为&#xff1a;…

C++——内联函数

目录 1. 概念 2.特性 3. 经典面试题 1. 概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数压栈的开销&#xff0c;内联函数提升程序运行的效率。 以Add函数为例&#xff1a; int Add(int x, int y) {int z x…

RabbitMQ基础与实操复习

RabbitMQ基础复习 1、MQ引言1.1 什么是MQ1.2 MQ有哪些1.3 不同MQ特点 2、RabbitMQ引言2.1 RabbitMQ2.2 RabbitMQ安装 3、RabbitMQ配置3.1 RabbitMQ命令行3.2 Web管理界面3.2.1 overview概览3.2.2 Admin用户和虚拟主机管理 4、RabbitMQ常用消息模型测试4.1 RabbitMQ支持的消息模…

RabbitMQ应用场景和集群搭建复习

RabbitMQ应用场景和集群搭建 1. MQ的应用场景1.1 异步处理1.2 应用解耦1.3 流量削峰 2、RabbitMQ集群搭建2.1 普通集群(副本集群)2.1.1 架构图2.1.2 集群搭建1、集群规划&#xff1a;这里用三台虚拟机测试2、克隆三台机器主机名和ip映射3、 在其他两台节点上安装rabbitmq4、后台…

Neurophotonics | HyperOptoNet:用于fNIRS超扫描脑间神经同步分析的MATLAB工具箱

导读 意义&#xff1a;本研究开发了一个基于MATLAB的工具箱&#xff0c;用于脑间同步(IBS)分析&#xff0c;并进行了实验研究以验证其性能。据所知&#xff0c;这是第一个基于功能近红外光谱(fNIRS)超扫描数据的IBS工具箱&#xff0c;可在两个三维(3D)头部模型上直观地显示结果…

Elasticsearch:analyzer

前奏 es的chinese、english、standard等分词器对中文分词十分不友好&#xff0c;几乎都是逐字分词&#xff0c;对英文分词比较友好。 在kibana的dev tools中测试分词&#xff1a; POST /_analyze {"analyzer": "standard","text": "你太…

用OpenCV进行透视变换

1. 引言 欢迎回来&#xff01;今天我们将焦点聚焦在我在图像处理中最喜欢的话题之一——透视变换。使用该技术&#xff0c;可以灵活方便的实现各种各样好玩的特效。 闲话少说&#xff0c;我们直接开始吧&#xff01; 2. 单应矩阵 我们首先展开对单应矩阵的深入研究。作为图…

车载-惯性导航系统

概念 惯性导航系统是一种不受电磁波干扰&#xff0c;且不依靠外界信号即可完成自主定位的导航系统。 惯性导航系统的主要定位测量装置由加速度传感器和陀螺仪组成。其中&#xff0c;加速度传感器是用来测量载体所受到的惯性力&#xff0c;并通过牛顿第二加速度定律获取被测载…

OpenGL 面剔除

1.简介 OpenGL能够检查所有面向观察者的面&#xff0c;并渲染它们&#xff0c;而丢弃那些背向的面&#xff0c;节省我们很多的片段着色器调用&#xff08;它们的开销很大&#xff01;&#xff09;。但我们仍要告诉OpenGL哪些面是正向面&#xff0c;哪些面是背向面。OpenGL使用…

Axure教程——走马灯

本文介绍用Axure中的动态面板制作走马灯效果 一、效果 预览地址&#xff1a;https://okjxsd.axshare.com 二、功能 1、图片自动播放并显示其状态 2、点击左右箭头&#xff0c;图片播放并显示其状态 三、制作 1、动态面板制作 拖进一个动态面板元件&#xff0c;设置尺寸&#…

RISC-V semi-hosting原理以及实践

嵌入式裸机调试需要在有限资源的目标硬件上尽可能挖掘更多的信息&#xff0c;比如打印寄存器等等&#xff0c;但是即便看似很简单的串口打印&#xff0c;在有的情况下也是奢望&#xff0c;针对这种情况&#xff0c;能够有效利用主机资源协同调试的semi-host&#xff08;半主机&…

B. Fish Graph(dfs找环)

Problem - 1817B - Codeforces 给定一个具有n个节点和m条边的简单无向图。请注意&#xff0c;该图不一定是连通的。节点从1到n标记。 如果图包含具有特殊节点u的简单循环&#xff0c;则定义图为Fish Graph。除循环中的边之外&#xff0c;图应恰好有2条额外的边。两条边都应连接…