测试环境对象存储平替方案:在CentOS 7上部署MinIO替代阿里云OSS

背景介绍

在项目开发中,我们经常需要使用对象存储服务来管理文件上传。生产环境我们使用阿里云OSS,但为了节省测试环境成本并保持环境一致性,我们选择在CentOS 7上部署MinIO作为OSS的平替方案。MinIO是一款高性能、兼容S3协议的开源对象存储服务器,可以完美模拟阿里云OSS的行为。

一、CentOS 7网络配置问题

在部署过程中,首先遇到了CentOS 7的网络配置问题。执行基本的软件安装命令时出现以下错误:

复制代码
[root@localhost ~]# sudo yum install -y wget vim
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"

问题分析

这个错误表明系统无法解析CentOS的官方镜像地址,通常是由于DNS配置问题或网络不可达导致的。

解决方案

1. 手动配置DNS解析

编辑DNS配置文件,添加可靠的DNS服务器:sudo vi /etc/resolv.conf

添加以下内容:

复制代码
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 114.114.114.114
2. 配置阿里云镜像源

CentOS 7官方源在国内访问较慢,我们改用阿里云镜像源:sudo vi /etc/yum.repos.d/CentOS-Base.repo

添加以下配置:

复制代码
[base]
name=CentOS-$releasever - Base
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
enabled=1

[updates]
name=CentOS-$releasever - Updates
baseurl=https://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
enabled=1

[extras]
name=CentOS-$releasever - Extras
baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
enabled=1
3. 禁用fastestmirror插件

这个插件在某些网络环境下可能导致问题:
sudo sed -i 's/enabled=1/enabled=0/' /etc/yum/pluginconf.d/fastestmirror.conf

4. 清理缓存并测试
复制代码
# 清理所有缓存
sudo yum clean all
sudo rm -rf /var/cache/yum

# 重新生成缓存
sudo yum makecache

# 测试安装
sudo yum install -y wget

二、MinIO部署详细步骤

1. 创建数据存储目录

复制代码
# 创建MinIO数据存储目录:
sudo mkdir -p /opt/minio/data

# 设置目录权限(非常重要,否则MinIO启动可能失败)
sudo chown -R root:root /opt/minio
sudo chmod -R 755 /opt/minio

2. 下载并安装MinIO

复制代码
# 下载MinIO RPM安装包
wget https://dl.min.io/server/minio/release/linux-amd64/minio-20250907161309.0.0-1.x86_64.rpm

# 安装MinIO
sudo rpm -ivh minio-20250907161309.0.0-1.x86_64.rpm


3. 配置MinIO系统服务

创建Systemd服务配置文件:sudo vi /usr/lib/systemd/system/minio.service

添加以下内容:

复制代码
[Unit]
Description=MinIO Object Storage
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
Type=forking
User=root
Group=root
# 核心配置:直接在启动命令中传递环境变量
ExecStart=/bin/bash -c 'mkdir -p /var/log/minio && touch /var/log/minio/minio.log && MINIO_ROOT_USER=minioadmin MINIO_ROOT_PASSWORD=minioadmin123 nohup /usr/local/bin/minio server /opt/minio/data --address "172.16.60.252:9000" --console-address "172.16.60.252:9001" > /var/log/minio/minio.log 2>&1 & echo $! > /var/run/minio.pid'
# 指定PID文件
PIDFile=/var/run/minio.pid
# 停止命令
ExecStop=/bin/bash -c 'kill $(cat /var/run/minio.pid) 2>/dev/null; rm -f /var/run/minio.pid'
# 超时配置
TimeoutStartSec=300
TimeoutStopSec=300
# 自动重启(仅在非凭证错误时重启)
Restart=on-abnormal
RestartSec=10
# 目录权限
RuntimeDirectory=minio
RuntimeDirectoryMode=0755
LogsDirectory=minio
LogsDirectoryMode=0755

[Install]
WantedBy=multi-user.target
重要参数说明:
  • MINIO_ROOT_USERMINIO_ROOT_PASSWORD:Web控制台的登录凭据
  • --address:MinIO API服务端口(默认9000),用于程序调用
  • --console-address:Web控制台端口(默认9001),用于管理界面
  • /opt/minio/data:MinIO数据存储目录
  1. 启动和管理MinIO服务

4. 重新加载systemd配置

systemctl daemon-reload

5. 启动MinIO服务

  • 启动:systemctl start minio
  • 设置开机自启:systemctl enable minio
  • 查看服务状态:systemctl status minio
  • 查看实时日志:tail -f /var/log/minio/minio.log

三、防火墙配置

对于测试环境,我们可以暂时关闭防火墙:

  1. 停止防火墙服务:systemctl stop firewalld
  2. 禁止开机自启(生产环境建议配置端口放行)systemctl disable firewalld
    如果需要在生产环境保持防火墙开启,可以开放相应端口
  3. 开放MinIO API端口:firewall-cmd --zone=public --add-port=9000/tcp --permanent
  4. 开放MinIO控制台端口:firewall-cmd --zone=public --add-port=9001/tcp --permanent
  5. 重新加载防火墙配置:firewall-cmd --reload

四、在浏览器中访问MinIO控制台:


五、访问权限问题

配置完成,通过代码上传图片到Minio,成功。但是访问提示无权限

解决:发现创建的桶默认是私有化。

  • 因为2025-05-24版本以后,新版Minio已经移除权限设置。可以恢复到2025-05-24版本以前的Minio
  • 使用命令将访问桶的限制放开。
  1. 安装mc:

    下载新版mc

    wget -O mc https://dl.min.io/client/mc/release/linux-amd64/mc
    chmod +x mc
    sudo mv mc /usr/local/bin/

    验证版本(输出版本号即成功)

    mc --version

  2. 配置Minio连接并设置权限

    配置MinIO连接(新版语法,兼容AWS4签名)

    mc config host add minio-server http://127.0.0.1:9002 minio minio@2025 --api S3v4

    设置桶为公共只读(核心命令,100%生效)

    mc policy set public minio-server/shaanxi-dev

    验证权限

    mc policy get minio-server/shaanxi-dev

  3. 访问成功

相关推荐
chlk1231 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑1 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件2 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
xy123062 天前
OpenStack Train 部署实战(三)控制节点--keystone服务
centos·openstack
深紫色的三北六号2 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash2 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI2 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行3 天前
Linux和window共享文件夹
linux
木心月转码ing3 天前
WSL+Cpp开发环境配置
linux
崔小汤呀5 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端