IWA
2025-11-14
点 赞
0
热 度
4
评 论
0

MinIO 部署与使用完整教程(含 Python/Java 示例)

MinIO 是高性能分布式对象存储服务器,兼容 Amazon S3 API,可用于存储图片、视频、备份文件等大对象数据。支持单机、分布式部署,并提供丰富的 SDK 支持 Python 和 Java 开发。

本教程涵盖:

  1. MinIO 简介

  2. 安装与部署

    • 单机

    • Docker

    • 分布式

  3. 基础配置

  4. MinIO Client (mc) 使用

  5. 桶(Bucket)管理

  6. 文件操作

  7. 用户与权限管理

  8. 高级功能

  9. Python 示例

  10. Java 示例

  11. 常见问题与优化建议


1. MinIO 简介

特点:

  • S3 兼容:可使用 AWS SDK 访问

  • 高性能:适合大数据存储

  • 轻量级:资源消耗低,二进制小

  • 分布式:可横向扩展

  • 支持策略和权限管理

官方网站:https://min.io


2. 安装与部署

2.1 单机部署(Linux/macOS)

# 下载 MinIO 二进制
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio

# 设置管理员账号密码
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=yourpassword

# 启动服务
./minio server /data

访问 Web 控制台:http://127.0.0.1:9000


2.2 Docker 部署

docker run -p 9000:9000 -p 9001:9001 \
  -e MINIO_ROOT_USER=admin \
  -e MINIO_ROOT_PASSWORD=yourpassword \
  -v /mnt/data:/data \
  minio/minio server /data --console-address ":9001"
  • 9000:API

  • 9001:Web 控制台

  • /mnt/data:挂载存储路径


2.3 分布式部署

假设有 4 个节点 /mnt/data1 ~ /mnt/data4

./minio server http://node{1...4}/mnt/data

Docker 示例:

docker run -p 9000:9000 -p 9001:9001 \
  -e MINIO_ROOT_USER=admin \
  -e MINIO_ROOT_PASSWORD=yourpassword \
  -v /mnt/data1:/data \
  minio/minio server http://node1/data http://node2/data http://node3/data http://node4/data

分布式模式可提高可靠性和可扩展性


3. 基础配置

通过环境变量或配置文件 /root/.minio/config.json 配置:

环境变量

说明

MINIO_ROOT_USER

管理员账号

MINIO_ROOT_PASSWORD

管理员密码

MINIO_REGION_NAME

存储区域名称

MINIO_BROWSER

是否启用 Web 控制台


4. MinIO Client (mc) 使用

安装 mc

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
mv mc /usr/local/bin/

配置 mc

mc alias set myminio http://127.0.0.1:9000 admin yourpassword

桶与文件操作

# 列出桶
mc ls myminio

# 创建桶
mc mb myminio/mybucket

# 上传文件
mc cp /local/path/file.txt myminio/mybucket/

# 下载文件
mc cp myminio/mybucket/file.txt /local/path/

# 删除桶
mc rb myminio/mybucket

5. 桶(Bucket)管理

  • 创建桶mc mb myminio/mybucket

  • 删除桶mc rb myminio/mybucket

  • 查看文件mc ls myminio/mybucket


6. 文件操作

  • 上传文件:

mc cp /local/path/file.txt myminio/mybucket/
  • 下载文件:

mc cp myminio/mybucket/file.txt /local/path/
  • 批量上传:

