linux安装minio并使用
前言:
因最新版的minio无法在后台管理页面配置用户及权限,根据官方文档总结本文,通过管理工具mc命令,进行用户管理及权限配置。
官网文档及下载地址:
https://min.io/download?view=aistor-custom
1、下载并安装
1.1 命令下载及安装
sudo dnf install minio.rpmmkdir ~/miniominio server ~/minio --console-address :9001
1.2 验证安装
打开浏览器访问:http://localhost:9001
默认账号密码均为:minioadmin
1.3 安装管理客户端
官网安装地址:
https://min.io/docs/minio/linux/reference/minio-mc.html
或通过 命令下载及安装
wget https://dl.min.io/client/mc/release/linux-amd64/mcchmod +x mcsudo mv mc /usr/local/bin/mc
1.4 验证mc安装
mc alias set myminio http://127.0.0.1:9000 minioadmin minioadmin
如图显示连接成功
1.5 常用命令
新增用户
mc admin user add myminio newuser newusersecret
例:
删除用户
mc admin user rm myminio demo1
添加分组
mc admin group add myminio groupname username
例:
查看分组
mc admin group ls myminiomc admin group info myminio group1
例:
为用户demo1创建密钥
mc admin accesskey create myminio demo1 --access-key demo1accesskey --secret-key demo1secretkey
给用户demo1添加读写权限
mc admin policy attach myminio readwrite --user demo1
修改默认管理员账号密码
vim ~/.bashrc
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin123
保存,退出,刷新环境变量
source ~/.bashrc
重启minio
2. java使用minio
2.1 引入依赖
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.17</version></dependency>
2.2更改application.yml配置
minio:endpoint: http://192.168.52.152:9000accesskey: demo1accesskeysecretkwy: demo1secretkey
2.3 添加配置类
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** minio 属性值*/
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProp {//连接urlprivate String endpoint;//公钥private String accesskey;//私钥private String secretkwy;
}
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** minio核心配置类* 通过注入 MinIO 服务器的相关配置信息,得到 MinioClient 对象,我们上传文件依赖此对象*/
@Configuration
public class MinioConfig {@Autowiredprivate MinioProp prop;/*** 获取 MinioClient* @return MinioClient*/@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(prop.getEndpoint()).credentials(prop.getAccesskey(),prop.getSecretkwy()).build();}
}
2.4 工具类
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Item;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.io.ByteArrayInputStream;
import java.io.InputStream;/*** minio操作类*/
@Component
public class MinioUtils {@Autowiredprivate MinioClient client;@Autowiredprivate MinioProp minioProp;/*** 创建桶** @param bucketName 桶名称*/@SneakyThrowspublic void createBucket(String bucketName) {boolean found =client.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());if (!found) {client.makeBucket(MakeBucketArgs.builder().bucket(bucketName).region("cn-beijing").build());}}/*** 删除桶** @param bucketName 桶名称*/@SneakyThrowspublic void removeBucket(String bucketName) {client.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());}/*** 获取文件信息** @param bucketName 桶名称* @param objectName 文件名称* @return*/@SneakyThrowspublic StatObjectResponse getObjectInfo(String bucketName, String objectName) {return client.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());}/*** 上传文件** @param bucketName 桶名称* @param objectName 文件名* @param stream 流* @param fileSize 文件大小* @param type 文件类型* @throws Exception*/public void putObject(String bucketName, String objectName, InputStream stream, Long fileSize, String type) throws Exception {client.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(stream, fileSize, -1).contentType(type).build());}/*** 判断文件夹是否存在** @param bucketName 桶名称* @param prefix 文件夹名字* @return*/@SneakyThrowspublic Boolean folderExists(String bucketName, String prefix) {Iterable<Result<Item>> results = client.listObjects(ListObjectsArgs.builder().bucket(bucketName).prefix(prefix).recursive(false).build());for (Result<Item> result:results){Item item = result.get();if (item.isDir()){return true;}}return false;}/*** 创建文件夹* @param bucketName 桶名称* @param path 路径*/@SneakyThrowspublic void createFolder(String bucketName,String path) {client.putObject(PutObjectArgs.builder().bucket(bucketName).object(path).stream(new ByteArrayInputStream(new byte[]{}),0,-1).build());}/*** 获取文件在minio在服务器上的外链* @param bucketName 桶名称* @param objectName 文件名* @return*/@SneakyThrowspublic String getObjectUrl(String bucketName,String objectName){return client.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucketName).object(objectName).build());}}