用Minio给公司搭个文件服务器?
一、minio初介
- 是一款高性能、分布式的对象存储系统。如果有商业需求则需要申请授权。http://www.minio.org.cn/overview.shtml
之前有在内网中进行文件传输的想法,试过
filebrower
,FileRun
,Minio
,Nextcloud
- 它们都支持多用户管理
- filebrower对文件的管理效果更偏向window的文件管理器,可以复制、移动、删除、还能播放视频资源
- minio操作更类似现在各大互联网公司推出的oss或者说对象存储,提供了文件存储、访问以及强大的访问权限管理功能
- 其他两个已经没什么印象了,因为没在用(没错,家里用了filebrower,公司搭了minio)
恰巧公司有个闲置的台式机,加上年末时间还算充裕,嗯~,搞起!
二、内网环境
- 用
rufus
装Ubuntu Server 20.04
到U盘中,电脑U盘启动,安装系统 系统默认的cn源也慢,换阿里源
cp /etc/apt/sources.list /etc/apt/sources.list.bak_`date "+%y_%m_%d"` sed -i 's/http:\/\/.*.ubuntu.com/https:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list apt update apt upgrade
- 安装docker:https://docs.docker.com/engine/install/ubuntu/
- 添加docker的daemon.json镜像加速源,自行查找,也是复制粘贴的事
三、docker搭建minio服务端
docker run -d -p 9000:9000 --name minio -v /home/graham/docker/minio/data:/data -e "MINIO_ROOT_USER=nobug" -e "MINIO_ROOT_PASSWORD=5eR40IxkNkIVbH5P" --restart=unless-stopped minio/minio server /data
- 管理员账号:
MINIO_ROOT_USER
nobug - 管理员密码:
MINIO_ROOT_PASSWORD
5eR40IxkNkIVbH5P - 存储的文件路径:容器
/data
映射本机的/home/graham/docker/minio/data
目录
访问 http://内网ip:9000 使用设置的账号密码登录即可。如果是一个人用的话,做到这一步就可以结束了。
但是
在公司用还是稍微加一下下访问限制好一点点
四、minio中介
minio的服务端类似redis-server,想要进行具体的用户添加、权限设置等等,还得装个redis-cli,在minio中指的就是mc
客户端。
五、minio客户端-mc
http://docs.minio.org.cn/docs/master/minio-client-quickstart-guide
1.mc客户端安装
cd /usr/local/bin && sudo wget http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
sudo chmod +x mc
客官看到了这里,如果没有再继续看下去的动力,建议直接跳到第八章,进入实操,接下来都是干巴巴的文字说明 ---》跳
2.mc命令说明
就说几个用得到的,更多高级使用去官网看:
http://docs.minio.org.cn/docs/master/minio-client-quickstart-guide
http://docs.minio.org.cn/docs/master/minio-client-complete-guide
http://docs.minio.org.cn/docs/master/minio-admin-complete-guide
mc存储连接命令:
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> [--api API-SIGNATURE]
:当前使用的存储服务别名(必需,之后的命令都是对它的操作) :存储服务的访问地址(也就是本机的 http://内网ip:9000) :账号密码 - 这个命令是mc的初始命令,需要连接上已安装的minio服务端后才能继续后续操作,所以是必须滴。
- 连接测试命令:
mc admin info <ALIAS>
- 添加新用户:
mc admin user add <ALIAS> username password
给用户设置访问策略:
mc admin policy set <ALIAS> 策略别名 user=username
- 策略别名:
readonly
、readwrite
、writeonly
、自定义策略别名
- 策略别名:
- 禁用用户:
mc admin user disable <ALIAS> username
- 列出所有用户:
mc admin user list <ALIAS>
- 删除策略:
mc admin policy remove <ALIAS> 策略别名
- 将一个或多个用户添加到特定组中:
mc admin group add <ALIAS> 组名 username1 username2
- 启动组:
mc admin group enable <ALIAS> 组名
- 从组中删除用户:
mc admin group remove <ALIAS> 组名 username1 username2
- 删除组:
mc admin group remove <ALIAS> 组名
六、minio末介
- 看了上节的这堆命令,可能min na会一头雾水,这是个啥?(啊,除了用过对象存储产品的童鞋外,比如本银)
- 遮就是minio的用户权限管理命令,对哒是命令,没有可视化的操作
说一说命令中提到的几个关键词,粗浅地解释一下,如果有错的地方也欢迎指正:(哼,怎么可能有错,即使错了也是官方文档的错[歪嘴])
- 官方客户端命令一共有三十个命令,有兴趣去上面提到的官网看看,有需要再实操,如果就限制权限的需求,看本文就好了,这东西看多了不用等于白看。
config
:就拿来配置了与minio服务端的连接,其他用途还没看到。admin
:包含了十四个子命令可以使用- 可以用
user
子命令对用户进行增删; - 用
group
子命令对用户组进行管理; - 用
policy
子命令对访问权限进行管理; - 最基本和常用的就这三个了,下面的实操主要也是这三个命令的使用,更多请看详情官网。
- 可以用
这里主要说一说minio的权限策略,跟博主使用过的阿里云权限控制很像,基本可以说是一个模子印出来的,在它官网还有接入的sdk,那这完全可以申请商业用途弄个阿里云的oss出来。
可能这也是选择minio的原因,后续的操作性很强,虽然现在还没必要,硬盘也贵。
七、minio的访问策略
默认提供有diagnostics
、readonly
、readwrite
、writeonly
这四种访问策略给你(使用mc admin policy list <ALIAS>
命令看得到),这肯定是不够精准的。
1.编写策略文件
设置用户只能上传、下载、罗列这个叫public的bucket(把bucket理解成目录就行,一个叫public的目录)
# 得在config连接服务端之后再执行下面这些命令
cd ~/.mc
vim publicbucket.json
// publicbucket.json
{
"Version": "2021-01-16",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::public/*"
]
}
]
}
2.生成新的访问策略
命令格式:mc admin policy add <ALIAS> 新的策略名称 策略文件
3.访问策略
Effect(效果)
- Allow
- Deny
Action(操作)
- s3:GetObject
- s3:ListBucket
- s3:PutObject
- s3:GetBucketLocation
- s3:DeleteObject
- s3:AbortMultipartUpload
- s3:ListBucketMultipartUploads
- s3:ListMultipartUploadParts
Resource(资源)
- arn:aws:s3:::bucketName//
八、Minio客户端实操!!!!!!!
1.连接服务端
mc config host add lemon http://内网ip:9000 nobug 5eR40IxkNkIVbH5P
mc: Configuration written to `/home/graham/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/home/graham/.mc/share`.
mc: Initialized share uploads `/home/graham/.mc/share/uploads.json` file.
mc: Initialized share downloads `/home/graham/.mc/share/downloads.json` file.
Added `lemon` successfully.
从此这个存储服务的服务端被称之为lemon
2.测试连接
mc admin info lemon
● 内网ip:9000
Uptime: 48 minutes
Version: 2021-01-16T02:19:44Z
Network: 1/1 OK
1.5 MiB Used, 7 Buckets, 1 Object
3.添加公共访问用户-public
mc admin user add lemon public fKlAtdMPtmLkg7X2
4.添加一个名为public的bucket
mc mb lemon/public
5.创建一个公共访问策略
5.1写策略文件:
cd ~/.mc vim publicbucket.json
{ "Version": "2021-01-16", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::public/*" ] } ] }
- 5.2生成策略:
mc admin policy add lemon public_policy ~/.mc/publicbucket.json
此时使用mc admin policy list lemon
就会看到我们新增的public_policy
6.给public用户添加创建的公共访问策略
mc admin policy set lemon public_policy user=public
min na可以尝试新建个访问组,通过把用户添加到组的形式来限制访问。
ok,用public
fKlAtdMPtmLkg7X2
登录http://内网ip:9000
就只能看到public这一个bucket,在其中只能点击展开文件,上传文件和下载文件,删除和修改相关的操作就都无效了。
完(不方便截图)
ref: