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

相关推荐
广州灵眸科技有限公司5 小时前
瑞芯微(EASY EAI)RV1126B 音频输入
linux·开发语言·网络·音视频
文弱书生6565 小时前
2-electronbot主控免驱工程结构
linux·单片机·嵌入式硬件
铜豌豆_Y6 小时前
【实用】GDB调试保姆级教程|常用操作|附笔记
linux·c语言·驱动开发·笔记·嵌入式
m0_485614676 小时前
Linux--Docker网络管理
linux·docker·eureka
石像鬼₧魂石7 小时前
HexStrike AI 理想操作流程清单(完整功能版)
linux·人工智能·windows·学习·ubuntu
Xの哲學7 小时前
Linux UPnP技术深度解析: 从设计哲学到实现细节
linux·服务器·网络·算法·边缘计算
柏木乃一7 小时前
进程(6)进程切换,Linux中的进程组织,Linux进程调度算法
linux·服务器·c++·算法·架构·操作系统
Jelly-小丑鱼7 小时前
Linux搭建SQLserver数据库和Orical数据库
linux·运维·数据库·sqlserver·oracal·docker容器数据库
CAU界编程小白7 小时前
Linux编程系列之权限理解和基础开发工具的使用(下)
linux
Run_Teenage7 小时前
Linux:进程等待
linux·运维·服务器