将 RustFS 用作 GitLab 对象存储后端

本文分享将 RustFS 作用 GitLab 对象存储后端的安装、配置以及使用过程。文章整体分为:

  • RustFS 的安装

  • GitLab 的安装

  • RustFS 在 GitLab 中的配置使用

RustFS

关于 RustFS

RustFS 是用 Rust 语言编写的新一代分布式存储,可视为 MinIO 的平替,完全兼容 S3。由于使用 Rust 编写,所以性能更优、也更安装。RustFS 支持二进制、Docker 安装。本文使用二进制安装。执行如下命令即可完成安装:

arduino 复制代码
curl -O  https://rustfs.com/install_rustfs.sh && bash install_rustfs.sh

安装完毕,可用 rustfs -V 来查看版本,并用默认用户名和密码 rustfsadmin来通过 localhost:9000 登录 RustFS:

GitLab

安装

GitLab 是全球知名的源代码托管工具,在国内有很多用户,支持私有化部署。GitLab 支持对象存储。使用下面的命令可以安装好一个 GitLab 中文版:

csharp 复制代码
# 更新依赖
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

# 添加repo
curl -L get.gitlab.cn | bash

# 安装 GitLab-JH
sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install -y gitlab-jh

安装完成后,可以使用默认用户名 root 和密码(存储在 /etc/gitlab/initial_password中)通过 gitlab.example.com 来登录实例。

配置

SSL 配置

首先配置 SSL,用更加安全(HTTPS)的方式来登录 GitLab。将如下内容写入 openssl-san.cnf

ini 复制代码
[ req ]
default_bits       = 2048
prompt             = no
default_md         = sha256
distinguished_name = dn
req_extensions     = req_ext

[ dn ]
C  = CN
ST = DL
L  = DL
O  = JH
OU = GitLab
CN = gitlab.example.com

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = gitlab.example.com
DNS.2 = www.gitlab.example.com
IP.1  = 12.23.43.31

执行如下命令:

vbscript 复制代码
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -config openssl-san.cnf
openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 365 -extensions req_ext -extfile openssl-san.cnf

可以看到生成了 server.csrgitlab.example.com.crtgitlab.example.com.key三个文件。将 crt 和 key 文件拷贝至 /etc/gitlab/ssl目录下(如果 ssl 目录不存在,创建即可)。

/etc/gitlab/gitlab.rb 中开启如下配置

rust 复制代码
external_url 'https://jhma.jihulab.net'
nginx['enable'] = true
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/ca.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/ca.key"
nginx['ssl_protocols'] = "TLSv1.2 TLSv1.3"

然后执行 gitlab-ctl reconfigure 来重新配置实例。配置成功后,就可以用 https://gitlab.example.com 来登录实例了。

开启容器镜像仓库

/etc/gitlab/gitlab.rb 中开启如下配置:

less 复制代码
registry_nginx['enable'] = true
registry_nginx['listen_port'] = 5050
registry_external_url 'https://jhma.jihulab.net:5050'
gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_host'] = "jhma.jihulab.net"
gitlab_rails['registry_port'] = "5005"
gitlab_rails['registry_path'] = "/var/opt/gitlab/gitlab-rails/shared/registry"

然后执行 gitlab-ctl reconfigure 来重新配置实例。

在 GitLab 中配置 RustFS

GitLab 支持将 MinIO 配置为后端对象存储。由于 RustFS 是 MinIO 的国产平替,而且兼容 S3。所以参照配置 MinIO 的方法来进行。

先在 RustFS 上创建好所需的对象存储桶。在 RustFS 控制台页面的右上角,点击 Create Bucket 即可创建所需的 bucekt。本次创建了 artifactsci-secure-filesdependency-proxyexternal-diffslfspackagespagesterraform-stateuploads存储桶,用于存储不同的数据。

Packages RustFS 测试

packages 存储桶用来存储软件包相关的数据,可以推送一个 Docker 镜像到 GitLab 镜像仓库来测试是否配置成功。

