对象存储MinIO的安装和使用方法

如果使用默认的docker命令那么分享的连接就会使127.0.0.1,所以有必要修改一下docker命令

docker run -d \
  -p 9000:9000 -p 9001:9001 \
  -e "MINIO_SERVER_URL=http://公网IP:9001" \
  -e "MINIO_ROOT_USER=admin" \
  -e "MINIO_ROOT_PASSWORD=12345678" \
  -v /data:/data \
  minio/minio server /data \
  --console-address ":9001" --address ":9000"

关键参数 -e "MINIO_SERVER_URL=http://公网IP:9001" 指定分享链接的基地址

安装完成后进入MinIO,首先创建存储桶

创建成功后把私密改成公开

上传文件

分享链接就是公网的了,然后就可以正常下载了。

分享链接不是永久的,那么用客户端修改为永久

1、首先下载mc.exe,建立一个文件夹,把mc.exe放进去

下载地址:

来源:默认网盘

2、cmd进入到下载的mc.exe路径,增加service配置

mc config host add minio http://xxx.xxx.xxx.xxx:9000 用户名 密码 S3v4


3、继续设置权限,开放管理,配置下载策略,可以直接通过 url 进行下载。

mc policy set public minio/你的buket名称
mc policy set download minio/你的bucket名称

这个命令的作用是将 server 端的 mybucket 桶设置为开放管理,可以直接通过 url 进行下载。

[桶名]/[路径]可以一直拼接到具体的文件夹或文件

例如:http://xxx.xxx.xxx.xxx:9000/mybucket/xxx.zip,可用浏览器直接从此URL访问下载。

实现永久链接的Python代码

from minio import Minio
from minio.error import S3Error

# 配置参数
endpoint = 'your-minio-server.com:9000'  # 替换为你的MinIO服务地址
access_key = 'your-access-key'           # 管理员账号
secret_key = 'your-secret-key'           # 管理员密码
secure = False                           # 是否启用HTTPS(True/False)
bucket_name = 'public-bucket'            # 存储同的名称,需要设置为公开的存储桶名称

def set_permanent_download():
    try:
        # 1. 初始化MinIO客户端
        client = Minio(
            endpoint=endpoint,
            access_key=access_key,
            secret_key=secret_key,
            secure=secure
        )

        # 2. 检查存储桶是否存在,不存在则创建
        if not client.bucket_exists(bucket_name):
            client.make_bucket(bucket_name)
            print(f"存储桶 {bucket_name} 创建成功")
        else:
            print(f"存储桶 {bucket_name} 已存在")

        # 3. 设置存储桶策略为公共可读
        policy = f'''
        {{
            "Version":"2012-10-17",
            "Statement":[
                {{
                    "Effect":"Allow",
                    "Principal":{{"AWS":["*"]}},
                    "Action":["s3:GetObject"],
                    "Resource":["arn:aws:s3:::{bucket_name}/*"]
                }}
            ]
        }}
        '''
        client.set_bucket_policy(bucket_name, policy)
        print(f"存储桶 {bucket_name} 已设置为永久公开可下载")

    except S3Error as e:
        print(f"操作失败: {e}")

if __name__ == "__main__":
    set_permanent_download()

 

THE END
分享
二维码
< <上一篇
下一篇>>