MinIO

5 min

:seat: MinIO

1. MinIO 的用途

  1. MinIO 是一个高性能的对象存储系统
  2. 存储大规模非结构化数据,如图片、视频、备份和日志等。
    • DiTing 项目中用来存储用户的非结构化数据

2. 如何使用 MinIO

:one: Windows 上使用 Docker 安装 MinIO

  1. 安装 Docker

    • 前往 Docker 官网 下载并安装 Docker Desktop for Windows。
    • 安装完成后,启动 Docker,并确保 Docker 正在运行。
  2. 运行 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,该用户有最高权限。
      • -e "MINIO_ROOT_PASSWORD=admin"
        • 设置 MinIO 的根用户密码 admin,用于身份验证。
      • -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
      • --console-address ":9001"
        • 设置 MinIO 控制台的访问地址和端口为 9001
      • --address ":9000"
        • 设置 MinIO API 服务的监听地址和端口为 9000
  3. 访问 MinIO 控制台

    • 打开浏览器,访问 http://localhost:9001
    • 使用在启动容器时设置的用户名和密码

:two:在项目中如何填写配置文件

minio:
  accessKey: admin // 就是web管理端登录用户名
  accessSecret: minioadmin // 就是web管理端登录密码
  endPoint: 127.0.0.1:9000
  useSSL: false

3. 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 可以用于客户端上传

参考资料