work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

minio使用

Posted on 2026-04-25 13:42  work hard work smart  阅读(1)  评论(0)    收藏  举报

1、docker desktop 安装

docker run -d --name minio -p 9000:9000 -p 9001:9001 -e "MINIO_ROOT_USER=minioadmin" -e "MINIO_ROOT_PASSWORD=minioadmin" -v %cd%/volumes/minio/data:/data quay.io/minio/minio server /data --console-address ":9001"

运行后:

  • API 端口:http://localhost:9000

  • 控制台端口:http://localhost:9001

  • 用户名/密码:minioadmin / minioadmin

执行前请确保当前目录下存在 volumes/minio/data 文件夹

 

2、创建custom桶

# 导入Python内置模块
import os
import json
# 导入MinIO官方Python SDK核心类
from minio import Minio
# 项目内部配置与日志
from app.conf.minio_config import minio_config
from app.core.logger import logger

# 全局MinIO客户端对象,初始化后供全项目调用
minio_client = None

try:
    # 初始化MinIO客户端实例
    minio_client = Minio(
        endpoint=minio_config.endpoint,
        access_key=minio_config.access_key,
        secret_key=minio_config.secret_key,
        secure=False  # 内网/本地部署用HTTP,公网部署需改为True并配置SSL
    )
    bucket_name = minio_config.bucket_name

    # 检查存储桶是否存在,不存在则自动创建
    if not minio_client.bucket_exists(bucket_name):
        logger.info(f"MinIO存储桶[{bucket_name}]不存在,开始创建")
        minio_client.make_bucket(bucket_name)
        logger.info(f"MinIO存储桶[{bucket_name}]创建成功")
    else:
        logger.info(f"MinIO存储桶[{bucket_name}]已存在,无需重复创建")

    # 配置存储桶公网只读策略:允许匿名用户通过URL直接访问桶内文件
    bucket_policy = {
        "Version": "2012-10-17",
        "Statement": [{
            "Effect": "Allow",
            "Principal": {"AWS": ["*"]},  # *表示所有匿名用户(S3兼容标识)
            "Action": ["s3:GetObject"],   # 仅授权文件获取/访问操作
            "Resource": [f"arn:aws:s3:::{bucket_name}/*"]
        }]
    }
    minio_client.set_bucket_policy(bucket_name, json.dumps(bucket_policy))
    logger.info(f"MinIO存储桶[{bucket_name}]已配置公网只读策略,支持匿名URL访问")

except Exception as e:
    # 捕获初始化异常,记录错误日志并置空客户端
    logger.error(f"MinIO客户端初始化失败,错误信息:{str(e)}", exc_info=True)
    minio_client = None


def get_minio_client():
    """
    获取全局初始化的MinIO客户端实例
    :return: 已初始化的Minio对象 / None(初始化失败时)
    """
    return minio_client