minio安装部署和minIO-Client的使用

minio安装部署和minIO-Client的使用

在这里插入图片描述

一、服务器安装minio

1.进行下载

下载地址:

GNU/Linux

https://dl.min.io/server/minio/release/linux-amd64/minio

2.新建minio安装目录,执行如下命令

mkdir -p /home/minio/data

把二进制文件上传到安装目录后,执行:

chmod +x minio    //给予权限
export MINIO_ACCESS_KEY=minioadmin   //创建账号
export MINIO_SECRET_KEY=minioadmin   //创建密码
./minio server /home/minio/data        //启动

后台启动,并打印日志

nohup ./minio server /home/minio/data > /home/minio/data/minio.log &

默认的端口为:9000

自定义端口方式:自定义启动端口号以及控制台端口号,不设置则控制台会自动配置其他端口号,非常不方便

nohup ./minio server  --address :9000 --console-address :9001 /home/minio/data > /home/minio/data/minio.log &

查看状态

ps -ef|grep minio

3.docker安装minio

docker pull minio/minio

预选↓

docker run -d \
  -p 9000:9000 \
  --name minio2 \
  -v /home/minio/data:/data \
  -e "MINIO_ROOT_USER=minioadmin" \
  -e "MINIO_ROOT_PASSWORD=minioadmin" \
  minio/minio server /data --console-address ":9090"
新版用这个↓
docker run \
    -p 9000:9000 \
    -p 9090:9001 \
    --name sifan-minio \
    -d --restart=always \
    -v /root/sifan/minio/data:/data \
    -e "MINIO_ROOT_USER=youmans" \
    -e "MINIO_ROOT_PASSWORD=Youmans@7" \
    minio/minio:latest server /data --console-address ":9001" -address ":9000"
docker run -p 9000:9000 -p 9090:9090  --name minio  -d --restart=always  -e "MINIO_ACCESS_KEY=youmans"  -e "MINIO_SECRET_KEY=Youmans@7"  -v /mydata/minio/data:/data  minio/minio server  /data --console-address ":9090" -address ":9000"
docker run -p 9000:9000 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=youmans" -e "MINIO_SECRET_KEY=youmans7" -v /mydata/minio/data:/data -v /mydata/minio/config:/root/.minio minio/minio server /data --console-address ":9000" --address ":9090"
docker run -p 9000:9000 -p 9090:9090  --name minio  -d --restart=always  -e "MINIO_ACCESS_KEY=youmans"  -e "MINIO_SECRET_KEY=youmans7"  -v /mydata/minio/data:/data  minio/minio:RELEASE.2021-06-17T00-10-46Z server  /data --console-address ":9090" -address ":9000"

设置开机自启

docker update --restart=always e51aed0a

二、进行访问,并设置桶

1.访问测试

    地址:http://192.168.56.10:9000

输入账号密码后:

进行创建桶,名字自取,创建完成后服务器home/minio/data下也会创建这个文件目录

在这里插入图片描述

2.设置public权限

在这里插入图片描述

必须将规则设置成readwrite ,才可进行读取文件,否则只存或者只能读。

在这里插入图片描述

三、springboot进行实现

1.引入依赖

<!-- minio 相关依赖 -->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>3.0.10</version>
</dependency>
<!-- alibaba的fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.51</version>
</dependency>
<!-- thymeleaf模板引擎 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
        <!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>

2.在 application.yml 文件中加入 MinIO 服务器的相关信息

minio 文件存储配置信息
minio:
  endpoint: http://192.168.56.10:9000
  accesskey: minioadmin
  secretKey: minioadmin

3.创建实体类

这一步,我们将配置文件中 minio 的配置信息通过注解的方式注入到 MinioProp 这个实体中,方便后面我们使用

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
 
/**
 * minio 属性值
 */
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProp {
    /**
     * 连接url
     */
    private String endpoint;
    /**
     * 用户名
     */
    private String accesskey;
    /**
     * 密码
     */
    private String secretKey;

    private String bucketname;
}

4.创建核心配置类

通过注入 MinIO 服务器的相关配置信息,得到 MinioClient 对象,我们上传文件依赖此对象

import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**

 * minio 核心配置类
   */
   @Configuration
   @EnableConfigurationProperties(MinioProp.class)
   public class MinioConfig {

   @Autowired
   private MinioProp minioProp;

   /**

    * 获取 MinioClient
      *
    * @return
    * @throws InvalidPortException
    * @throws InvalidEndpointException
      */
      @Bean
      public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
      return new MinioClient(minioProp.getEndpoint(), minioProp.getAccesskey(), minioProp.getSecretKey());
      }
      }

