简介
为公司简单搭建一个文件服务器,搜索了一下本地文件服务似乎都是fastDFS比较流行,但这玩意以难部署著称,在docker hub一搜镜像上次更新都六年前了,实在有点抵触。
相比之下Apache 下的MinIO是个不错的选择,官方似乎也在大力推广。
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。采用Golang实现,客户端支持Java,Python,Javacript, Golang语言。 Minio可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作 在Windows,Linux, OS X和FreeBSD上。
知乎:有了MinIO,你还会用FastDFS么?
MinIO搭建的docker镜像一直在更新,实际上即便不采用docker的安装方式也很方便,还很贴心地给了web界面。
MinIO官方文档很齐全且有中文,不过有一些文档链接报404,直接从目录中查找需要的内容即可
MinIO官方文档 : http://docs.minio.org.cn/docs/
安装
单机简单使用MinIO应该装两个服务,一个是server,一个是client,官方文档是分开说的,搞得一开始没弄清楚,这里放一起说了。
安装步骤官方文档都写得很详细,这里采用docker的方式安装:
server
- 拉取:
docker pull minio/minio
- 创建:
docker run -p 9000:9000 --name minio1 \
-v /mnt/data:/data \
-v /mnt/config:/root/.minio \
minio/minio server /data
/mnt/data
可以改成自己想挂载的目录。在具体使用的时候,会创建一个或者多个bucket(数据桶),桶之间相互隔离,可以按照不同业务创建不同的桶,自由分配给不同账号。
/mnt/data
(数据挂载目录)目录下本来是空的,每创建一个桶就会在这个目录下创建相应的同名目录,桶内上传的文件就在这个目录下。
安装成功界面:
此时可以通过http://ip:9000访问到web管理界面了(实际上只能操作文件,具体管理还需要使用MinIO Client)
- 输入默认的用户名和密码minioadmin登录
- 进入界面后点击右下角有两个选项:第一个选项是上传文件,点击提示未创建桶不可上传
点击第二个选项创建一个桶,名字随意
创建成功左侧出现桶列表:
Client
基本
-
拉取:
docker pull minio/mc
-
创建:
docker run -it --name=miniomc --entrypoint=/bin/sh minio/mc
-
因为是安装在docker容器内,在使用客户端的时候进入到该docker容器中执行操作
docker exec -it miniomc /bin/bash
-
基本mc指令
ls - 列出存储桶和对象 mb - 创建存储桶 cat - 合并对象 cp - 拷贝对象 rm - 删除对象 pipe - Pipe到一个对象 share - 共享 mirror - 存储桶镜像 find - 查找文件和对象 diff - 比较存储桶差异 policy - 给存储桶或前缀设置访问策略 config - 管理配置文件 watch - 事件监听 events - 管理存储桶事件 update - 管理软件更新 version - 显示版本信息
mc ls
可以列出所有桶目录,执行之后会显示一大堆目录,这是因为这个指令显示的是连接的所有服务器的所有桶、对象,要指定某服务器应该是mc ls [指定服务器名]
,刚刚创建的服务器还需要连接并设置名称 -
连接服务器端
先mc alias list
列出所有已连接的服务
可以看到默认已经有四个配置,但都和我们无关
添加服务器指令:
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> [--api API-SIGNATURE]
- <ALIAS> --服务别名,设定名称
- <YOUR-S3-ENDPOINT> --服务端url,格式为
http://ip:端口
,端口按刚刚服务端的设置是9000.服务端应该开放9000端口,因为这里必须是ip+端口 的格式,不接受nginx80转发,也不接受带有二级路径。 - <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> --账号密码,默认minioadmin
- [–api API-SIGNATURE] --最后一个参数api签名可选,不填留默认是–api s3v4
例:mc coconfig host add minio http://xxx.xxx.xxx.xxx:9000 minioadmin minioadmin
添加成功之后mc alias list
:
mc ls minio
显示刚刚创建的桶
创建新用户
创建新用户的命令很简单:mc admin user add minio newuser newuser123
,设定好最后两个参数用户名密码即可。但是创建的用户还没有任何权限对文件资源进行操作,得为用户配置权限策略。
MinIO使用策略policy去管理用户权限,先创建一个策略配置文件(或者使用已有的策略),然后为某个服务添加这个策略,再将某个用户设置使用这个策略(相当于授权)
- 先创建一个权限配置文件
自选一个存放配置文件的文件夹,新建一个xxx.json文件cat > test.json << EOF { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketLocation", "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::first/*" ], "Sid": "" } ] } EOF
1.配置文件内不可以有注释
2.Action里的内容规定对资源的操作动作,GetObject获取对象的权限、DeleteObject删除对象的权限等。
3.Resource里的内容规定分配某个资源,比如这里"arn:aws:s3:::first/"就是可以操作first这个桶(目录)下的所有资源,如果存在另一个桶“second”,那就可以"arn:aws:s3:::second/"来授权操作second
- 为某服务添加策略
mc admin policy add minio test test.json
后面三个参数分别是服务器名称、策略名称、策略配置文件 - 为某用户配置策略
mc admin policy set minio test user=newuser
后面三个参数分别是服务器名称、策略名称、user=要授权的用户名 - 完成上述配置之后就可以用newuser newuser123的账户登录web页面查看了,根据配置文件的
"Resource": [ "arn:aws:s3:::first/*" ],
该用户可只有权限操作first下的资源,无法创建其他桶,也无法查看或者操作其他桶。