20 个版本
0.3.7 | 2024年5月3日 |
---|---|
0.3.6 | 2022年10月4日 |
0.3.5 | 2021年7月31日 |
0.3.1 | 2021年2月12日 |
0.2.1 | 2019年3月22日 |
#377 in 命令行工具
每月 70 次下载
145KB
3K SLoC
Rudolfs
一个具有 AWS S3 后端的高性能、缓存 Git LFS 服务器。
功能
-
多个后端
- 具有可选本地磁盘缓存的 AWS S3 后端。
- 本地磁盘后端。
-
可配置的本地磁盘缓存以加快下载速度(并减少您的 S3 账单)。
-
具有抗损坏的本地磁盘缓存。即使磁盘受到宇宙射线的轰击,它也会找到损坏的 LFS 对象并将它们从缓存中透明地清除。客户端永远不会注意到这种情况的发生。
-
缓存和永久存储中对 LFS 对象的加密。
-
分离 GitHub 组织和项目。只需在 URL 中指定 org 和项目名称即可自动创建。如果两个项目共享许多 LFS 对象,让他们使用相同的 URL 以节省存储空间。
-
一个小型(<10MB)的 Docker 镜像(jasonwhite0/rudolfs)。
后端存储代码非常模块化和可组合。欢迎提交实现其他存储后端的 PR。如果您开始工作,请通过提交问题来通知我们。
非功能特性
- 没有客户端身份验证。这旨在在您信任的内部网络中运行,而不是在互联网上与恶意行为者一起运行。
运行它
生成加密密钥(可选)
如果配置了,所有 LFS 对象都将使用 xchacha20 对称流加密进行加密。在启动服务器之前,您必须生成一个 32 字节的加密密钥。
生成随机密钥很容易
openssl rand -hex 32
请保密并使用密码管理器保存,以免丢失。我们将通过下面的 --key
选项将其传递给服务器。如果没有指定 --key
选项,则 LFS 对象将 不会 加密。
注意:
- 如果密钥发生变化(或加密被禁用),所有现有的LFS对象都将变成垃圾。当Git LFS客户端尝试下载它们时,SHA256验证步骤将失败。
- 同样,如果加密在禁用后再次启用,所有现有的未加密LFS对象都将被视为垃圾。
- 缓存和永久存储中的LFS对象都是加密的。然而,在发送给LFS客户端之前,对象会被解密,因此请采取必要的安全预防措施来保护您的知识产权。
开发
在开发过程中进行测试时,使用Cargo运行它是最容易的。创建一个名为test.sh
的文件(此路径已被.gitignore
忽略)
# Your AWS credentials.
export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
export AWS_DEFAULT_REGION=us-west-1
# Change this to the output of `openssl rand -hex 32`.
KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
cargo run -- \
--cache-dir cache \
--host localhost:8080 \
--max-cache-size 10GiB \
--key $KEY \
s3 \
--bucket foobar
如果您只需要使用本地磁盘作为后端,请使用以下bash。
# Change this to the output of `openssl rand -hex 32`.
export RUDOLFS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
cargo run -- --port 8080 local --path=/data
注意:始终使用与生产环境不同的S3存储桶、缓存目录和加密密钥。
警告:此服务器可能无法从其他机器访问。指定--host localhost:8080
通常会绑定服务器到仅内部使用的环回网络接口(即如果localhost
解析为127.0.01
或[::1]
)。因此,要使服务器从外部世界访问,请指定--host 0.0.0.0:8080
或只需指定--port 8080
(服务器将绑定的默认IP是0.0.00
)。IP 0.0.00
表示服务器将尝试绑定到所有可用的网络接口,包括内部和外部。有关更多信息,请参阅https://github.com/jasonwhite/rudolfs/issues/38#issuecomment-973721511。
生产
要在生产环境中运行,最简单的方法是使用docker-compose
-
在
docker-compose.yml
旁边创建一个名为.env
的文件,并包含配置变量AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXQ AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX AWS_DEFAULT_REGION=us-west-1 LFS_ENCRYPTION_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx LFS_S3_BUCKET=my-bucket LFS_MAX_CACHE_SIZE=10GB
-
使用提供的
docker-compose.yml
文件来运行生产环境docker-compose up -d # use minio yml docker-compose -f ./docker-compose.minio.yml up -d # use local disk yml docker-compose -f ./docker-compose.local.yml up -d
-
【可选】:最好使用nginx作为此服务器的反向代理。使用它来启用TLS。如何在互联网上的其他教程中有更好的说明。
注意:
- 更大的缓存几乎总是更好的。尽量使用85%的可用磁盘空间。
- 缓存数据存储在名为
rudolfs_data
的Docker卷中。如果要删除它,请运行docker volume rm rudolfs_data
。
AWS凭证
AWS凭证必须提供给服务器,以便它可以对命令行上指定的S3存储桶(使用--bucket
)发出请求。
将按以下顺序搜索您的AWS凭证
- 环境变量:
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
- AWS凭证文件。通常位于
~/.aws/credentials
。 - IAM 实例配置文件。只有在使用具有实例配置文件/角色的 EC2 实例上运行时才会起作用。
AWS 区域从环境变量 AWS_DEFAULT_REGION
或 AWS_REGION
中读取。如果格式不正确,将回退到 us-east-1
。如果不存在,将回退到 ~/.aws/config
中与当前配置文件关联的值或由环境变量 AWS_CONFIG_FILE
指定的文件。如果该文件格式不正确或不存在,将回退到 us-east-1
。
客户端配置
将名为 .lfsconfig
的文件添加到 Git 仓库的根目录,并将其提交,以确保每个人都在使用相同的 LFS 服务器。
[lfs]
url = "http://gitlfs.example.com:8080/api/my-org/my-project"
─────────┬──────── ──┬─ ─┬─ ───┬── ─────┬────
│ │ │ │ └ Replace with your project's name
│ │ │ └ Replace with your organization name
│ │ └ Required to be "api"
│ └ The port your server started with
└ The host name of your server
可选,我还建议更改以下全局设置以加快速度
# Increase the number of worker threads
git config --global lfs.concurrenttransfers 64
# Use a global LFS cache to make re-cloning faster
git config --global lfs.storage ~/.cache/lfs
许可证
感谢
该项目是在 环境系统研究学院 (Esri) 开发的,他们慷慨地允许我保留版权并将其作为开源软件发布。
依赖项
~26–40MB
~724K SLoC