将 RustFS 用作 GitLab 对象存储后端

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

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

RustFS

关于 RustFS

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

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

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

GitLab

安装

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

bash 复制代码
# 更新依赖 
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

bash 复制代码
[ 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

执行如下命令:

bash 复制代码
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.csrgitlab.example.com.crtgitlab.example.com.key三个文件。将 crt 和 key 文件拷贝至 /etc/gitlab/ssl目录下(如果 ssl 目录不存在,创建即可)。

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

bash 复制代码
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 中开启如下配置:

bash 复制代码
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:

bash 复制代码
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 中看到:

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

bash 复制代码
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 实例上的测试仓库到本地:

bash 复制代码
# 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 配置:

bash 复制代码
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 配置:

bash 复制代码
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

bash 复制代码
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 中,进行检查确认即可

相关推荐
深一海13 小时前
taro微信小程序的tsconfig.json文件说明
开发语言·后端·rust
鱼樱前端1 天前
rust基础(一)
前端·rust
寻月隐君1 天前
Rust 核心概念解析:引用、借用与内部可变性
后端·rust·github
weixin_448113221 天前
gitlab-ce本地化部署
gitlab
UestcXiye1 天前
Rust Web 全栈开发(九):增加教师管理功能
后端·mysql·rust·actix
Source.Liu1 天前
【unitrix】 6.10 类型转换(from.rs)
rust
前端_逍遥生1 天前
前端开发有必要学习Rust语言吗?
前端·rust
Source.Liu2 天前
【unitrix】 6.8 加一运算(add_one.rs)
rust
水瓶_bxt2 天前
gitlab私有化部署
gitlab