测试环境对象存储平替方案:在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_USER和 MINIO_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. 访问成功

相关推荐
沫璃染墨1 小时前
《Linux工程实践篇(一):认识设计模式——从日志系统看策略模式》
linux·c++·安全·设计模式·策略模式
工作10年+,存储芯片行业1 小时前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie
wuminyu2 小时前
ForkJoinPool内部WorkQueue的Lock-Free数组操作以及并发任务窃取原理剖析
java·linux·c语言·jvm·c++
她说彩礼65万2 小时前
C语言 堆区和栈区
java·linux·c语言
一号弯2 小时前
装完LINUX,请先新建日常用户
linux·运维·服务器
驭渊的小故事3 小时前
linux 基础命令 + git 仓库创建和配置命令
linux·git
ShineWinsu3 小时前
对于Redis:主从复制的解析
linux·数据库·c++·redis·缓存·面试·主从复制
Lsetea3 小时前
OpenSSL verify报unable to get issuer certificate:error 2与partial_chain排查
linux·https·ssl证书·openssl·证书链
许彰午3 小时前
03-Linux环境准备依赖包内核参数与用户组
linux·运维·服务器·数据库
阳光九叶草LXGZXJ3 小时前
达梦数据库-报错-16-MERGE INTO提示:无效的列名[XX]
linux·运维·数据库·sql·学习