首先需要在 GitLab 的配置中开启 packages object storage:

dart 复制代码
gitlab_rails['packages_enabled'] = true
# gitlab_rails['packages_storage_path'] = "/var/opt/gitlab/gitlab-rails/shared/packages"
gitlab_rails['packages_object_store_enabled'] = true
gitlab_rails['packages_object_store_proxy_download'] = false
gitlab_rails['packages_object_store_remote_directory'] = "packages"
gitlab_rails['packages_object_store_connection'] = {
    'provider' => 'AWS',
    'endpoint' => 'http://12.23.43.31:9000',
    'region' => 'cn-east-1',
    'aws_access_key_id' => 'aws_access_key_id',
    'aws_secret_access_key' => 'aws_secret_access_key',
    'path_style' => true,
    'enable_signature_v4_streaming' => false,
    'host' => '12.23.43.31',
}

执行 gitlab-ctl reconfigure 来重新配置实例。

接下来,推送一个容器镜像到 GitLab 内置的容器镜像仓库。使用方法可以在 项目 --> 部署 --> Container Registry 中看到:

bash 复制代码
# 登录 GitLab 内置容器镜像仓库
docker login jhma.jihulab.net:5050

# 构建容器镜像
docker build -t jhma.jihulab.net:5050/devsecops/rusts .

# 推送到 GitLab 内置的容器镜像仓库
docker push jhma.jihulab.net:5050/devsecops/rusts

可以自己写一个 Dockerfile 来构建任意容器镜像,然后推送到上述 GitLab 内置的镜像仓库中,推送之后,可以在 GitLab 镜像仓库页面中进行检查。

接着在 RustFS 的 packages bucket 中查看是否有数据:

可以看到 packges bucket 中有对应的数据,说明配置成功且使用成功。

LFS RustFS测试

LFS(Large File Storage)是 Git 的一个扩展,可以用来对大文件进行管理。和 packages bucket 的使用一样。首先需要在 /etc/gitlab/gitlab.rb 中开启 lfs object storage,配置如下:

dart 复制代码
gitlab_rails['lfs_enabled'] = true
gitlab_rails['lfs_object_store_proxy_download'] = false
gitlab_rails['lfs_object_store_remote_directory'] = "lfs"
gitlab_rails['lfs_object_store_connection'] = {
  'provider' => 'AWS',
  'endpoint' => 'http://12.23.43.31:9000',
  'region' => 'cn-east-1',
  'aws_access_key_id' => 'aws_access_key_id',
  'aws_secret_access_key' => 'aws_secret_access_key',
  'path_style' => true,
  'enable_signature_v4_streaming' => false,
  'host' => '12.23.43.31',
  # 'path_style' => false # Use 'host/bucket_name/object' instead of 'bucket_name.host/object'
}

执行 gitlab-ctl reconfigure 来重新配置实例。

接下来需要在 GitLab 项目中配置 LFS 并推送大文件到仓库来测试 lfs bucket 是否配置成功。克隆 GitLab 实例上的测试仓库到本地:

bash 复制代码
# clone 仓库
git@jhma.jihulab.net:devsecops/rusts.git

# 配置 LFS
# git lfs install
Git LFS initialized.

# git lfs track "*.txt"
Tracking "*.xml"

新建一个 txt 文件并写入任意内容,然后通过 git 三部曲(add & commit & push)将其推送到远端仓库。然后在 RustFS LFS bucket 中查看是否有数据存在:

可以看到 lfs bucket 中有数据存在。说明 lfs bucket 配置成功。

Uploads RustFS 测试

下面测试 uploads bucket 的使用。和前面的两个 bucket 一样,首先在 GitLab 中开启 uploads object stroage 配置:

