沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • API网关

  • RPC

  • 消息队列

  • Spring Cloud

  • 分布式事务

  • 云存储

    • 云存储基础小结
    • minio 入门
      • 官方文档
      • 什么是 MinIo ?
      • MInIo 环境部署
        • 环境准备
        • 启动 MInIo
        • MinIo 关闭
      • 使用 Docker 启动 MinIo
        • 安装 Docker
        • 拉取 MinIo 镜像
      • Windows 下启动 MinIo
      • Spring Boot 集成 MinIO 开发
        • 操作步骤
        • MinIO 中的 Bucket、Object
        • MinioClient 的常用 API
        • 操作桶
        • 操作对象
      • Vue3 + SpringBoot3 + Minio 实践
        • Vue
        • 前端运行环境和工具
        • 安装 Node.js
        • Vue 工程运行流程分析
        • 使用 element-plus
      • MinIO 集群部署
        • 纠删码模式部署
    • MinIo vs OSS
    • 讲讲断点续传的实现
  • 搜索引擎

  • 多媒体框架

  • 虚拟机

  • 微服务
  • 云存储
沉梦听雨
2024-05-12
目录

minio 入门

# Minio 入门

# 官方文档

官网:https://min.io/ (opens new window)

中文:http://minio.org.cn/ (opens new window)

# 什么是 MinIo ?

人工智能数据基础设施的对象存储。

人工智能数据:

  1. 文本数据:新闻报道、社交媒体文章、博客......
  2. 语音数据:音频形式存储的数据,语音 mp3 文件......
  3. 图像数据:各种图片......
  4. 视频数据:各种视频、电影......
  5. 非结构化数据:没有明确结构的数据,比如社交评论、日志文件......

特征:

  • 为人工智能系统提供数据支持,数据存储;
  • 对象存储(Object Storage)是一种数据存储架构,它以对象为单位来处理、存储和检索数据,每个对象都包含了数据本身以及元数据;
  • MinIO 存储的【元数据】主要包括对象的描述信息,如用户(account)、存储桶(bucket)以及存储桶索引(bucket index)等;
  • 对象存储系统通常通过基于 HTTP 或 HTTPS 协议的 API(应用程序编程接口)进行数据读写;

minio 版权许可:

  • MinIO 具有双重许可:
    • 开源 GNU AGPL v3;(完全免费)
    • 商业企业许可证;(收费)
  • 兼容亚马逊 S3 云存储服务接口;

# MInIo 环境部署

# 环境准备

  1. Github:https://github.com/minio (opens new window)
  2. Gitee:https://gitee.com/mirrors/minio (opens new window)
  3. Linux 下载:wget https://dl.min.io/server/minio/release/linux-amd64/minio
    • 赋予可执行权限:chmod +x minio 或者 chmod 744 minio
    • minio 可执行程序怎么使用:minio [FLAGS] COMMAND [ARGS...]

# 启动 MInIo

执行命令:

MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"
1

或者:

./minio server /mnt/data --console-address ":9001"
1

后台启动(&结束):

./minio server /mnt/data --console-address ":9001" &
1

指令解析:

  1. MINIO ROOT USER 指定 MinIO 的用户名;
  2. MINIO ROOT PASSWORD 指定 MinIO 的密码;
  3. /mnt/data 指定 MinIO 服务器用于存储数据的目录;
  4. console-address ":9001" 指定 MinIO 控制台的监听地址和端口(只写 : 表示 MinIO 服务器监听所有地址上的 9000 端口)
  5. 尾部加上与字符(&)代表后台启动

# MinIo 关闭

查询 MinIO 进程:ps -ef | grep minio

后台启动的 MinIO 如何关闭(杀死进程):kill pid

前台启动的 MinIO 如果关闭:ctrl + c

# 使用 Docker 启动 MinIo

# 安装 Docker

安装Docker | 沉梦听雨的编程指南 (cmty256.github.io) (opens new window)

# 拉取 MinIo 镜像

使用 Docker 镜像启动 MinIO

1、搜索 MinIO 镜像:docker search minio

2、拉取 MinIO 镜像:docker pull minio/minio

3、启动 MinIO 容器:docker run -p 9000:9000 -p 9001:9001 minio/minio server /mnt/docker/data --console-address :9001(会出现默认账密)

# 官方文档示例:https://min.io/docs/minio/container/index.html
mkdir -p ~/software/minio/data

docker run \
   -p 9000:9000 \
   -p 9001:9001 \
   --name minio \
   -v ~/software/minio/data:/data \
   -e "MINIO_ROOT_USER=ROOTNAME" \
   -e "MINIO_ROOT_PASSWORD=CHANGEME123" \
   quay.io/minio/minio server /data --console-address ":9001"
