6 个稳定版本
2.2.3 | 2021 年 5 月 30 日 |
---|---|
2.1.0 | 2021 年 5 月 30 日 |
2.0.0 |
|
1.0.3 |
|
0.0.1 |
|
#943 在 HTTP 服务器 中
34 每月下载次数
49KB
801 行
文件 - 云存储的 CDN 原始服务器
目的
此服务旨在作为您的任何 JSON 客户端的 CDN 原始服务器,包括像 React 这样的 JavaScript 前端使用 fetch。
Files 支持 aws s3、vultr、wasabi、yandex 和 digital ocean。
Files 设计得简单且速度极快,具有 JWT 验证、存储桶管理和对象管理。
要使用此服务,您需要有一个运行的 broker 服务器。
功能
- 高性能,几乎不使用 CPU 和内存
- 支持存储桶和对象管理
- 支持云存储提供商:aws s3、vultr、wasabi、yandex 和 digital ocean
- 支持作为 Bunny.net、CDN77、Cloudflare 或其他 CDN 提供商的原始服务器
- 代码行数少于 1000 行
- 支持 CORS
- 多租户
- 支持 JWT 认证
- 支持带有过期检查的 JWT 缓存,以最小化验证 API 调用
- 支持 SSL - 完全端到端加密
- JSON API
- 自动配置和续订 SSL 证书通过 Let's Encrypt 或使用您自己的 SSL 证书
- 使用用户授权范围
- CLI 应用程序 - zn
- 基于 broker
使用
- 在broker上创建一个用户,并赋予以下权限范围 - 完全权限:
files:full
或细粒度权限:files:provider, files:get_object, files:put_object, files:delete_object, files:create_bucket, files:list_bucket, 或 files:delete_bucket
- 登录broker并获取JWT
- 将JWT作为Authorization: Bearer {token}附加到以下JSON API端点
- 添加您提供商的凭据 - 凭据仅适用于创建它们的特定用户
- 有效的提供商是
aws
、wasabi
、yandex
、vultr
和do
- 有效的区域是
提供商 | 区域 |
---|---|
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"
}
将返回:200
或500
或400
或401
获取URL对象
GET /files/{region}/{bucket}/{object_path}
- 认证端点(Authorization: Bearer {jwt})示例
{
"object_path": "/test.pdf",
"region": "wa-us-east-1",
"bucket": "test"
}
将返回:200
或500
或400
或401
200 - 将返回带有正确内容类型的文件流
获取对象
POST /get
- 认证端点(Authorization: Bearer {jwt})示例
{
"object_path": "/test.pdf",
"region": "wa-us-east-1",
"bucket": "test"
}
将返回:200
或500
或400
或401
200 - 将返回带有正确内容类型的文件流
上传对象
POST /put
- 认证端点(Authorization: Bearer {jwt})示例
{
"object_path": "/test.pdf",
"region": "wa-us-east-1",
"bucket": "test",
"file": "dGhpc2lzYXN0cmluZw=="
}
file
是base64编码的二进制文件 - 这可以在浏览器中使用FileReader类实现
将返回:提供商的状态码(例如,200
、400
)
- 注意:如果文件名相同,此操作将覆盖文件
删除对象
POST /del
- 认证端点(Authorization: Bearer {jwt})示例
{
"object_path": "/test.pdf",
"region": "wa-us-east-1",
"bucket": "test"
}
将返回:提供商的状态码(例如,204
、409
)
创建存储桶
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"
}
将返回:提供商的状态码(例如,204
、409
)
- 注意:在删除存储桶之前必须根据提供商的规则删除存储桶中的所有对象
列出存储桶
POST /list_bucket
- 认证端点(Authorization: Bearer {jwt})示例
{
"region": "wa-us-east-1",
"bucket": "test",
"prefix": "/",
"delimiter": "/"
}
delimiter
是一个可选字段
将返回:200
、400
、500
、401
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