当前位置: 首页 > news >正文

将 RustFS 用作 GitLab 对象存储后端

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

  • RustFS 的安装
  • GitLab 的安装
  • RustFS 在 GitLab 中的配置使用

RustFS

关于 RustFS

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

curl -O https://rustfs.com/install_rustfs.sh && bash install_rustfs.sh

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

GitLab

安装 

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

# 更新依赖 
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

[ 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

执行如下命令:

openssl genrsa -out gitlab.example.com.key 2048 openssl req -new -key gitlab.example.com.key -out gitlab.example.com.csr -config openssl-san.cnf openssl x509 -req -in gitlab.example.com.csr -signkey gitlab.example.com.key -out gitlab.example.com.crt -days 365 -extensions req_ext -extfile openssl-san.cnf

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

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

external_url 'https://jhma.jihulab.net' 
nginx['enable'] = true 
nginx['redirect_http_to_https'] = true 
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt" 
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.com.key" 
nginx['ssl_protocols'] = "TLSv1.2 TLSv1.3"

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

开启容器镜像仓库

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

registry_nginx['enable'] = true 
registry_nginx['listen_port'] = 5050 
registry_external_url 'https://gitlab.example.com:5050' 
gitlab_rails['registry_enabled'] = true 
gitlab_rails['registry_host'] = "gitlab.example.com" 
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:

gitlab_rails['packages_enabled'] = true 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 中看到:


# 登录 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,配置如下:

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', 
}

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

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

# clone 仓库 
git@jhma.jihulab.net:devsecops/rusts.git # 配置 LFS 
git lfs install 
Git LFS initialized. git lfs track "*.txt" 
Tracking "*.txt"

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

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

Uploads RustFS 测试

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

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' => '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 实例上的任意项目的任意 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 配置:

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' => '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'
}

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

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 中,进行检查确认即可 。

http://www.lryc.cn/news/595157.html

相关文章:

  • 从 Hi3861 平台到 WS63 星闪平台的程序移植全解析
  • 部署zabbox企业级分布式监控
  • 后训练(Post-training)语言模型
  • 2025最新版IntelliJ IDEA Ultimate for Mac专业版安装使用指南
  • How does Misinformation Affect Large Language ModelBehaviors and Preferences?
  • Flink框架:keyBy实现按键逻辑分区
  • makefile-- 其他函数
  • 低代码平台买saas好还是私有化好
  • 【HTTP缓存机制深度解析:从ETag到实践策略】
  • Zabbix 企业级分布式监控部署
  • C++学习<2>--引用、函数、内存分区
  • 【2025】Vscode Python venv虚拟环境显示“激活终端”成功但是在终端中“并没有激活成功”,pip安装还是会安装到全局环境中的解决方法;
  • 第十八节:第七部分:java高级:注解的应用场景:模拟junit框架
  • nextjs+react接口会请求两次?
  • 元宇宙与DAO自治:去中心化治理的数字文明实践
  • 【设计模式C#】简单工厂模式(用于简化获取对象实例化的复杂性)
  • 实时数据可视化的“心跳”设计:毫秒级延迟下的动态图表抗闪烁优化方案
  • 时空数据可视化新范式:基于Three.js的生产全流程时间轴回溯技术解析
  • 基于爬虫技术的电影数据可视化系统 Python+Django+Vue.js
  • 基于VSCode的nRF52840开发环境搭建
  • 机器学习中核心评估指标(准确率、精确率、召回率、F1分数)
  • 动态数据源切换
  • Android Jetpack系列组件之:LiveData(保姆级教程)
  • 动静态库原理与实战详解
  • Ubuntu 22 安装 ZooKeeper 3.9.3 记录
  • 【HarmonyOS】ArkUI - 声明式开发范式
  • 信息整合注意力IIA,通过双方向的轻量级注意力机制强化目标关键特征并抑制噪声,提升特征融合的有效性和空间位置信息的保留能力。
  • I2S音频的时钟
  • C/C++ 详谈结构体大小计算(内存对齐)
  • 移动端轻量级神经网络推理框架