5.上传工具类

import com.alibaba.fastjson.JSONObject;
import com.zyxx.email.common.redis.RedisUtil;
import com.zyxx.email.utils.DateUtils;
import io.minio.MinioClient;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

@Slf4j
@Component
public class MinioUtils {
@Autowired
private MinioClient client;
@Autowired
private MinioProp minioProp;
 
/**
 * 创建bucket
 *
 * @param bucketName bucket名称
 */
@SneakyThrows
public void createBucket(String bucketName) {
    if (!client.bucketExists(bucketName)) {
        client.makeBucket(bucketName);
    }
}
 
/**
 * 上传文件
 *
 * @param file       文件
 * @param bucketName 存储桶
 * @return
 */
public JSONObject uploadFile(MultipartFile file, String bucketName) throws Exception {
    JSONObject res = new JSONObject();
    res.put("code", 0);
    // 判断上传文件是否为空
    if (null == file || 0 == file.getSize()) {
        res.put("msg", "上传文件不能为空");
        return res;
    }
    try {
       	// 判断存储桶是否存在
        createBucket(bucketName);
        // 文件名
        String originalFilename = file.getOriginalFilename();
        // 新的文件名 = 存储桶名称_时间戳.后缀名
        String fileName = bucketName + "_" + System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf("."));
        // 开始上传
        client.putObject(bucketName, fileName, file.getInputStream(), file.getContentType());
        res.put("code", 1);
        res.put("msg", minioProp.getEndpoint() + "/" + bucketName + "/" + fileName);
        return res;
	}  catch (Exception e) {
        log.error("上传文件失败:{}", e.getMessage());
    }
    res.put("msg", "上传失败");
    return res;
}
}

6.controller接口

import com.alibaba.fastjson.JSONObject;
import com.zyxx.email.common.minio.MinioUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;

@Controller
public class MinioController {

@Autowired
private MinioUtils minioUtils;
/**
 * 上传
 *
 * @param file
 * @param request
 * @return
 */
@PostMapping("/upload0")
@ResponseBody
public String upload0(@RequestParam(name = "file", required = false) MultipartFile file, HttpServletRequest request) {
    JSONObject res = null;
    try {
        res = minioUtils.uploadFile(file, "product");
    } catch (Exception e) {
        e.printStackTrace();
        res.put("code", 0);
        res.put("msg", "上传失败");
    }
    return res.toJSONString();
}
}
    @ResponseBody
    @PostMapping("/upload")
    public String upload(MultipartFile file)throws IOException {
        try {
            return    minioUtils.uploadFile(file,minioProp.getBucketname());
        } catch (Exception e) {
            e.printStackTrace();
            return null ;
        }
    }

7.swagger配置

import com.google.common.base.Predicates;
import org.apache.tomcat.util.http.LegacyCookieProcessor;
import org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration//配置类
@EnableSwagger2 //swagger注解
public class SwaggerConfig {

    @Bean
    public Docket webApiConfig(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("webApi")
                .apiInfo(webApiInfo())
                .select()
               // .paths(Predicates.not(PathSelectors.regex("/admin/.*")))
                .paths(Predicates.not(PathSelectors.regex("/error.*")))
                .build();

    }

    private ApiInfo webApiInfo(){

        return new ApiInfoBuilder()
                .title("谷粒学院API文档")
                .description("本文档描述了谷粒学院微服务接口定义")
                .version("1.0")
                .contact(new Contact("java", "http://atguigu.com", "1123@qq.com"))
                .build();
    }
    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> cookieProcessorCustomizer() {
        return tomcatServletWebServerFactory -> tomcatServletWebServerFactory.addContextCustomizers((TomcatContextCustomizer) context -> {
            context.setCookieProcessor(new LegacyCookieProcessor());
        });
    }
}

8.通过网址进行访问

在这里插入图片描述

9.Swagger进行测试上传

在这里插入图片描述

10.删除文件

//文件删除
@DeleteMapping
public String delete(String name) {
    try {
        MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);
        minioClient.removeObject(BUCKETNAME, name);
    } catch (Exception e) {
        return "删除失败"+e.getMessage();
    }
    return "删除成功";
}

四、安装客户端MinIO-Client

1.下载minio-client

win地址:https://dl.min.io/client/mc/release/windows-amd64/mc.exe

将文件复制到:C:\Windows\System32\

就可以通过命令行操作

linux地址:https://dl.min.io/client/mc/release/linux-amd64/mc

百度云盘:

mc链接:https://pan.baidu.com/s/1OXkNN2frCqpJb3EWwiHM8g
提取码:i6l5

