MinIO笔记
MinIO (网站 https://min.io/) 是开源的对象存储项目, 用Go实现, 支持Linux环境, 客户端支Java,Python,Javacript, Go等语言. 在分布式项目中, 可以代替本地磁盘存储和NFS等旧的存储共享方式, 方便程序以s3接口形式访问文件. 在项目使用 MinIO 代替直接文件操作, 便于扩展, 便于在本地和云服务的对象存储接口之间切换.
安装
Docker 安装
从 quay.io 或 docker hub 拉取镜像
# quay.io
docker pull quay.io/minio/minio
# DockerHub
docker pull docker://minio/minio
创建配置文件 /etc/docker/minio/config.env
- 这个文件将被映射到 minio 容器
MINIO_VOLUMES是 minio 容器启动后使用的存储位置, 与后面创建容器时的映射要一致
# MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.
# This user has unrestricted permissions to perform S3 and administrative API operations on any reso
urce in the deployment.
# Omit to use the default values 'minioadmin:minioadmin'.
# MinIO recommends setting non-default values as a best practice, regardless of environment
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minio123
# MINIO_VOLUMES sets the storage volume or path to use for the MinIO server.
MINIO_VOLUMES="/mnt/data"
# MINIO_OPTS sets any additional commandline options to pass to the MinIO server.
# For example, `--console-address :9001` sets the MinIO Console listen port
MINIO_OPTS="--console-address :9001"
设置好硬盘挂载, 如果是测试环境, 可以创建一个目录, 例如当前使用 /var/minio, 然后启动容器
- 如果不是从 quay 拉取的镜像, 需要更换一下镜像路径
- 用
-v /var/minio:/mnt/data映射minio的存储目录, 要与配置文件中的定义一致 - 用
-e "MINIO_CONFIG_ENV_FILE=/etc/config.env"指定配置文件路径, 要与上面的映射一致
docker run -dt --name minio \
-p 9000:9000 -p 9001:9001 \
-v /var/minio:/mnt/data \
-v /etc/docker/minio/config.env:/etc/config.env \
-e "MINIO_CONFIG_ENV_FILE=/etc/config.env" \
quay.io/minio/minio \
server --console-address ":9001"
启动后就可以用浏览器访问 9000 端口查看 MinIO 控制台
配置
MinIO的名词定义
- Policy
- Policy 是权限管理的基础设置, JSON格式
- User
- 用户用于登录控制台(Console)
- 用户的权限通过两种方式设置, 一种是直接设置 Policies, 例如 readwrite 就对所有bucket都有读写权限; 另一种是用户组, 可以继承所在用户组的 Policies
- Group
- 组权限通过 Policies 设置
- Access Key
- access_key 由用户自己创建
- 每个用户可以有多个 access key, 每个 access_key 与 secret_key 组成一对, 用于接口访问时验证身份
- Bucket
- Bucket 是一个文件桶, 类似于目录的概念. 可以设置容量限制, 是否保持文件版本, 是否锁定文件(防止被删除)
- 通过 Anonymous Access Rule 控制匿名访问的权限, 设置时需要设置一个路径前缀(不能使用通配符*).
- 如果可匿名读取, 那么访问文件的路径就是 http://[host]:9000/[bucket]/[file path]
Policy设置
设置含义
- Version 指定要使用的策略语言版本. 建议使用最新的 2012-10-17 版本
- Statement 将该主要策略元素作为以下元素的容器, 可以在一个策略中包含多个语句
- Sid (optional) 包括可选的语句 ID 以区分不同的语句
- Effect Allow 或 Deny 标识策略是允许还是拒绝访问
- Principal 仅在某些情况下需要, 如果创建基于资源的策略, 必须指示要允许或拒绝访问的账户, 用户, 角色或联合身份用户. 如果要创建 IAM 权限策略以附加到用户或角色, 则不能包含该元素, 此时潜在的主体为该用户或角色.
- Action 包括策略允许或拒绝的操作列表
- Resource 如果创建 IAM 权限策略, 必须指定操作适用的资源列表. 如果创建基于资源的策略, 则该元素是可选的. 如果不包含该元素, 则该操作适用的资源是策略附加到的资源.
- Condition (optional) 指定策略在哪些情况下授予权限
通过指定Principal(谁)针对Resource(资源对象)在什么Condition(条件)下Effect(允许还是拒绝)做什么Action(事情), 定义一条policy(策略)
全局只读
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
全局只写
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
全局读写
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
桶操作
针对bucket2025这个桶做的 policy, 将这个policy关联到一个minio用户后, 这个用户就可以对 bucket2025 做全部操作
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucket2025",
"arn:aws:s3:::bucket2025/*"
]
}
]
}
如果要限制用户对桶的操作, 仅允许读写内部文件, 可以约束为下面的action列表
"Action": [
"s3:DeleteObject",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:PutObject"
],
Java 访问
增加MinIO SDK依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.17</version>
</dependency>
创建 MinioClient 实例, 这个可以复用, 但是程序退出时需要close 否则会阻塞退出, 实际使用时最好放到 try 里面
MinioClient minioClient =
MinioClient.builder()
.endpoint("http://192.168.1.2:9000")
.credentials("A1DbqKtKkeukiznEM123", "B3IZXZXYD7RbVJuFP8KEAc5U2q0kHZ7yaQx11122")
.build();
上传文件的代码
try (MinioClient minioClient =
MinioClient.builder()
.endpoint("http://192.168.1.2:9000")
.credentials("A1DbqKtKkeukiznEM123", "B3IZXZXYD7RbVJuFP8KEAc5U2q0kHZ7yaQx11122")
.build()) {
// Ensure bucket exists
boolean found =
minioClient.bucketExists(BucketExistsArgs.builder().bucket("202502").build());
if (!found) {
log.info("Bucket '202502' doesn't exist");
return;
//minioClient.makeBucket(MakeBucketArgs.builder().bucket("202502").build());
} else {
log.info("Bucket '202502' already exists.");
}
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket("202502")
.object("111.png")
.filename("D:/Documents/111.png")
.build());
System.out.println("successfully uploaded");
} catch (Exception e) {
log.error(e.getMessage(), e);
}
MinIO笔记的更多相关文章
- Linux 系统常用管理命令(精简笔记)
Linux是一套免费使用和自由传播的类Unix操作系统,下面的笔记是我从鸟菜中摘抄出来的重要命令,并进行了一定的排版,摒弃了一些用不到的乱七八糟的命令,目的是在生产环境中能够快速的定位并查询需要命令的 ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- NET Core-学习笔记(三)
这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...
- springMVC学习笔记--知识点总结1
以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
随机推荐
- Educational Codeforces Round 105 (Rated for Div
Educational Codeforces Round 105 (Rated for Div. 2) ABC String 给定一个字符串只有A.B和C构成.要求替换A.B.C为')'和'(',并且 ...
- PythonDay5Advance
PythonDay5Advance 函数和模块 main函数要有,用户自己选择要做的功能,根据选择调用不同的函数 用户注册的信息需要使用一个文件存储,登录需要判断用户是否存在,密码是否正确 注册的时候 ...
- 编译器-FIRST集合(补充:左递归)
上一篇中实现的First函数没有考虑左递归,在这对此说明和实现 1.立即左递归 A -> Ab|a 1.两步或两步以上产生的左递归 A -> Bc|a B -> Ab|d 前面的实现 ...
- LeetCode题集-5 - 最长回文子串之马拉车(二)
书接上回,我们今天继续来聊聊最长回文子串的马拉车解法. 题目:给你一个字符串 s,找到 s 中最长的回文子串. 01.中心扩展法优化-合并奇偶处理 俗话说没有最好只有更好,看着O(n^2)的时间复杂度 ...
- 入门 .NET Aspire: 使用 .NET 简化云原生应用开发
入门 .NET Aspire: 使用 .NET 简化云原生应用开发 https://devblogs.microsoft.com/dotnet/introducing-dotnet-aspire-si ...
- ASP.NET Core 中的 Request Feature
ASP.NET Core 中的 Request Feature https://docs.microsoft.com/en-us/aspnet/core/fundamentals/request-fe ...
- 迁移现有用户数据到ABP vNext
前言 使用 ABP vNext(下文简称 ABP)时,通常都是从 cli 开始新建模板,从一个空项目开始.对已经存续的项目来说,现有的数据,特别是用户等核心数据需要进行迁移. 老的项目,随着规模越来越 ...
- 在不同操作系统上安装 PostgreSQL
title: 在不同操作系统上安装 PostgreSQL date: 2024/12/26 updated: 2024/12/26 author: cmdragon excerpt: PostgreS ...
- Qt编写地图综合应用44-悬浮工具条
一.前言 百度地图内置了悬浮工具条,可以自行开启,包括离线地图也可以开启,用到了DrawingManager这个库,鼠标绘制工具条库,提供鼠标绘制点.线.面.多边形(矩形.圆)的编辑工具条的开源代码库 ...
- Qt编写的项目作品14-智能安防集中管理平台
一.功能特点 同时集成了楼宇对讲.住户报警.门禁控制.公共报警.视频监控等模块. 系统管理部分包括系统配置.对讲配置.住户配置.公共配置.监控配置.地图管理.视频联动.用户管理.区域管理. 图形化的实 ...