mc cp /local/path/*.jpg myminio/mybucket/ --recursive

7. 用户与权限管理

  1. 添加用户:

mc admin user add myminio user1 userpassword
  1. 分配策略:

mc admin policy set myminio readwrite user=user1

常用策略:

  • readwrite:可读写

  • readonly:只读

  • writeonly:只写


8. 高级功能

  • 分布式存储:多个节点提供高可用

  • 版本控制

mc version enable myminio/mybucket
mc ls --versions myminio/mybucket
  • 生命周期策略

mc ilm add myminio/mybucket --expiry-days 30
  • 服务器端加密

mc cp --encrypt-key "mybucket=mykey" file.txt myminio/mybucket/
  • 临时访问 URL

mc share download myminio/mybucket/file.txt

9. Python 示例

安装 SDK

pip install minio

初始化客户端

from minio import Minio

client = Minio(
    endpoint="127.0.0.1:9000",
    access_key="admin",
    secret_key="yourpassword",
    secure=False
)

桶管理

bucket_name = "mybucket"
if not client.bucket_exists(bucket_name):
    client.make_bucket(bucket_name)

文件操作

# 上传
client.fput_object(bucket_name, "file.txt", "/local/path/file.txt")

# 下载
client.fget_object(bucket_name, "file.txt", "/local/path/downloaded_file.txt")

# 列出
for obj in client.list_objects(bucket_name):
    print(obj.object_name)

高级功能

# 临时访问 URL
url = client.presigned_get_object(bucket_name, "file.txt", expires=3600)
print(url)

# 上传带元数据
client.fput_object(bucket_name, "file.txt", "/local/path/file.txt", metadata={"x-amz-meta-author":"Rock"})

10. Java 示例

添加依赖(Maven)

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

初始化客户端

import io.minio.MinioClient;

MinioClient minioClient = MinioClient.builder()
        .endpoint("http://127.0.0.1:9000")
        .credentials("admin", "yourpassword")
        .build();

桶管理

import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;

String bucketName = "mybucket";
boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if(!exists){
    minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}

文件操作

import io.minio.PutObjectArgs;
import io.minio.GetObjectArgs;
import io.minio.RemoveObjectArgs;

// 上传
minioClient.putObject(PutObjectArgs.builder()
        .bucket(bucketName)
        .object("file.txt")
        .filename("/local/path/file.txt")
        .build());

// 下载
minioClient.getObject(GetObjectArgs.builder()
        .bucket(bucketName)
        .object("file.txt")
        .filename("/local/path/downloaded_file.txt")
        .build());

// 删除
minioClient.removeObject(RemoveObjectArgs.builder()
        .bucket(bucketName)
        .object("file.txt")
        .build());

临时访问 URL

import io.minio.GetPresignedObjectUrlArgs;
import io.minio.http.Method;

String url = minioClient.getPresignedObjectUrl(
    GetPresignedObjectUrlArgs.builder()
        .method(Method.GET)
        .bucket(bucketName)
        .object("file.txt")
        .expiry(3600)
        .build()
);
System.out.println(url);

11. 常见问题与优化建议

  • 性能优化:使用 SSD 存储,分布式节点相同配置

  • 安全:生产环境使用 HTTPS,禁用默认账号

  • 日志mc admin info 查看状态,日志路径 ~/.minio/logs

  • 备份:使用 mc mirror 做桶间同步

mc mirror /local/path myminio/mybucket

总结

本教程完整覆盖:

  • MinIO 部署(单机、Docker、分布式)

  • 桶与文件管理

  • 用户权限策略

  • 高级功能(版本、生命周期、加密)

  • Python 与 Java 开发示例



用键盘敲击出的不只是字符,更是一段段生活的剪影、一个个心底的梦想。希望我的文字能像一束光,在您阅读的瞬间,照亮某个角落,带来一丝温暖与共鸣。

IWA

estp 企业家

具有版权性

请您在转载、复制时注明本文 作者、链接及内容来源信息。 若涉及转载第三方内容,还需一同注明。

具有时效性

文章目录

IWA的艺术编程,为您导航全站动态

31 文章数
9 分类数
10 评论数
31标签数
最近评论
IWA

IWA


👍

M丶Rock

M丶Rock


😂

M丶Rock

M丶Rock


感慨了

M丶Rock

M丶Rock


厉害了

M丶Rock

M丶Rock


6666666666666666666