将 GitLab LFS 的存储后端配置为 Amazon S3 或其他 S3 兼容的对象存储(如 MinIO),是一个非常普遍且推荐的做法。 这样做可以有效减轻 GitLab 服务器本地磁盘的存储压力和 I/O 负担,同时利用对象存储的高可用性和可扩展性。
配置过程主要涉及对自托管(Self-Managed)GitLab 实例的配置文件进行修改。以下是详细的步骤和说明。
先决条件
在开始之前,请确保你已经准备好以下信息:
- 一个 S3 Bucket
- 访问凭证 (Access Keys) 或 拥有 S3 权限的 AWS EC2 实例
权限策略: https://docs.gitlab.com/administration/object_storage/#use-amazon-instance-profiles
配置 GitLab (Omnibus 包)
对于使用 Omnibus 安装包的 GitLab 实例,所有的配置都集中在 /etc/gitlab/gitlab.rb 文件中。
启用 LFS 和对象存储
首先,确保 LFS 功能本身是开启的(默认即为开启),然后启用 LFS 的对象存储功能。
# /etc/gitlab/gitlab.rb
# 1. 确保 LFS 是启用的 (默认就是 true)
gitlab_rails['lfs_enabled'] = true
# 2. 启用 LFS 的对象存储
gitlab_rails['lfs_object_store_enabled'] = true
配置连接和凭证
# /etc/gitlab/gitlab.rb
# 3. 配置对象存储连接参数
gitlab_rails['lfs_object_store_connection'] = {
'provider' => 'AWS', # 对于 S3 兼容存储也使用 'AWS'
'region' => 'us-east-1', # 你的 Bucket 所在区域
'aws_access_key_id' => 'YOUR_ACCESS_KEY_ID',
'aws_secret_access_key' => 'YOUR_SECRET_ACCESS_KEY',
# 如果你的 GitLab 服务器运行在 AWS EC2 上,并且配置了拥有 S3 权限的 IAM 实例角色
# use_iam_profile' => true
# 如果使用非 AWS S3 (如 MinIO), 需要取消下面的注释并提供 Endpoint
# 'endpoint' => 'https://minio.example.com:9000',
# 'path_style' => true # 对于 MinIO 通常需要设置为 true
}
# 4. 指定远程存储目录 (Bucket 名称)
gitlab_rails['lfs_object_store_remote_directory'] = 'your-lfs-objects-bucket-name'
> 如果你的 GitLab 服务器运行在 AWS EC2 上,并且配置了拥有 S3 权限的 IAM 实例角色,你可以使用 ‘use_iam_profile’ => true省略aws_access_key_id和aws_secret_access_key`,GitLab 会自动使用该角色进行授权。
应用配置
保存对 /etc/gitlab/gitlab.rb 的修改后,运行以下命令使配置生效:
sudo gitlab-ctl reconfigure
上传机制:直接上传 vs 后台上传
GitLab 提供了两种 LFS 文件的上传模式:
- 后台上传 (Background Upload):这是默认模式。客户端将 LFS 文件先上传到 GitLab 服务器的临时目录,然后 GitLab 在后台任务中再将文件从服务器上传到 S3。
- 直接上传 (Direct Upload):(推荐) 客户端直接从本地将 LFS 文件上传到 S3 Bucket 的预签名 URL (pre-signed URL),数据不经过 GitLab 服务器中转。这可以显著降低 GitLab 服务器的带宽和 CPU 负载。
要启用 直接上传,请在 /etc/gitlab/gitlab.rb 中添加以下配置:
# /etc/gitlab/gitlab.rb
# 5. (可选但推荐) 启用直接上传
gitlab_rails['lfs_object_store_direct_upload'] = true
配置完成后,同样需要运行 sudo gitlab-ctl reconfigure。
留言