部署 MinIO 对象存储单节点单盘实例
后知后觉 暂无评论

为了提供给测试用 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_USERROOT_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

附录

参考链接

如果遇到问题或者对文章内容存疑,请在下方留言,博主看到后将及时回复,谢谢!
回复 / 查看「历史评论
回答32+26=