mc.exe链接:https://pan.baidu.com/s/1cJPgvljKfH9ihGN-fQuasg
提取码:pe32

2.使用minio-client连接服务端

以win为例

添加minIO服务

**mc config host add minio01 http://192.168.56.10:9000 minioadmin minioadmin**

查询mc host配置

mc config host ls
删除host

mc config host remove minio01
端口为api端口。

如果使用控制台端口就会报错

mc: Unable to list folder. S3 API Request made to Console port. S3 Requests should be sent to API port.


### 3.mc访问minIO服务操作文件

使用 mc ls minio01访问列出所有的桶,可以加桶名进行后续的访问

![在这里插入图片描述](http://39.98.72.193:9000/youmans-dfs/2022-12-12/Dfs_pic_1670860529628.png#pic_center)






复制本地文件到桶

mc cp C:\Users\Administrator\Desktop\美女图片_360图片_files\g.jpg minio01/yootk

![在这里插入图片描述](https://img-blog.csdnimg.cn/fb5bcaf54afc40e0b33adb3ac8837c1f.png#pic_center)


复制MinIO文件到本地

mc cp minio01/yootk/g.jpg D:\tiger


![在这里插入图片描述](https://img-blog.csdnimg.cn/b0497e26befb4291b3b8ab2a6bc20622.png#pic_center)


备:本地路径需存在

删除文件:

mc rm minio01/yootk/gg


![在这里插入图片描述](https://img-blog.csdnimg.cn/e0330cb430aa4d33a8d744f585288191.png#pic_center)




#创建bucket
mc mb minio-server/bucket01
#删除bucket
mc rb minio-server/bucket02
并bucket不为空,可以强制删除慎用
mc rb --force minio-server/bucket0l
查看磁盘使用情况
mc du minio01/yootk




### 4.MinIO mc admin 命令使用

#### ①.基础命令

service 服务重启并停止所有MinIo服务器
update 更新更新所有MinIO服务器
info 信息显示MinIO服务器信息
user 用户管理用户
group 小组管理小组
policy MinIo服务器中定义的策略管理策略
config 配置管理MinIo服务器配置
heal 修复MinIo服务器上的磁盘,存储桶和对象
profile 概要文件生成概要文件数据以进行调试
top 顶部提供MinIo的顶部统计信息
trace 跟踪显示MinIo服务器的http跟踪
console 控制台显示MinI0服务器的控制台日志
prometheus Prometheus管理Prometheus配置
kms kms执行KMs管理操作


#### ②.用户管理

mc admin user --help
#新建用户
mc admin user add minio-server fox
mc admin user add minio-server root minioadmin
#查看用户
mc admin user list minio-server
#禁用用户
mc admin user disable minio-server fox02
#启用用户
mc admin user disable minio-server fox02
#查看用户信息
mc admin user info minio-server fox
#删除用户
mc admin user remove minio-server fox02


### 5.MinIO策略操作

#### ①.列出MinIO上的所有固定策略

mc admin policy list minio01


![在这里插入图片描述](https://img-blog.csdnimg.cn/7d0e48a108ec4125ad10f17fcb36f13f.png#pic_center)


#### ②.查看policy信息 

mc admin policy info minio01 readwrite
C:\Windows\system32>mc admin policy info minio01 readwrite
{
“PolicyName”: “readwrite”,
“Policy”: {
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“s3:"
],
“Resource”: [
"arn:aws:s3:::

]
}
]
}
}


#### ③.在liunix添加策略

#/usr/local/soft/yootk.json
#设置yootkt桶的读取权限和yootk/下的所有权限
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“s3:GetBucketLocation”,
“s3:GetObject”
],
“Resource”: [
“arn:aws:s3:::yootk”
]
},
{
“Effect”: “Allow”,
“Action”: [
“s3:"
],
“Resource”: [
"arn:aws:s3:::yootk/

]
}
]
}

mc admin policy add minio02 yootk-admin /usr/local/soft/yootk.json

在这里插入图片描述

④.为用户root设置yootk-admin策略

mc admin policy set minio02 yootk-admin user=root

在这里插入图片描述

⑤.访问控制台测试(root)

在这里插入图片描述

附件:linux中配置

1.获取minio文件

[root@hadoop001 minio]# wget http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
[root@hadoop001 minio]# chmod +x mc 
[root@hadoop001 minio]# mv mc /usr/bin/

#查看帮助信息

[root@hadoop001 minio]# mc -h

2.设置host

mc config host add minio02 http://192.168.56.10:9000  minioadmin  minioadmin 
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值