1
2
3
4
5
6
7
8
9
10
11

解析:

上面的示例是这样工作的:

  • mkdir 在主目录中创建一个新的本地目录。~/software/minio/data

    -p 选项告诉 mkdir 命令要创建指定路径中的所有父目录,即使其中的一些父目录不存在也会创建。如果省略 -p 选项,而其中的某些父目录不存在,则 mkdir 命令将会报错。

  • docker run 启动 MinIO 容器。

  • -p 将本地端口绑定到容器端口。

  • -name 为容器创建名称。

  • -v 将文件路径设置为容器使用的持久卷位置。 当MinIO将数据写入 /data 时,该数据会镜像到本地路径 ~/minio/data, 使其能够在容器重新启动时保持持久化。 您可以设置任何具有读取、写入和删除权限的文件路径来使用。

  • -e 分别设置环境变量(用户名和密码)。

  • quay.io/minio/minio 是一个 Docker 镜像的名称,表示从 Quay.io 镜像仓库中拉取的 MinIO 镜像。server /data 是运行在容器内部的 MinIO 命令,它告诉 MinIO 服务器在容器启动时将 /data 目录作为数据存储目录,并且开始以服务器模式运行

查看已安装的镜像:docker images

删除镜像:docker rmi minio/minio(默认会有个别名,rm 等价于 rmi)

# Windows 下启动 MinIo

MinIO | 官方下载文档(Windows) (opens new window)

  1. 下载 windows 版的 MinIO:https://dl.min.io/server/minio/release/windows-amd64/minio.exe (opens new window)
  2. 进入到 minio.exe 所在的目录:执行 minio.exe server D:\dev\MinIO\data 启动 minio 服务,其中 D:\software\MinIO\data 是 MinIO 存储数据的目录路径
  3. 在浏览器输入:http://localhost:9000/ (opens new window),登录 MinIO 服务器 web 管理后台
  4. 默认用户名密码都是 minioadmin

# Spring Boot 集成 MinIO 开发

官方文档:

  • https://min.io/docs/minio/linux/developers/minio-drivers.html (opens new window)
  • 软件开发工具包(SDK) — MinIO中文文档 | MinIO Linux中文文档 (opens new window)
  • Java快速指南 — MinIO中文文档 | MinIO Linux中文文档 (opens new window)
  • Java Client API Reference — MinIO Object Storage for Linux (opens new window)

# 操作步骤

1、建项目;

2、加依赖;(目前没有 **-minio-starter 的依赖)

3、配文件;

4、写代码;

5、去运行;

# MinIO 中的 Bucket、Object

  • Bucket 是存储 Object 的逻辑空间,每个 Bucket 之间的数据是相互隔离的,对用户而言,相当于存放文件的顶层文件夹;
  • Object 是存储到 MinIO 的基本对象,对用户而言,相当于文件;

# MinioClient 的常用 API

# 操作桶

  1. bucketExists():用于检查指定的存储桶是否存在,返回布尔值,表示存储桶是否存在;
  2. makeBucket():用于创建一个新的存储桶(bucket),需要指定存储桶的名称,无返回值,创建失败会抛出异常;
  3. listBuckets():用于列出用户有权访问的所有存储桶,返回存储桶的列表;
  4. removeBucket():用于删除一个已存在的存储桶(bucket),无返回值,删除失败会抛出异常;

报错: The difference between the request time and the server's time is too large.

请求时间与服务器时间之间的差异太大。

解决(同步一下 Linux 时间): 1、yum install ntpdate -y(这里的"-y"是指yum)

2、ntpdate pool.ntp.org

# 操作对象

  1. putObject():用于上传文件到指定的存储桶;
  2. statObject():用于检查指定的对象(文件)的状态;
  3. getPresignedObjectUrl():用于生成一个对象(文件)的签名 URL,以便可以通过 HTTP 访问;
  4. getObject():用于从指定的存储桶中下载文件;
  5. listObjects():用于列出指定存储桶中的所有对象(文件);
  6. removeObject():用于删除指定存储桶中的对象,需要指定【存储桶名称】和【对象键】;

上传到 MinIO 服务器上的文件是否可以通过 http://ip:9000/存储桶/文件名 (opens new window) 直接访问?

默认情况下是不能直接访问的;

http://192.168.11.128:9000/myfile/test.jpg (opens new window)

方式一:

  • 在 web 管理后台修改;(访问策略修改为 public)

方式二:

  • 通过客户端 API 修改;
