MinIO
:seat: MinIO
1. MinIO 的用途
- MinIO 是一个高性能的对象存储系统
- 存储大规模非结构化数据,如图片、视频、备份和日志等。
- DiTing 项目中用来存储用户的非结构化数据
2. 如何使用 MinIO
:one: Windows 上使用 Docker 安装 MinIO
安装 Docker:
- 前往 Docker 官网 下载并安装 Docker Desktop for Windows。
- 安装完成后,启动 Docker,并确保 Docker 正在运行。
运行 MinIO Docker 容器:
打开命令提示符(cmd)或 PowerShell。
拉取 MinIO Docker 镜像:
docker pull minio/minio创建并运行 MinIO 容器:
docker run -d ` >> -p 9000:9000 ` >> -p 9001:9001 ` >> --name minio ` >> --restart=always ` >> -e "MINIO_BROWSER_REDIRECT_URL=http://127.0.0.1:9000" ` >> -e "MINIO_ROOT_USER=minioadmin" ` >> -e "MINIO_ROOT_PASSWORD=admin" ` >> -v C:\DockerData\minio\data:/data ` >> -v C:\DockerData\minio\config:/root/.minio ` >> minio/minio ` >> server /data ` >> --console-address ":9001" --address ":9000"在上述命令中:
docker run -d- 启动 Docker 容器并在后台运行(分离模式)。
-p 9000:9000- 将主机的 9000 端口映射到容器的 9000 端口,通常用于 MinIO 的 API 访问。
-p 9001:9001- 将主机的 9001 端口映射到容器的 9001 端口,通常用于访问 MinIO 控制台。
--name minio- 为容器指定一个名称 “minio”,便于管理和引用。
--restart=always- 配置容器始终重新启动,无论是在容器崩溃还是 Docker 服务重启的情况下。
-e "MINIO_BROWSER_REDIRECT_URL=http://127.0.0.1:9000"- 设置 MinIO 控制台的重定向 URL,用户访问 MinIO 控制台时会被重定向到该地址。
-e "MINIO_ROOT_USER=minioadmin"- 设置 MinIO 的根用户名称
minioadmin,该用户有最高权限。
- 设置 MinIO 的根用户名称
-e "MINIO_ROOT_PASSWORD=admin"- 设置 MinIO 的根用户密码
admin,用于身份验证。
- 设置 MinIO 的根用户密码
-v C:\DockerData\minio\data:/data- 将主机路径
C:\DockerData\minio\data挂载到容器内的/data目录,存储 MinIO 的对象数据。
- 将主机路径
-v C:\DockerData\minio\config:/root/.minio- 将主机路径
C:\DockerData\minio\config挂载到容器内的/root/.minio目录,用于存储 MinIO 的配置文件。
- 将主机路径
minio/minio- 使用 MinIO 官方 Docker 镜像。
server /data- 启动 MinIO 服务器并指定数据目录为
/data。
- 启动 MinIO 服务器并指定数据目录为
--console-address ":9001"- 设置 MinIO 控制台的访问地址和端口为
9001。
- 设置 MinIO 控制台的访问地址和端口为
--address ":9000"- 设置 MinIO API 服务的监听地址和端口为
9000。
- 设置 MinIO API 服务的监听地址和端口为
访问 MinIO 控制台:
- 打开浏览器,访问
http://localhost:9001。 - 使用在启动容器时设置的用户名和密码
- 打开浏览器,访问
:two:在项目中如何填写配置文件
minio:
accessKey: admin // 就是web管理端登录用户名
accessSecret: minioadmin // 就是web管理端登录密码
endPoint: 127.0.0.1:9000
useSSL: false3. SDK
Go 应用中使用 MinIO SDK 来创建安全且高效的文件上传机制,允许客户端直接与 MinIO 存储服务器交互。
:one: 生成一个预签名的上传 URL:
minio.NewPostPolicy():功能描述: 创建一个新的 POST 签名策略对象。
用途: PostPolicy 是 MinIO 客户端库中的一个功能,它允许你创建预签名的 POST 策略。这个策略可以用来在客户端直接上传文件到 MinIO 服务器,而无需通过你的应用服务器。
代码示例
policy := minio.NewPostPolicy()
policy.SetBucket(bucketName string):功能描述: 设置目标存储桶的名称。
用途: 指定文件上传的目标存储桶。所有使用此策略上传的文件都会被存储在这个桶中。
代码示例
policy.SetBucket("my-bucket")
policy.SetKey(key string):功能描述: 设置上传的目标文件路径(键)。
用途: 定义上传文件的路径或文件名。这个键可以包含文件夹路径,并且可以使用占位符,例如
${filename},来指定客户端上传时的文件名。代码示例
policy.SetKey("uploads/${filename}")
policy.SetExpires(expiration time.Time):功能描述: 设置策略的过期时间。
用途: 确定策略的有效期。在过期时间之后,使用该策略生成的预签名 URL 将失效,不能再用于上传文件。通常设置为一个未来的时间点。
代码示例
policy.SetExpires(time.Now().UTC().AddDate(0, 0, 1))
global.MinioClient.PresignedPostPolicy(ctx context.Context, policy *minio.PostPolicy):功能描述: 生成预签名的 URL 和表单数据。
用途: 使用定义的 POST 策略生成预签名的 URL 和表单数据,这些数据包括上传到 MinIO 服务器所需的所有信息。客户端可以使用这些数据直接上传文件到 MinIO,而无需通过应用服务器。
代码示例
url, formData, err := global.MinioClient.PresignedPostPolicy(ctx, policy) if err != nil { // 处理错误 } // 现在 url 和 formData 可以用于客户端上传
参考资料
- MinIO 官方文档:https://docs.min.io/
- MinIO GitHub 仓库:https://github.com/minio/minio
- MinIO Docker Hub 页面:https://hub.docker.com/r/minio/minio