当前位置: 首页 > 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.dtcms.com/a/290272.html

相关文章:

  • uniapp使用uni-ui怎么修改默认的css样式比如多选框及样式覆盖小程序/安卓/ios兼容问题
  • 测量误差溯源:系统误差与随机误差的数学建模与分离方法
  • 大模型——Prompt 优化还是模型微调
  • 【PTA数据结构 | C语言版】求单源最短路的Dijkstra算法
  • AI学习--本地部署ollama
  • 6.String、StringBuffer、StringBuilder区别及使用场景
  • 第3章通用的服务可用性治理手段——3.1 微服务架构与网络调用
  • Tomcat的部署、单体架构、session会话、spring
  • ARC学习(6)arc 编译器overlap 地址重叠方式使用
  • stm32mp157f-dk2安装镜像并且部署qt全流程
  • 基于uniapp的餐厅在线选餐小程序的设计与实现
  • 信息整合注意力IIA,通过双方向的轻量级注意力机制强化目标关键特征并抑制噪声,提升特征融合的有效性和空间位置信息的保留能力。
  • Qt的QAbstractTableModel
  • 基于大数据的旅游推荐系统 Python+Django+Hive+Vue.js
  • 三大工厂设计模式
  • 电商项目_秒杀_初步分析
  • Django视图与路由系统
  • Jetpack ViewModel LiveData:现代Android架构组件的核心力量
  • echarts图铺满父元素
  • 在翻译语义相似度和会议摘要相似度评估任务中 ,分类任务 回归任务 生成任务区别
  • k8s查看某个pod的svc
  • Zookeeper 注册中心垂直介入
  • ZooKeeper学习专栏(四):单机模式部署与基础操作详解
  • 来伊份养馋记社区零售 4.0 上海首店落沪:重构 “家门口” 的生活服务生态
  • ZooKeeper学习专栏(三):ACL权限控制与Zab协议核心原理
  • Qt5线程相关事项
  • 使用 Tailwind CSS 控制元素在移动端不显示
  • 【Docker#3】Window 和 Linux 上 docker安装 相关知识
  • AWS IoT Core CloudWatch监控完整指南
  • Linux C 多线程基本操作