安装和启动
离线安装 minio的rpm包
rpm -ivh minio-20230809233022.0.0.x86_64.rpm
启动minio服务
minio server ./
集成systemd
MinIO 集成 systemd 是为了实现 服务化管理(支持 systemctl start/stop/restart)和 开机自启,适用于 CentOS 7+/RHEL 7+ 等支持 systemd 的系统。核心思路是创建 minio.service 服务文件,定义启动参数、运行用户、依赖关系等,以下是 通用且规范的集成步骤(覆盖 RPM 安装和二进制安装两种场景):
1. 创建服务文件
vim /usr/lib/systemd/system/minio.service
2. 写入服务配置(根据安装场景选择)
[Unit]
Description=MinIO
Documentation=https://min.io/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
[Service]
WorkingDirectory=/usr/local
ProtectProc=invisible
EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always
LimitNOFILE=65536
TasksMax=infinity
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
删除配置文件里面的
# 明确指定启动用户(必须是 minio-user,避免 217/USER 错误)
User=minio-user
Group=minio-user
关键配置说明(避免踩坑)
ExecStart:必须指定完整的 MinIO 执行路径(通过which minio确认),否则会提示 “命令未找到”。Environment:AK/SK 直接写在服务文件中,若需分离配置(推荐),可改为读取环境变量文件(见下文优化)。LimitNOFILE=65536:MinIO 高并发时需要大量文件描述符,默认系统限制较低,必须配置。Restart=always:确保 MinIO 异常退出后自动重启,提高可用性。
3.优化:分离环境变量配置(推荐生产环境)
若不想将 AK/SK 写死在服务文件中,可通过 EnvironmentFile 读取外部配置文件,步骤如下:
1. 创建 MinIO 环境变量文件
# 创建配置文件(权限 600,仅 root 可读,保护密钥)
vim /etc/default/minio
chmod 600 /etc/default/minio
2. 写入环境变量
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
MINIO_VOLUMES=/data
MINIO_OPTS="--console-address :9001"
3.创建data目录
mkdir /data
4.启动MinIO
执行以下命令启动MinIO
systemctl start minio
执行以下命令查询运行状态
systemctl status minio
如果执行systemctl start minio报错如下:

可以执行一下
systemctl daemon-reload #重载 systemd 配置
再执行启动命令就好了
systemctl enable minio #设置minio开机自启
5.防火墙永久开放 9001 端口
# 永久开放 TCP 9001 端口(--permanent 表示永久生效)
firewall-cmd --permanent --add-port=9001/tcp
# 重载防火墙配置(使永久规则生效)
firewall-cmd --reload
6.浏览器访问minio

MinIO管理页面操作
1.登录
管理页面的地址为http://192.168.200.128:9001,登录的用户名和密码为部署时在EnvironmentFile文件中配置的如下参数
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
2.创建bucket


上传图片到bucket后,尝试访问一下

发现根本访问不了

如上图所示,可选的访问权限共有三个选项,分别是Private、Public和Custom,具体说明如下
-
Private
只允许桶的所有者对该桶进行读写。
-
Public
允许所有人对该桶进行读写。
-
Custom
自定义访问权限。
若想将权限设置为只允许所有者写,但允许所有人读,就需要自定义访问权限。自定义访问权限,需要使用一个规定格式的JSON字符串进行描述,具体格式可参考官方文档。
{
"Statement" : [ {
"Action" : "s3:GetObject",
"Effect" : "Allow",
"Principal" : "*",
"Resource" : "arn:aws:s3:::test/*"
} ],
"Version" : "2012-10-17"
}

MinIO Java SDK
MinIO提供了多种语言的SDK供开发者使用,本项目需要用到Java SDK,下面通过一个简单案例熟悉一下其基本用法,具体内容可参考官方文档。
首先引入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.17</version>
</dependency>
具体实现代码:
package com.yuhuan.book;
import io.minio.*;
import io.minio.errors.*;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@SpringBootTest
public class MinioTest {
String endpoint = "http://192.168.200.128:9000";
String accessKey = "minioadmin";
String secretKey = "minioadmin";
String bucketName = "images";
@Test
public void testMinio(){
MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
try {
boolean b = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!b){
//如果不存在就创建这个桶
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
//设置该桶的访问权限
String policy = """
{
"Statement" : [ {
"Action" : "s3:GetObject",
"Effect" : "Allow",
"Principal" : "*",
"Resource" : "arn:aws:s3:::%s/*"
} ],
"Version" : "2012-10-17"
}
""".formatted(bucketName);
minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(policy).build());
}
//上传文件
minioClient.uploadObject(UploadObjectArgs.builder().bucket(bucketName).filename("D:\\ScreenShot_2025-11-16_223417_598.png").object("ScreenShot_2025-11-16_223417_598.png").build());
System.out.println("上传成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}

3056

被折叠的 条评论
为什么被折叠?



