背景介绍
在项目开发中,我们经常需要使用对象存储服务来管理文件上传。生产环境我们使用阿里云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数据存储目录
- 启动和管理MinIO服务
4. 重新加载systemd配置
systemctl daemon-reload
5. 启动MinIO服务
- 启动:
systemctl start minio - 设置开机自启:
systemctl enable minio - 查看服务状态:
systemctl status minio - 查看实时日志:
tail -f /var/log/minio/minio.log

三、防火墙配置
对于测试环境,我们可以暂时关闭防火墙:
- 停止防火墙服务:
systemctl stop firewalld - 禁止开机自启(生产环境建议配置端口放行)
systemctl disable firewalld
如果需要在生产环境保持防火墙开启,可以开放相应端口 - 开放MinIO API端口:
firewall-cmd --zone=public --add-port=9000/tcp --permanent - 开放MinIO控制台端口:
firewall-cmd --zone=public --add-port=9001/tcp --permanent - 重新加载防火墙配置:
firewall-cmd --reload

四、在浏览器中访问MinIO控制台:
- 地址:http://172.16.60.252:9001
- 用户名:minioadmin
- 密码:minioadmin123


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

解决:发现创建的桶默认是私有化。
- 因为2025-05-24版本以后,新版Minio已经移除权限设置。可以恢复到2025-05-24版本以前的Minio
- 使用命令将访问桶的限制放开。
-
安装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
-
配置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
-
访问成功
