IT评测·应用市场-qidao123.com

标题: MinIO条记 [打印本页]

作者: 温锦文欧普厨电及净水器总代理    时间: 2025-2-13 14:04
标题: MinIO条记
MinIO (网站 https://min.io/) 是开源的对象存储项目, 用Go实现, 支持Linux环境, 客户端支Java,Python,Javacript, Go等语言. 在分布式项目中, 可以代替本地磁盘存储和NFS等旧的存储共享方式, 方便步调以s3接口形式访问文件. 在项目使用 MinIO 代替直接文件操作, 便于扩展, 便于在本地和云服务的对象存储接口之间切换.
安装

Docker 安装

参考 https://min.io/docs/minio/container/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html
从 quay.io 或 docker hub 拉取镜像
  1. # quay.io
  2. docker pull quay.io/minio/minio
  3. # DockerHub
  4. docker pull docker://minio/minio
复制代码
创建设置文件 /etc/docker/minio/config.env
  1. # MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.
  2. # This user has unrestricted permissions to perform S3 and administrative API operations on any reso
  3. urce in the deployment.
  4. # Omit to use the default values 'minioadmin:minioadmin'.
  5. # MinIO recommends setting non-default values as a best practice, regardless of environment
  6. MINIO_ROOT_USER=minioadmin
  7. MINIO_ROOT_PASSWORD=minio123
  8. # MINIO_VOLUMES sets the storage volume or path to use for the MinIO server.
  9. MINIO_VOLUMES="/mnt/data"
  10. # MINIO_OPTS sets any additional commandline options to pass to the MinIO server.
  11. # For example, `--console-address :9001` sets the MinIO Console listen port
  12. MINIO_OPTS="--console-address :9001"
复制代码
设置好硬盘挂载, 如果是测试环境, 可以创建一个目次, 例如当前使用 /var/minio, 然后启动容器
  1. docker run -dt --name minio \
  2.   -p 9000:9000 -p 9001:9001 \
  3.   -v /var/minio:/mnt/data \
  4.   -v /etc/docker/minio/config.env:/etc/config.env \
  5.   -e "MINIO_CONFIG_ENV_FILE=/etc/config.env" \
  6.   quay.io/minio/minio \
  7.   server --console-address ":9001"
复制代码
启动后就可以用浏览器访问 9000 端口查看 MinIO 控制台
设置

MinIO的名词定义
Policy设置

设置含义

通过指定Principal(谁)针对Resource(资源对象)在什么Condition(条件)下Effect(允许还是拒绝)做什么Action(事情), 定义一条policy(计谋)
全局只读
  1. {
  2.     "Version": "2012-10-17",
  3.     "Statement": [
  4.         {
  5.             "Effect": "Allow",
  6.             "Action": [
  7.                 "s3:GetObject",
  8.                 "s3:GetBucketLocation"
  9.             ],
  10.             "Resource": [
  11.                 "arn:aws:s3:::*"
  12.             ]
  13.         }
  14.     ]
  15. }
复制代码
全局只写
  1. {
  2.     "Version": "2012-10-17",
  3.     "Statement": [
  4.         {
  5.             "Effect": "Allow",
  6.             "Action": [
  7.                 "s3:PutObject"
  8.             ],
  9.             "Resource": [
  10.                 "arn:aws:s3:::*"
  11.             ]
  12.         }
  13.     ]
  14. }
复制代码
全局读写
  1. {
  2.     "Version": "2012-10-17",
  3.     "Statement": [
  4.         {
  5.             "Effect": "Allow",
  6.             "Action": [
  7.                 "s3:*"
  8.             ],
  9.             "Resource": [
  10.                 "arn:aws:s3:::*"
  11.             ]
  12.         }
  13.     ]
  14. }
复制代码
桶操作

针对bucket2025这个桶做的 policy, 将这个policy关联到一个minio用户后, 这个用户就可以对 bucket2025 做全部操作
  1. {
  2.     "Version": "2012-10-17",
  3.     "Statement": [
  4.         {
  5.             "Effect": "Allow",
  6.             "Action": [
  7.                 "s3:*"
  8.             ],
  9.             "Resource": [
  10.                 "arn:aws:s3:::bucket2025",
  11.                 "arn:aws:s3:::bucket2025/*"
  12.             ]
  13.         }
  14.     ]
  15. }
复制代码
如果要限制用户对桶的操作, 仅允许读写内部文件, 可以束缚为下面的action列表
  1.             "Action": [
  2.                 "s3:DeleteObject",
  3.                 "s3:GetBucketLocation",
  4.                 "s3:GetObject",
  5.                 "s3:ListAllMyBuckets",
  6.                 "s3:ListBucket",
  7.                 "s3:PutObject"
  8.             ],
复制代码
Java 调用

增长MinIO SDK依赖
  1. <dependency>
  2.     <groupId>io.minio</groupId>
  3.     <artifactId>minio</artifactId>
  4.     <version>8.5.17</version>
  5. </dependency>
复制代码
创建 MinioClient 实例, 这个可以复用, 但是步调退出时需要close 否则会阻塞退出, 实际使用时最好放到 try 里面
  1. MinioClient minioClient =
  2.              MinioClient.builder()
  3.                      .endpoint("http://192.168.1.2:9000")
  4.                      .credentials("A1DbqKtKkeukiznEM123", "B3IZXZXYD7RbVJuFP8KEAc5U2q0kHZ7yaQx11122")
  5.                      .build();
复制代码
上传文件

使用 uploadObject 方法
  1. // Ensure bucket exists
  2. boolean found =
  3.         minioClient.bucketExists(BucketExistsArgs.builder().bucket("202502").build());
  4. if (!found) {
  5.     log.info("Bucket '202502' doesn't exist");
  6.     return;
  7.     //minioClient.makeBucket(MakeBucketArgs.builder().bucket("202502").build());
  8. } else {
  9.     log.info("Bucket '202502' already exists.");
  10. }
  11. minioClient.uploadObject(
  12.         UploadObjectArgs.builder()
  13.                 .bucket("202502")
  14.                 .object("111.png")
  15.                 .filename("D:/Documents/111.png")
  16.                 .build());
复制代码
使用 putObject, stream 方式上传大文件, 实测上传 2.3GB 文件没标题
  1. File file = new File("big.tar.gz");
  2. try (MinioClient minioClient =
  3.              MinioClient.builder()
  4.                      .endpoint("http://192.168.2.2:9000")
  5.                      .credentials("A1DbqKtKkeukiznEM123", "B3IZXZXYD7RbVJuFP8KEAc5U2q0kHZ7yaQx11122")
  6.                      .build();
  7.     InputStream is = new FileInputStream(file);
  8. ) {
  9.     minioClient.putObject(
  10.             PutObjectArgs.builder()
  11.                     .bucket("202502")
  12.                     .object("big.tar.gz")
  13.                     .stream(is, file.length(), 1024*1024*10)
  14.                     .build());
  15.     log.info("successfully uploaded");
  16. } catch (Exception e) {
  17.     log.error(e.getMessage(), e);
  18. }
复制代码
下载文件

下载 MinIO 上的文件到本地, 实测 2.3GB 文件没标题, 下载速度大致是上传速度的两倍
  1. minioClient.downloadObject(
  2.         DownloadObjectArgs.builder()
  3.                 .bucket("202502")
  4.                 .object("big.tar.gz")
  5.                 .filename("D:/Documents/big.tar.gz")
  6.                 .build());
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4