MinIO 是高性能分布式对象存储服务器,兼容 Amazon S3 API,可用于存储图片、视频、备份文件等大对象数据。支持单机、分布式部署,并提供丰富的 SDK 支持 Python 和 Java 开发。
本教程涵盖:
MinIO 简介
安装与部署
单机
Docker
分布式
基础配置
MinIO Client (
mc) 使用桶(Bucket)管理
文件操作
用户与权限管理
高级功能
Python 示例
Java 示例
常见问题与优化建议
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:API9001:Web 控制台/mnt/data:挂载存储路径
2.3 分布式部署
假设有 4 个节点 /mnt/data1 ~ /mnt/data4:
./minio server http://node{1...4}/mnt/dataDocker 示例:
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 配置:
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/mybucket5. 桶(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/ --recursive7. 用户与权限管理
添加用户:
mc admin user add myminio user1 userpassword分配策略:
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.txt9. 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 开发示例
默认评论
Halo系统提供的评论