前言

作为一个程序员,拥有自己的个人对象储存是非常合理的,目前市面上的服务提供商对个人用户非常不友好,除去收费以外,基本都需要域名备案.

因此使用 minio 搭建一个个人对象存储。使用 minio 的主要原因如下:

  • minio 分为社区版和企业版,社区版开源免费试用,因此无需担心后续无人维护的问题
  • api 完全兼容 Amazon S3 cloud storage
  • 高性能,可单机部署也可集群部署

搭建

使用 docker 构建应用,方便快捷。这里没有使用官方的 docker 镜像,用的 bitnami 的镜像镜像地址,此镜像做了一些修改,支持非 root 用户启动。

  • 其中/hostPath为数据持久化路径
  • 1000 为用户 uid。
  • MINIO_ROOT_USER 后台访问用户名
  • MINIO_ROOT_PASSWORD 后台访问密码

docker 命令行方式

docker run -itd --user 1000 --name minio -p 9000:9000 -p 9001:9001 -e MINIO_ROOT_USER="username" -e MINIO_ROOT_PASSWORD="password" -v /hostPath:/data  bitnami/minio:latest

docker-compose

services:
  minio:
    image:  bitnami/minio:latest
    environment:
      MINIO_ROOT_USER: "fanxb"
      MINIO_ROOT_PASSWORD: "yts2qrtmz4"
    user: "1000"
    container_name: minio
    volumes:
      - /hostPath:/data
    ports:
      - 9000:9000
      - 9001:9001

部署完毕后通过 9001 端口进行访问。9000 端口是 api 用的,9001 是管理界面访问端口。

使用

容器启动成功后会在/hostPath 下创建两个文件,分别为管理员用户名和密码。

下面说一些重点操作

创建指定 bucket 的访问密钥

进入 identity->Service Accounts 页面

点击create service account

开启Restrict beyond user policy

输入如下内容,将 bucketName 替换为你要控制的存储桶名:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["admin:*"]
    },
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": ["arn:aws:s3:::bucketName/*"]
    }
  ]
}