首页 > 其他分享 >Minio

Minio

时间:2024-11-05 21:10:24浏览次数:6  
标签:MinIO minioadmin minio bucket client build Minio

Minio

部署MinIO

server01部署MinIO,安装方式采用rpm离线安装,具体步骤可参考官方文档

  1. 获取MinIO安装包

    下载地址如下:https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230809233022.0.0.x86_64.rpm,通过以下命令可直接将安装包下载至服务器

    wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230809233022.0.0.x86_64.rpm
    

    注:若下载缓慢,大家可直接使用课程资料中附带的安装包

  2. 安装MinIO

    rpm -ivh minio-20230809233022.0.0.x86_64.rpm
    
  3. 集成Systemd

    • Systemd概述

      Systemd是一个广泛应用于Linux系统的系统初始化和服务管理器,其可以管理系统中的各种服务和进程,包括启动、停止和重启服务,除此之外,其还可以监测各服务的运行状态,并在服务异常退出时,自动拉起服务,以保证服务的稳定性。系统自带的防火墙服务firewalld,我们自己安装的mysqldredis均是由Systemd进行管理的,此处将MinIO服务也交给Systemd管理。

    • 编写MinIO服务配置文件

      Systemd所管理的服务需要由一个配置文件进行描述,这些配置文件均位于/etc/systemd/system/或者/usr/lib/systemd/system/目录下,下面创建MinIO服务的配置文件。

      执行以下命令创建并打开minio.service文件

      vim /etc/systemd/system/minio.service
      

      内容如下,具体可参考MinIO官方文档

      [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
      

      注意

      重点关注上述文件中的以下内容即可

      • EnvironmentFile,该文件中可配置MinIO服务所需的各项参数
      • ExecStart,该参数用于配置MinIO服务的启动命令,其中$MINIO_OPTS$MINIO_VOLUMES,均引用于EnvironmentFile中的变量。
        • MINIO_OPTS用于配置MinIO服务的启动选项,可省略不配置。
        • MINIO_VOLUMES用于配置MinIO服务的数据存储路径。
      • Restart,表示自动重启
    • 编写EnvironmentFile文件

      执行以下命令创建并打开/etc/default/minio文件

      vim /etc/default/minio
      

      内容如下,具体可参考官方文档

      MINIO_ROOT_USER=minioadmin
      MINIO_ROOT_PASSWORD=minioadmin
      MINIO_VOLUMES=/data
      MINIO_OPTS="--console-address :9001"
      

      注意

      • MINIO_ROOT_USERMINIO_ROOT_PASSWORD为用于访问MinIO的用户名和密码,密码长度至少8位

      • MINIO_VOLUMES用于指定数据存储路径,需确保指定的路径是存在的,可执行以下命令创建该路径。

        mkdir /data
        
      • MINIO_OPTS中的console-address,用于指定管理页面的地址。

  4. 启动MinIO

    执行以下命令启动MinIO

    systemctl start minio
    

    执行以下命令查询运行状态

    systemctl status minio
    

    设置MinIO开机自启

    systemctl enable minio
    
  5. 访问MinIO管理页面

    管理页面的访问地址为:http://192.168.10.101:9001

    注意

    ip需要根据实际情况做出修改

MinIO核心概念

下面介绍MinIO中的几个核心概念,这些概念在所有的对象存储服务中也都是通用的。

  • 对象(Object)

    对象是实际的数据单元,例如我们上传的一个图片。

  • 存储桶(Bucket)

    存储桶是用于组织对象的命名空间,类似于文件夹。每个存储桶可以包含多个对象。

  • 端点(Endpoint)

    端点是MinIO服务器的网络地址,用于访问存储桶和对象,例如http://192.168.10.101:9000

    注意:

    9000为MinIO的API的默认端口,前边配置的9001以为管理页面端口。

  • Access Key 和 Secret Key

    Access Key是用于标识和验证访问者身份的唯一标识符,相当于用户名。

    Secret Key是与Access Key关联的密码,用于验证访问者的身份。

MinIO管理页面操作

  1. 登录

    管理页面的地址为http://192.168.10.101:9001,登录的用户名和密码为部署时在EnvironmentFile文件中配置的如下参数

    MINIO_ROOT_USER=minioadmin
    MINIO_ROOT_PASSWORD=minioadmin
    
  2. 创建存储桶

    MinIO入门-创建桶

  3. 上传图片

    • 找到目标桶

      • 上传图片

        MinIO入门-上传图片

    • 访问图片

      • 图片URL

        由于MinIO提供了HTTP访问功能,所以可以通过浏览器直接访问对象。对象URL为MinIO的Endpoint+对象的存储路径

        例如下图中的图片对象的URL为http:192.168.10.101:9000/test/公寓-外观.jpg

        MinIO入门-存储路径

访问权限

不出意外的话,使用浏览器访问上述URL,会得到如下响应,很显然是没有访问权限。

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied.</Message>
    <Key>公寓-外观.jpg</Key>
    <BucketName>test</BucketName>
    <Resource>/test/公寓-外观.jpg</Resource>
    <RequestId>177BC92022FC5684</RequestId>
    <HostId>dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8</HostId>
</Error>

若想继续访问图片,需要修改图片所在桶的访问权限,如下图所示

如上图所示,可选的访问权限共有三个选项,分别是PrivatePublicCustom,具体说明如下

  • Private

    只允许桶的所有者对该桶进行读写。

  • Public

    允许所有人对该桶进行读写。

  • Custom

    自定义访问权限。

若想将权限设置为只允许所有者写,但允许所有人读,就需要自定义访问权限。自定义访问权限,需要使用一个规定格式的JSON字符串进行描述,具体格式可参考官方文档

例如以下JSON字符串表达的含义是:允许(Allow)所有人(*)读取(s3:GetObject)指定桶(test)的所有内容。

{
  "Statement" : [ {
    "Action" : "s3:GetObject",
    "Effect" : "Allow",
    "Principal" : "*",
    "Resource" : "arn:aws:s3:::test/*"
  } ],
  "Version" : "2012-10-17"
}

image-20240128152502997

test桶访问权限设置为Custom,并添加上述内容

重新访问http:192.168.10.101:9000/test/公寓-外观.jpg,观察是否正常。

MinIO Java SDK

MinIO提供了多种语言的SDK供开发者使用,本项目需要用到Java SDK,下面通过一个简单案例熟悉一下其基本用法,具体内容可参考官方文档

创建一个Maven项目

引入如下依赖

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.3</version>
</dependency>

编写如下内容

连接Minio==>名称为client

 @Test
public void test01(){
  MinioClient client = MinioClient.builder()
           .endpoint("http://192.168.126.128:9000")
           .credentials("minioadmin","minioadmin")
           .build();
   System.out.println("build = " + client);
}

创建bucket桶==>名称为hello-minio

@Test
public void test02() throws Exception{
   MinioClient client = MinioClient.builder()
           .endpoint("http://192.168.126.128:9000")
           .credentials("minioadmin","minioadmin")
           .build();
   System.out.println("build = " + client);
   String bucketName = "hello-minio"; //bucket桶名称
   
   BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder()
                	.bucket(bucketName)
                	.build();
   boolean flag = client.bucketExists(bucketExistsArgs);
   if(!flag){
       MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder()
                    .bucket(bucketName)
                    .build();
       //创建bucket桶
       client.makeBucket(makeBucketArgs);
       System.out.println("创建成功");
    }else{
       System.out.println("已存在");
   }
}

配置策略==>

@Test
public void test03() throws Exception{
   MinioClient client = MinioClient.builder()
           .endpoint("http://192.168.126.128:9000")
           .credentials("minioadmin","minioadmin")
           .build();
    System.out.println("build = " + client);
    String bucketName = "hello-minio"; //bucket桶名称
    
	String config =
                """
                {
                  "Statement" : [ {
                   "Action" : "s3:GetObject",
                    "Effect" : "Allow",
                    "Principal" : "*",
                    "Resource" : "arn:aws:s3:::%s/*"
                     } ],
                     "Version" : "2012-10-17"
                     }
                     """.formatted("kunkun");
                                
   SetBucketPolicyArgs policy = SetBucketPolicyArgs.builder()
                .bucket(bucketName)
                .config(config)
                .build();
   //配置策略 
   client.setBucketPolicy(policy);
}

object类型文件上传与删除

@Test
//上传文件
public void test04() throws Exception{
    MinioClient client = MinioClient.builder()
           .endpoint("http://192.168.126.128:9000")
           .credentials("minioadmin","minioadmin")
           .build();
    System.out.println("build = " + client);
    String bucketName = "hello-minio"; //bucket桶名称
    
    String resource = "d:/img/web.jpg"
    UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
                    .bucket(bucketName) 
                    .object("流程图.jpg") //上传后的文件名
                    .filename(resource)  //被上传文件现在所在的位置
        			.build();
    //上传文件
     client.uploadObject(uploadObjectArgs);
     System.out.println("文件上传成功");
}

@Test
//删除minIO中的文件
public void test05() throws Exception{
    MinioClient client = MinioClient.builder()
           .endpoint("http://192.168.126.128:9000")
           .credentials("minioadmin","minioadmin")
           .build();
    System.out.println("build = " + client);
    //删除minIO中的文件
    String bucketName = "hello-minio"; //bucket桶名称
    
    RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder()
        							.bucket(bucketName)
        							.object("流程图.jpg") //要删除的文件名
        							.build();
    client.removeObject(removeObjectArgs);
    System.out.println("删除图片成功!!!");
}

流类型文件上传与删除

public void test04() throws Exception{ 
 try {  
       MinioClient client = MinioClient.builder()
           .endpoint("http://192.168.126.128:9000")
           .credentials("minioadmin","minioadmin")
           .build();
       String bucketName = "hello-minio"; //bucket桶名称
       String objectKey = "your-object-name.txt";  
       String content = "Hello, this is a sample file.";  
       InputStream inputStream = new ByteArrayInputStream(content.getBytes());  
            // 上传文件  
            minioClient.putObject(  
                PutObjectArgs.builder()  
                    .bucket(bucketName)  
                    .object(objectKey)  
                    .stream(inputStream, inputStream.available(), -1) // -1表示流的长度未确定  
                    .contentType("text/plain")  
                    .build()  
            );   
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
}

删除bucket桶

//删除minIO中的bucket
public void test06() throws Exception{
    MinioClient client = MinioClient.builder()
           .endpoint("http://192.168.126.128:9000")
           .credentials("minioadmin","minioadmin")
           .build();
    System.out.println("build = " + client);
    //删除minIO中的bucket
   String bucketName = "hello-minio"; //bucket桶名称
   
   RemoveBucketArgs removeBucketArgs = RemoveBucketArgs.builder().bucket(bucketName).build();
   //删除minIO中的bucket
   client.removeBucket(removeBucketArgs);
   System.out.println("已删除bucket");
}

注意:client对象是=>MinioClient的对象

运行测试

运行上述代码,然后查看MinIO管理页面,观察是否上传成功。

关于文本字符串中的转义字符

image-20240128154235471

SpringBoot 整合 Minio

创建一个spring Boot项目

引入依赖:

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.3</version>
</dependency>

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.2</version>
</dependency>
<!-- 操作minio的java客户端-->
 <dependency>
    <groupId>io.minio</groupId>
     <artifactId>minio</artifactId>
     <version>8.2.1</version>
</dependency>

编写配置文件在application.yml文件中编写相关配置。

#minio没有提示;只是在配置文件中创建变量,方便使用
minio:
	host: http://IP:9000  #Minio服务器的ip地址
	access-key: minioadmin
	secret-key: minioadmin
	bucket-name: myBucket
	url: ${minio.host}/${minio.bucket}/  #url+bucket桶名 访问地址

创建Minio的配置类:

import io.minio.MinioClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
@ConfigurationProperties(prefix = "spring.minio")  //配置类与配置文件绑定,并自动映射赋值
public class MinioConfig {

    private String accessKey;
    private String secretKey;
    private String url;
    private String bucketName;

    @Bean
    public MinioClient minioClient(){
        return MinioClient.builder()
                .endpoint(url)
                .credentials(accessKey,secretKey)
                .build();
    }
}

编写minio工具类

标签:MinIO,minioadmin,minio,bucket,client,build,Minio
From: https://www.cnblogs.com/21CHS/p/18528855

相关文章

  • 解决docker安装minio容器时,minio容器启动几秒后自动退出的一种方法
    笔者在部署minio容器时,遇到了以上问题。起初以为是我端口被占用或存储空间不足,经过检测排除了以上问题。以下是最初的安装命令:dockerrun-d--nameminio--restart=always-p9000:9000-e"MINIO_ACCESS_KEY=minio"-e"MINIO_SECRET_KEY=minio123"-v/home/data:/data-v/......
  • SpringBoot项目集成MinIO
    一、MinIO的下载安装以及基本使用1.下载地址:https://dl.min.io/server/minio/release/windows-amd64/minio.exe2.下载好后需要手动创建data文件夹用于存储MinIO中的数据 3.键入cmd 4.设置MinIO的一些变量(第一次启动需要配置)setMINIO_ROOT_USER=adminsetMINIO_ROOT_P......
  • k8s 1.28.2 集群部署 Thanos 对接 MinIO 实现 Prometheus 数据长期存储
    目录什么是ThanosThanos的主要功能Thanos的架构组件Thanos部署架构SidecarReceive架构选择开始部署部署架构创建namespacenode-exporter部署kube-state-metrics部署Prometheus+Thanos-Sidecar部署固定节点创建label生成secretMinIO配置etcd证书启动Prometheus+Th......
  • docker-minio启动参数
    完整命令 dockerrun-p9000:9000-p9090:9090-v/opt/minio/data:/data-d--name-d--restart=alwaysminio-e"MINIO_ACCESS_KEY=minio"-e"MINIO_SECRET_KEY=minio@admin123"minio/minioserver--console-address":9090"-address&q......
  • minio 多节点部署
    先决条件firewalld配置firewall-cmd--permanent--zone=public--add-port=9000/tcpfirewall-cmd--reload节点说明cat>>/etc/hosts<<EOF192.168.174.100minio-01192.168.174.101minio-02EOF挂载点mkdir-pv/data/disk1/miniomkdir-pv/data/disk2/mini......
  • nginx 代理 minio
    nginx.confupstreamminio_s3{least_conn;serverminio-01.internal-domain.com:9000;serverminio-02.internal-domain.com:9000;serverminio-03.internal-domain.com:9000;serverminio-04.internal-domain.com:9000;}upstreamminio_console{......
  • MinIO上传和下载文件及文件完整性校验.
    MinIO上传和下载文件及文件完整性校验.packagecom.xuecheng.media;importcom.j256.simplemagic.ContentInfo;importcom.j256.simplemagic.ContentInfoUtil;importio.minio.*;importio.minio.errors.*;importorg.apache.commons.codec.digest.DigestUtils;importorg......
  • 对象存储服务MinIO-快速入门-集成项目
    对象存储服务MinIOMinIO简介MinIO基于ApacheLicensev2.0开源协议的对象存储服务,可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux,OSX和FreeBSD上。配置简单,基本是复制可执行程序,单行命令可以运行起来。MinIO......
  • MinIO
    1.概述一个开源的用于存储文件的分布式文件存储系统2.官网http://docs.minio.org.cn/docs/3.相关概念bucket–类比于文件系统的目录Object–类比文件系统的文件Keys–类比文件名4.搭建dockerrun-p9000:9000--nameminio-d--restart=always-e"MINIO_A......
  • minio多节点
    1.在所有节点安装miniowgethttps://dl.min.io/server/minio/release/linux-amd64/archive/minio_20241002175041.0.0_amd64.deb-Ominio.debdpkg-iminio.deb2.修改所有节点的hosts文件,将主机名设置为连续值vi/etc/hosts192.168.1.101minio1192.168.1.102minio23......