为了提供给测试用 GitLab 集群一个对象存储,对外提供 S3 Compatible 存储服务。
部署 MinIO 服务
MinIO 和大部分开源软件一样,提供开源版和商业版两种授权形式,很多高级功能只在商业版中提供,但只为了简单测试,社区版本就足够满足需求。
官网现在商业化严重,只提供了商业版安装引导,但是问题不大,使用这种方式安装可以极大简化操作步骤。
## RHEL series
curl --progress-bar -L https://dl.min.io/aistor/minio/release/linux-amd64/minio.rpm -o minio.rpm
sudo dnf install minio.rpm
## Debian series
curl --progress-bar -L https://dl.min.io/aistor/minio/release/linux-amd64/minio.deb -o minio.deb
sudo dpkg -i minio.deb
小贴士:使用上述的命令会实时下载官方的最新构建版,如果需要固定版本号的安装包请到官方 GitHub 仓库中下载。
安装完成后检查版本号:
minio --version
会看到这种方式安装的是商业版,类似于:
minio version RELEASE.2025-08-29T21-27-49Z (commit-id=effbd7f7abdffe736473d6c763b15eae7f559896)
Runtime:go1.24.6 linux/amd64
License: MinIO Enterprise License
Copyright: 2015-2025 MinIO, Inc.
安装后先不要启动服务,将程序本体手动替换为社区版。(如此操作是因为通过包管理安装会自动创建所需用户、守护单元等必备文件,减少手工操作量)
sudo systemctl stop minio.service
sudo mv /usr/local/bin/minio /usr/local/bin/minio.bak
sudo chmod -x /usr/local/bin/minio.bak
手动下载社区版可执行文件
wget --content-disposition https://dl.min.io/server/minio/release/linux-amd64/minio
安装到原始安装目录中
sudo install -m 755 minio /usr/local/bin/minio
重新检查版本,可以看到程序标识中多了一行 GNU AGPLv3
开源协议即为成功。
配置 MinIO 服务
上面步骤都完成后即可开始配置服务,本文演示的为单盘单节点实例,集群部署可参考官网 Handbook。
## 以数据目录 /var/opt/minio 为例
## 将磁盘格式化 ext4 后挂载至 /var/opt,挂载前先检查是否为空目录,
## 如果不为空,先挂载至 /mnt 将内容复制后再重新挂载
sudo mount /dev/vdb1 /var/opt/
## 写入挂载 /etc/fstab
UUID=8d3398da-d86c-4ffa-99cf-c9f099658f35 /var/opt ext4 defaults,errors=continue 0 0
sudo mkdir -p /var/opt/minio
## 对数据目录进行授权
sudo chown -R minio-user:minio-user /var/opt/minio
然后修改本体配置文件 /etc/default/minio
MINIO_VOLUMES="/var/opt/minio"
MINIO_OPTS="--address :9000 --console-address 127.0.0.1:9001"
MINIO_ROOT_USER="AK"
MINIO_ROOT_PASSWORD="SK"
#MINIO_CONFIG_ENV_FILE=/etc/default/minio
小贴士:在社区版中ROOT_USER
和ROOT_PASSWORD
参数就是 S3 协议中的 AK 和 SK(强烈建议用密码生成器制作高强度密码,AK建议至少20位,SK建议至少40位)。如果对外提供服务,建议将控制台只监听在本地,防止安全风险。
反向代理
MinIO 服务分为两部分,S3 API 和 console 控制台。如果需要配置 SSL 证书或者为服务分配独立域名,那么可以使用 NGiNX 类的软件反向代理。
# S3 API
server {
listen 80 default;
server_name s3.example.com;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 443 ssl;
server_name s3.example.com;
http2 on;
ssl_certificate /etc/nginx/cert.d/example.com/example.com.crt;
ssl_certificate_key /etc/nginx/cert.d/example.com/example.com.key;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# Console
server {
listen 443 ssl;
server_name console.example.com;
http2 on;
ssl_certificate /etc/nginx/cert.d/example.com/example.com.crt;
ssl_certificate_key /etc/nginx/cert.d/example.com/example.com.key;
location / {
proxy_pass http://127.0.0.1:9001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
MC 客户端
MinIO 官方开发的客户端 MC (MinIO Client,首字母缩写)可以方便进行服务可用性测试、文件上传下载测试等操作。
## 下载客户端
wget --content-disposition https://dl.min.io/client/mc/release/linux-amd64/mc
## 安装客户端
sudo install -m 755 mc /usr/local/bin/mc
然后配置客户端访问参数:
bash +o history
mc alias set ALIAS HOSTNAME ACCESS_KEY SECRET_KEY
bash -o history
## 大写 ALIAS 为别名,自行指定,后续所有操作都需要这个“别名”
## 例如:mc alias set minio http://172.16.16.22:9000 AK SK
常用参数:
参数 | 作用 |
---|---|
mc admin info ALIAS | 查询服务状态,包含启动时长、版本、状态、容量等信息 |
mc alias list | 查询所有已配置“别名” |
mc alias remove ALIAS | 移除指定“别名” |
mc cat | 获取远程桶中文件内容并输出至 STDOUT,与 cat 命令行为一致 |
mc cp | 上传本地文件至远程桶 |
mc get | 下载远程桶文件至本地 |
mc ls ALIAS | 查询所有桶 |
mc ping ALIAS | 测试服务连接(TCP 协议),与 ping 命令行为一致 |
mc rb | 移除指定整个桶,非指定文件,慎用 |
mc rm | 移除指定对象,慎用 |
其余命令参数可参考官网手册或帮助。
GitLab 对象存储配置
与 AWS S3 配置类似,参考 GitLab 官方文档。
gitlab_rails['object_store']['enabled'] = true
gitlab_rails['object_store']['proxy_download'] = true
gitlab_rails['object_store']['connection'] = {
'provider' => 'AWS',
'aws_access_key_id' => 'AK',
'aws_secret_access_key' => 'SK',
'region' => 'us-east-1', # 当提供者为 MinIO 时,此项可忽略;
'endpoint' => 'http://s3.domain.com', # MinIO 默认为 http://127.0.0.1:9000;
'path_style' => true, # 当提供者为 MinIO 时,此项目必须设为 true;
'server_side_encryption' => 'AES256', # 可选项,如果 MinIO 开启了加密传输,则此项必须同时指定;
}
小贴士:亚马逊 S3 的默认访问规范为 http(s)://bucket.region.endpoint,而 MinIO 默认访问规范为 http(s)://endpoint/bucket,因此需要将path_style
设为true
。
使用 AWS CLI
因 MinIO 为 Full S3 Compatible,所以也可以使用亚马逊官方 S3 工具进行操作。
## 下载安装一把梭
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
/usr/local/bin/aws --version
## 配置 S3 连接
aws configure --profile minio
## 列出所有桶
aws --endpoint-url http://s3.domain.com s3 ls --profile minio
统计用量的命令:
## 列出桶内文件并统计大小
aws --endpoint-url http://s3.domain.com s3 ls --profile minio s3://gitlab-oss-lfs --recursive --human-readable --summarize
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2025-10-08 12:10 PM