6 个稳定版本

2.2.3 2021 年 5 月 30 日
2.1.0 2021 年 5 月 30 日
2.0.0 2021 年 4 月 16 日
1.0.3 2021 年 4 月 16 日
0.0.1 2021 年 4 月 11 日

#943HTTP 服务器

34 每月下载次数

MIT 许可证

49KB
801

文件 - 云存储的 CDN 原始服务器

目的

此服务旨在作为您的任何 JSON 客户端的 CDN 原始服务器,包括像 React 这样的 JavaScript 前端使用 fetch。

Files 支持 aws s3vultrwasabiyandexdigital ocean

Files 设计得简单且速度极快,具有 JWT 验证、存储桶管理和对象管理。

要使用此服务,您需要有一个运行的 broker 服务器。

功能

  • 高性能,几乎不使用 CPU 和内存
  • 支持存储桶和对象管理
  • 支持云存储提供商:aws s3vultrwasabiyandexdigital ocean
  • 支持作为 Bunny.netCDN77Cloudflare 或其他 CDN 提供商的原始服务器
  • 代码行数少于 1000 行
  • 支持 CORS
  • 多租户
  • 支持 JWT 认证
  • 支持带有过期检查的 JWT 缓存,以最小化验证 API 调用
  • 支持 SSL - 完全端到端加密
  • JSON API
  • 自动配置和续订 SSL 证书通过 Let's Encrypt 或使用您自己的 SSL 证书
  • 使用用户授权范围
  • CLI 应用程序 - zn
  • 基于 broker

使用

  1. broker上创建一个用户,并赋予以下权限范围 - 完全权限:files:full或细粒度权限:files:provider, files:get_object, files:put_object, files:delete_object, files:create_bucket, files:list_bucket, 或 files:delete_bucket
  2. 登录broker并获取JWT
  3. 将JWT作为Authorization: Bearer {token}附加到以下JSON API端点
  4. 添加您提供商的凭据 - 凭据仅适用于创建它们的特定用户
  • 有效的提供商是awswasabiyandexvultrdo
  • 有效的区域是
提供商 区域
wasabi wa-us-east-1
wasabi wa-us-east-2
wasabi wa-us-west-1
wasabi wa-eu-central-1
aws us-east-1
aws us-east-2
aws us-west-1
aws us-west-2
aws ca-central-1
aws ap-south-1
aws ap-northeast-1
aws ap-northeast-2
aws ap-northeast-3
aws cn-north-1
aws cn-northwest-1
aws eu-north-1
aws eu-central-1
aws eu-west-1
aws eu-west-2
aws eu-west-3
aws me-south-1
aws sa-east-1
do nyc3
do ams3
do spg1
do fra1
vultr ewr1
yandex ru-central1

添加/更新提供商

POST /provider
  • 认证端点(Authorization: Bearer {jwt})示例
{
    "name": "aws",
    "access_key": "AKIAIOSFODNN7EXAMPLE",
    "secret_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
}

将返回:200500400401

获取URL对象

GET /files/{region}/{bucket}/{object_path}
  • 认证端点(Authorization: Bearer {jwt})示例
{
    "object_path": "/test.pdf",
    "region": "wa-us-east-1",
    "bucket": "test"
}

将返回:200500400401

200 - 将返回带有正确内容类型的文件流

获取对象

POST /get
  • 认证端点(Authorization: Bearer {jwt})示例
{
    "object_path": "/test.pdf",
    "region": "wa-us-east-1",
    "bucket": "test"
}

将返回:200500400401

200 - 将返回带有正确内容类型的文件流

上传对象

POST /put
  • 认证端点(Authorization: Bearer {jwt})示例
{
    "object_path": "/test.pdf",
    "region": "wa-us-east-1",
    "bucket": "test",
    "file": "dGhpc2lzYXN0cmluZw=="
}
  • file是base64编码的二进制文件 - 这可以在浏览器中使用FileReader类实现

将返回:提供商的状态码(例如,200400

  • 注意:如果文件名相同,此操作将覆盖文件

删除对象

POST /del
  • 认证端点(Authorization: Bearer {jwt})示例
{
    "object_path": "/test.pdf",
    "region": "wa-us-east-1",
    "bucket": "test"
}

将返回:提供商的状态码(例如,204409

创建存储桶

POST /create_bucket
  • 认证端点(Authorization: Bearer {jwt})示例
{
    "region": "wa-us-east-1",
    "bucket": "test"
}

将返回:200且无响应体或提供商的状态码(例如,409)和提供商的错误

{
    "error": "provider's response as an xml string"
}
  • 注意:如果存储桶已存在,则请求将返回200

删除存储桶

POST /delete_bucket
  • 认证端点(Authorization: Bearer {jwt})示例
{
    "region": "wa-us-east-1",
    "bucket": "test"
}

将返回:提供商的状态码(例如,204409

  • 注意:在删除存储桶之前必须根据提供商的规则删除存储桶中的所有对象

列出存储桶

POST /list_bucket
  • 认证端点(Authorization: Bearer {jwt})示例
{
    "region": "wa-us-east-1",
    "bucket": "test",
    "prefix": "/",
    "delimiter": "/"
}
  • delimiter是一个可选字段

将返回:200400500401

200 - 将返回对象数组

{
    "objects": [{
        "key": "/test.pdf",
        "e_tag": "33a64df551425fcc55e4d42a148795d9f25f89d4",
        "storage_class": "STANDARD",
        "size": 100,
        "last_modified": "2021-04-14T22:34:04.000Z"
    }]
}

健康检查

GET or HEAD /
  • 公开端点

将返回:200

安装

cargo安装文件

  • 可以传递origin作为标志 - 默认*
  • 端口号可以作为一个标志传入 - 默认 9999 - 只能用于不安全的连接
  • https的secure标志可以为true或false - 默认 false
  • 自动续期的Let'sEncrypt SSL证书的auto_cert标志可以为true或false - 需要可解析的域名 - 默认 true
  • auto_cert为false时,key_path标志用于设置自己的SSL密钥路径 - 默认 certs/private_key.pem
  • auto_cert为false时,cert_path标志用于设置自己的SSL证书路径 - 默认 certs/chain.pem
  • certs标志是Let'sEncrypt证书的存储路径 - 默认 certs
  • db标志是嵌入式数据库将被保存的路径 - 默认 db
  • domain标志是你想要与Let'sEncrypt注册的域名(例如,api.broker.com) - 必须是可完全解析的
  • broker标志是代理服务器代理域名/ip/端口号 - 默认 https://127.0.0.1:8080
  • 生产示例: ./files --secure="true" --domain="files.broker.com" --broker="https://broker.broker.com"

服务

代码中有一个名为files.service的Ubuntu示例systemctl服务

技术栈

灵感

依赖

~76MB
~1.5M SLoC