#link-shortener #redis-server #url #redis #shortener #serverless

bin+lib shorty-http

shorty-http 是一个基于 shorty 的 URL 缩短器,可以作为独立的 http 服务器部署

9 个不稳定版本

0.5.4 2020 年 6 月 15 日
0.5.3 2020 年 1 月 24 日
0.5.2 2019 年 9 月 3 日
0.5.1 2019 年 7 月 9 日

708HTTP 服务器 中排名

每月 30 次下载

Apache-2.0

43KB
600

shorty

Latest version Build Status License

Shorty 是一个 URL 缩短器:它将一个任意长度的 URL 分配给一个短的 ID,当人们使用这个短 ID 访问 URL 时,他们将被重定向到原始 URL。

这在发送 SMS 通知等情况下很有用,当你有有限的字符数,不想浪费它们在长 URL 和其参数上。

Shorty 将其数据存储在 Redis 上。

多种部署方式

Shorty 可用为

Rust 库

Shorty 使用 Rust 编写,并提供为 crate 库。

有关更多信息,请参阅 文档,并使用 shorty-http 二进制 crate 作为示例。

HTTP 微服务

Shorty 将其数据存储在 redis 上,因此您首先需要安装 redis。具体操作取决于您的操作系统。如果您使用类似 Debian 的 Linux 发行版,只需执行

apt-get install redis

如果您更喜欢 docker,则

docker run --rm -it -p 6379:6379 redis:alpine

一旦 redis 准备就绪,下载最新的 shorty 发布版,解压存档并使用以下命令运行 shorty

SHORTENER_API_KEY_MANDATORY=false ./shorty-http

同样,如果您更喜欢 docker,则

docker run --rm -it -e SHORTENER_API_KEY_MANDATORY=false --network host ffissore/shorty

Shorty 将记录 Starting server on 127.0.0.1:8088

现在向下滚动到 使用 shorty

AWS lambda

为了在 AWS 上部署 Shorty,您需要... node.js。嗯,真遗憾,但 serverless 是一个 Node 包,并且在 AWS 上部署 Lambda 的 de-facto 标准,它工作得很好。

使用以下命令安装所需的依赖项:

npm install

然后运行:

npx serverless deploy

这将下载一个Docker镜像,用于编译shorty。然后它将在AWS上创建一个Redis实例,以及所有必要的网络组件,使lambda能够连接到Redis,最后它将部署lambda。

完成后,它将打印类似以下内容:

endpoints:
  GET - https://9tgwceucu4.execute-api.us-east-1.amazonaws.com/dev/{key}
  POST - https://9tgwceucu4.execute-api.us-east-1.amazonaws.com/dev/

请注意:

  1. 您的AWS账户将产生费用:lambda最多可免费处理100万次请求,但用于公开它们的“NAT网关”则不免费。
  2. 您在 serverless.yml 中找到的CloudFormation的冗余部分已被复制粘贴(感谢 ittus),我几乎不明白它是什么做的。

当您完成对shorty的玩耍后,使用以下命令删除所有内容:

npx serverless remove

现在向下滚动到 使用 shorty

Azure函数

Azure不直接支持Rust,但只要它能在Docker中运行,他们允许您运行任何类型的运行时。

Shorty Docker镜像可在 Docker Hub 上找到。

以下命令取自 此Azure指南

  • 创建一个资源组
az group create --name shorty-resources --location "West Europe"
  • 创建一个Redis实例
az redis create --resource-group shorty-resources --name shorty-redis --location "West Europe" --sku Basic --vm-size c0 --enable-non-ssl-port
  • 创建一个服务计划
az appservice plan create --name shorty-service-plan --resource-group shorty-resources --sku B1 --is-linux
  • 创建一个Web应用
az webapp create --resource-group shorty-resources --plan shorty-service-plan --name shortyshorty --deployment-container-image-name ffissore/shorty:latest
  • 告诉Azure Shorty监听端口8088
az webapp config appsettings set --resource-group shorty-resources --name shortyshorty --settings WEBSITES_PORT=8088
  • 并且目前我们不需要API密钥
az webapp config appsettings set --resource-group shorty-resources --name shortyshorty --settings SHORTENER_API_KEY_MANDATORY=false
  • 现在在Azure门户中找到您的Redis实例,并复制其主访问密钥。它看起来像这样:RandomString=:这是Redis密码。相应地设置Redis主机变量。
az webapp config appsettings set --resource-group shorty-resources --name shortyshorty --settings SHORTENER_REDIS_HOST=:RandomString=@shorty-redis.redis.cache.windows.net

Shorty将在 https://shortyshorty.azurewebsites.net/ 上可用

请注意,您将为此以上所有内容付费。

当您完成对shorty的玩耍后,使用以下命令删除所有内容:

az group delete --name shorty-resources

现在向下滚动到 使用 shorty

使用shorty

以下说明假设shorty正在您的PC上运行。如果不是这种情况,请将 https://127.0.0.1:8088 替换为正确的域名。

尝试以下 curl 命令以存储URL

curl -vv https://127.0.0.1:8088/ -H 'Content-Type: application/json' --data '{"url":"https://en.wikipedia.org/wiki/URL_shortening#Techniques"}'

如果您已启用API密钥,请将API密钥添加到有效负载中,如下所示

curl -vv https://127.0.0.1:8088/ -H 'Content-Type: application/json' --data '{"api_key": "test", "url":"https://en.wikipedia.org/wiki/URL_shortening#Techniques"}'

它将输出类似以下内容:

{"id":"CGQ6LM8bfj","url":"https://en.wikipedia.org/wiki/URL_shortening#Techniques"}

现在尝试解析该ID

curl -vv https://127.0.0.1:8088/CGQ6LM8bfj

curl的输出头将包含 Location: https://en.wikipedia.org/wiki/URL_shortening#Techniques。尝试使用您的浏览器打开shorty URL。

配置

Shorty可以通过环境变量进行配置

  • SHORTENER_REDIS_HOST:redis服务器的地址,默认为127.0.0.1
  • SHORTENER_REDIS_PORT:redis服务器的端口,默认为6379
  • SHORTENER_API_KEY_MANDATORY:用户是否需要提供API密钥以创建新的短URL?布尔值,默认为true
  • SHORTENER_RATE_LIMIT:单个API密钥在一段时间内可以创建的新短URL的数量,默认为10,如果设置为0,则不应用限制
  • SHORTENER_RATE_LIMIT_PERIOD:速率限制的周期,如果激活,默认为600秒(10分钟)
  • SHORTENER_ID_LENGTH:为每个URL生成的ID的长度,默认为10。字符集为a-zA-Z0-9 = 62个字符。如果您打算仅内部使用shorty,可以使用更短的ID,如4个字符。
  • SHORTENER_ID_GENERATION_MAX_ATTEMPTS:生成唯一ID的最大尝试次数,默认为10。当ID长度较短且创建了大量的短URL时,这一点尤为重要。
  • SHORTENER_HOST:shorty将监听的地址
  • SHORTENER_PORT:短链接服务将监听的端口

Redis中的内容

  • API密钥:它们以API_KEY_为前缀,存储为API_KEY_my_api_key,并分配一个布尔值。缺失的API密钥或分配给false的API密钥将返回错误“无效的API密钥”
  • 调用率密钥:它们以RATE_为前缀,存储为RATE_my_api_key,并分配注册的调用次数。该密钥在调用率限制周期(见上文段落)结束后有效。
  • 短ID,在配置的长度(见上文示例):它们分配给原始URL

依赖项

~23–33MB
~531K SLoC