dart 复制代码
gitlab_rails['uploads_base_dir'] = "uploads/-/system"
gitlab_rails['uploads_object_store_enabled'] = true
gitlab_rails['uploads_object_store_proxy_download'] = false
gitlab_rails['uploads_object_store_remote_directory'] = "uploads"
gitlab_rails['uploads_object_store_connection'] = {
  'provider' => 'AWS',
  'endpoint' => 'http://12.23.43.31:9000',
  'region' => 'cn-east-1',
  'aws_access_key_id' => 'Q8yfw7bk4vS3zaL2spDU',
  'aws_secret_access_key' => 'GR90ZtPmU8IsvL1TpbFx6zfdDwa7MyVqh5oONclj',
  'path_style' => true,
  'enable_signature_v4_streaming' => false,
  'host' => '12.23.43.31',
}

执行 gitlab-ctl reconfigure 来重新配置实例。

然后在 GitLab 实例上的任意项目的任意 issue 或者 MR 中上传一个文件:

然后在 RustFS 控制台的 uploads bucket 中查看是否有数据:

可以看到 uploads bucket 中有数据存在,说明 RustFS 在 GitLab 中的配置正确。

ci-secure-files RustFS 测试

ci-secure-files 主要用于在 GitLab CI/CD 运行过程中安全管理敏感信息文件。和前面的几个 bucket 使用一样,首选需要在 GitLab 配置中开启 ci-secure-files object storage 配置:

dart 复制代码
gitlab_rails['ci_secure_files_enabled'] = true
gitlab_rails['ci_secure_files_object_store_enabled'] = true
gitlab_rails['ci_secure_files_object_store_remote_directory'] = "ci-secure-files"
gitlab_rails['ci_secure_files_object_store_connection'] = {
    'provider' => 'AWS',
    'endpoint' => 'http://143.64.182.51:9000',
    'region' => 'cn-east-1',
    'aws_access_key_id' => 'Q8yfw7bk4vS3zaL2spDU',
    'aws_secret_access_key' => 'GR90ZtPmU8IsvL1TpbFx6zfdDwa7MyVqh5oONclj',
    'path_style' => true,
    'enable_signature_v4_streaming' => false,
    'host' => '12.23.43.31',
}

然后通过项目 --> 设置 --> CI/CD --> 安全文件 来添加安全文件。将如下内容写一个 password.txt

ini 复制代码
username=rustfsadmin
password=rustfsadmin

将 password.txt 文件上传到 GitLab 安全文件部分:

最后在 RustFS 控制台上,查看 ci-secure-files bucket 中是否有数据:

可以看到 password.txt 文件已经存储在 ci-secure-files bucket 中了。说明 RustFS ci-secure-files 在 GitLab 中配置成功。

其他几个 bucket 的配置思路也是一样:首先在 GitLab 中开启对象存储配置,然后执行 reconfigure 让配置生效,接着操作对应的功能,产生的数据就会上传到 RustFS bucket 中,进行检查确认即可

相关推荐
Re2756 分钟前
揭秘索引的 “快”:从翻书到 B+ 树的效率革命
后端
David爱编程1 小时前
Java 三目运算符完全指南:写法、坑点与最佳实践
java·后端
学习编程的小羊2 小时前
Spring Boot 全局异常处理与日志监控实战
java·spring boot·后端
Moonbit3 小时前
MoonBit 作者寄语 2025 级清华深圳新生
前端·后端·程序员
前端的阶梯3 小时前
开发一个支持支付功能的微信小程序的注意事项,含泪送上
前端·后端·全栈
咕噜分发企业签名APP加固彭于晏3 小时前
腾讯元器的优点是什么
前端·后端
AAA修煤气灶刘哥4 小时前
Swagger 用着糟心?试试 Knife4j,后端开发狂喜
后端·面试
bobz9654 小时前
MCP on windows
后端
泡海椒4 小时前
jquickexcel 全功能指南:从数据导入到精美导出的完整流程
后端
iOS开发上架哦4 小时前
移动端网页调试实战,键盘弹出与视口错位问题的定位与优化
后端