// 访问策略配置 json 串,版本号需根据官方的来(web 管理后台有)
String policyJsonString = "{\"Version\" : \"2012-10-17\",\"Statement\":[{\"Sid\":\"PublicRead\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":[\"s3:GetObject\"],\"Resource\":[\"arn:aws:s3:::" + bucketName + "/*\"]}]}";

1
2
3

# Vue3 + SpringBoot3 + Minio 实践

# Vue

Vue 是一款 Web 前端 JavaScript 框架;

官网:https://vuejs.org/ (opens new window)

# 前端运行环境和工具

1、node.js 是一个开源跨平台的 JavaScript 运行时环境,可以理解成 java 中的 jdk;

官网:https://nodejs.org/ (opens new window)

2、npm 是 JavaScript 依赖包管理工具,可以进行前端项目的打包、依赖下载等,可以理解成 java 中的 maven;

官网:https://www.npmjs.com/ (opens new window)

3、Vite 是快速构建前端 Vue 项目的脚手架,可以理解为开发 Spring Boot 的 Spring Initializr 快速构建工具;

官网:https://cn.vitejs.dev/ (opens new window)

如表格所示:

前端 Vue 后端 Java
node.js jdk
npm maven
vite Spring Initializr

# 安装 Node.js

下载:https://nodejs.org (opens new window)

安装:解压即完成安装;(使用的是 zip 压缩包)

Nodejs环境变量配置

1、在 D:\software\node-v20.12.0-win-x64 下创建 2 个文件夹:

  • node_global (依赖库)

  • node_cache (缓存)

2、在 D:\software\node-v20.12.0-win-x64 目录下 cmd 进入命令行窗口,执行:

npm config set prefix "D:\software\node-v20.12.0-win-x64\node_global"

npm config set cache "D:\software\node-v20.12.0-win-x64\node_cache"
1
2
3

3、查看有没有设置成功:

npm config get prefix

npm config get cache
1
2
3

4、配置环境变量 Path,在 Path 变量中添加如下路径:

D:\software\node-v20.12.0-win-x64 

D:\software\node-v20.12.0-win-x64\node_global
1
2
3

在任意目录打开 windows 窗口查看是否配置成功:

node -v

npm -v 
1
2
3

注:Node.js 已经自带 npm,安装 Node.js 时即已安装了 npm,故不需要再安装 npm;

# Vue 工程运行流程分析

// 运行的入口
main.js   

从vue框架导入createApp函数功能;
import { createApp } from 'vue'

// 从一个单文件组件中导入根组件;
import App from './App.vue';

// 创建一个vue对象;
const app = createApp(App);

// 挂载到项目首页的 <div id="app"></div> 这个 id 下;
app.mount('#app')    
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 使用 element-plus

安装依赖

  • npm install element-plus --save
  • 其中 --save 表示将安装包信息写入 package.json 的 dependencies 中;
  • 在 dependencies 中,那么项目打包就会依赖到该模块;
  • 如果项目打包时不需要依赖该模块,则使用 --save-dev,它会将安装包信息写入 devDependencies 下,表示项目开发时需要依赖该模块,项目打包发布则不需要依赖该模块;

在 main.js 中导入

  • import ElementPlus from 'element-plus'
  • import 'element-plus/dist/index.css'
  • app.use(ElementPlus)

跨域处理

源头:http://localhost:5173 目的地:http://localhost:8080/api/users

  1. 协议不同
  2. 域名不同
  3. 端口不同

三个里面只要有任何一个不同就是跨域;

解决方法

  • 在每个 Controller 上加入 @CrossOrigin 注解解决跨域;
  • 编写配置文件统一处理;
  • 网关处统一处理。

# MinIO 集群部署

# 纠删码模式部署

  • 纠删码(Erasure Code)简称 EC,是一种数据保护方法,也是一种算法;
  • MinIO 对纠删码模式的算法进行了实现,采用 Reed-Solomon code(简称RScode)纠错码将对象拆分成 N/2 数据和 N/2 奇偶校验块,Reed Solomon 利用范德蒙矩阵(Vandermonde matrix)、柯西矩阵(Cauchy matrix)的特性来实现;
  • 即将数据拆分为多个数据块和多个校验块,分散存储在不同的磁盘上,即使在部分磁盘损坏或丢失的情况下,也可以通过剩余的数据块和校验块恢复出原始数据;
  • 举个例子,现在有 12 块磁盘,一个对象数据会被分成 6 个数据块、6 个奇偶校验块,你可以损坏或丢失任意 6 块磁盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的磁盘中恢复数据,牛不牛?
上次更新: 2025/5/30 17:49:49
云存储基础小结
MinIo vs OSS

← 云存储基础小结 MinIo vs OSS→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式