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

相关推荐
杨荧2 分钟前
基于爬虫技术的电影数据可视化系统 Python+Django+Vue.js
开发语言·前端·vue.js·后端·爬虫·python·信息可视化
在雨季等你1 小时前
奋斗在创业路上的老开发
android·前端·后端
转转技术团队1 小时前
游戏账号大图生成
java·后端
程序员爱钓鱼1 小时前
Go语言实战案例-批量重命名文件
后端·google·go
大熊计算机1 小时前
大模型推理加速实战,vLLM 部署 Llama3 的量化与批处理优化指南
后端
程序员爱钓鱼1 小时前
Go语言实战案例-遍历目录下所有文件
后端·google·go
喵个咪1 小时前
WSL2下的Ubuntu 24.0突然apt update报错 Could not wait for server fd 的解决方案
后端
赵星星5201 小时前
Cursor如何解决循环依赖!看完太妙了!
后端
大熊计算机2 小时前
Redis 缓存穿透/雪崩实战防御,从本地缓存到分布式锁的立体方案
后端
00后程序员2 小时前
iOS WebView 调试实战 localStorage 与 sessionStorage 同步问题全流程排查
后端