部署、安装和测试minio

news/2024/10/2 12:31:13

部署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

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

  1. 安装MinIO
rpm -ivh minio-20230809233022.0.0.x86_64.rpm
  1. 集成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,用于指定管理页面的地址。

  1. 启动MinIO

执行以下命令启动MinIO

systemctl start minio

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

systemctl status minio

设置MinIO开机自启

systemctl enable minio
  1. 访问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
  1. 创建存储桶

image

  1. 上传图片
  • 找到目标桶

image

  • 上传图片
    image
  1. 访问图片
  • 图片URL

    由于MinIO提供了HTTP访问功能,所以可以通过浏览器直接访问对象。对象URL为MinIO的Endpoint+对象的存储路径,例如下图中的图片对象的URL为http:192.168.10.101:9000/test/公寓-外观.jpg。
    image

  • 访问权限

    不出意外的话,使用浏览器访问上述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>
    

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

image

如上图所示,可选的访问权限共有三个选项,分别是`Private`、`Public`和`Custom`,具体说明如下- `Private`只允许桶的所有者对该桶进行读写。- `Public`允许所有人对该桶进行读写。- `Custom`自定义访问权限。若想将权限设置为只允许所有者写,但允许所有人读,就需要自定义访问权限。自定义访问权限,需要使用一个规定格式的JSON字符串进行描述,具体格式可参考[官方文档](https://min.io/docs/minio/linux/administration/identity-access-management/policy-based-access-control.html#policy-document-structure)。例如以下JSON字符串表达的含义是:允许(`Allow`)所有人(`*`)读取(`s3:GetObject`)指定桶(`test`)的所有内容。```json
{"Statement" : [ {"Action" : "s3:GetObject","Effect" : "Allow","Principal" : "*","Resource" : "arn:aws:s3:::test/*"} ],"Version" : "2012-10-17"
}
```将`test`桶访问权限设置为`Custom`,并添加上述内容

image

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

MinIO Java SDK

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

  1. 创建一个Maven项目

  2. 引入如下依赖

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.3</version>
</dependency>
  1. 编写如下内容
public class App {public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeyException {try {//构造MinIO ClientMinioClient minioClient = MinioClient.builder().endpoint("http://192.168.10.101:9000").credentials("minioadmin", "minioadmin").build();//创建hello-minio桶boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("hello-minio").build());if (!found) {//创建hello-minio桶minioClient.makeBucket(MakeBucketArgs.builder().bucket("hello-minio").build());//设置hello-minio桶的访问权限String policy = """{"Statement" : [ {"Action" : "s3:GetObject","Effect" : "Allow","Principal" : "*","Resource" : "arn:aws:s3:::hello-minio/*"} ],"Version" : "2012-10-17"}""";minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket("hello-minio").config(policy).build());} else {System.out.println("Bucket 'hello-minio' already exists.");}//上传图片minioClient.uploadObject(UploadObjectArgs.builder().bucket("hello-minio").object("公寓-外观.jpg").filename("D:\\workspace\\hello-minio\\src\\main\\resources\\公寓-外观.jpg").build());System.out.println("上传成功");} catch (MinioException e) {System.out.println("Error occurred: " + e);}}
}
  1. 运行测试

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44803.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot的Security和OAuth2的使用

创建项目 先创建一个spring项目。 然后编写pom文件如下,引入spring-boot-starter-security,我这里使用的spring boot是2.4.2,这里使用使用spring-boot-dependencies,在这里就能找到对应的security的包。 <?xml version="1.0" encoding="UTF-8"?&g…

Spring容器系列-启动原理(下)

Spring容器系列-启动原理(下)从上一篇文章《Spring容器系列-启动原理(上)》中,介绍了Spring容器初始化的核心方法refresh()的整体情况。这篇文章来详细展开介绍。其中比较重要的方法会标记上***一、refresh中的12个方法1. prepareRefresh主要作用:记录下容器启动时间,标…

云原生打包工具-Buildpacks

云原生正在吞并软件世界,容器改变了传统的应用开发模式,如今研发人员不仅要构建应用,还要使用 Dockerfile 来完成应用的容器化,将应用及其依赖关系打包,从而获得更可靠的产品,提高研发效率。 随着项目的迭代,达到一定的规模后,就需要运维团队和研发团队之间相互协作。运…

uniapp计算字符串宽度

最近手机端聊天功能,想实现气泡框,根据输入的文本,背景颜色自动适应宽度本来呢,只需要在文本外包裹一个标签,不指定宽度,就能实现,但是nvue中文本只能写在text中,来实现字体大小颜色的设置,在使用text标签后就会导致文本框宽度直接就是最长 第一种方法: 所以需要计算…

服务器从hugging face下载数据集失败

问题 服务器没法下载外网数据导致hugging face的load_dataset下载失败。 解决方法 没找到load_dataset的源代码,想办法本地下载并上传到服务器,服务器从本地使用数据集。 示例:dataset = load_dataset("mit-han-lab/pile-val-backup", split="validation&quo…

微信小程序开发云环境,使用云函数实现通用印刷体识别, openapi.ocr.printedText

1.创建新项目时,要选中云开发,APPID不能使用测试号2.微信开发者工具,点击云开发,进行注册使用,刚开始是可以试用30天,之后是需要付费的。3.npm install --save wx-server-sdk@latest 终端安装此命令 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/img…

ABC353F 分讨

回来补补题。 分析: 我先考虑 \(k\) 很大的时候,大块和大块间的移动,我们不得不尽量避免小块:我们容易发现这样时是最优的,可以发现就是在斜着走,也就是典型的切比雪夫距离。斜着走一次需要经过两条边,所以花费是两倍的切比雪夫距离。 要是起点和终点不在大块上呢? 首先…

数据可视化是如何在智慧水利中应用的?

数据可视化是如何在智慧水利中应用的?在现代水利管理中,面对复杂的水资源数据和动态变化的水文情况,数据可视化技术通过将繁杂的数据转化为直观、易理解的图表和图形,极大地提升了水利管理的效率和决策的科学性。智慧水利利用数据可视化技术,实现了对水资源的全面监控、精…