Minio是GlusterFS创始人之一Anand Babu Periasamy发布新的开源项目。Minio兼容Amason的S3分布式对象存储项目,采用Golang实现,客户端支持Java,Python,Javacript, Golang语言。
Minio可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux, OS X和FreeBSD上。配置简单,基本是复制可执行程序,单行命令可以运行起来。
对于一般的用户来说,快速低成本地架设文件服务器,MINIO无疑是最好的选择
安装部署Minio的部署非常简单,官方也推荐使用docker进行部署,这是最快速的方案,首先我们在docker-hub上搜索,打开https://hub.docker.com/,搜索minio/minio就可以找到镜像,使用docker pull minio/minio命令进行拉取
docker pull minio/minio特别说明
由于我们多数人都使用了云服务器,访问上会受安全组的影响,所以我们要弄清一个概念,minio分一共有两个端口,一个是api端口,一个是控制台端口。
1、api端口是9000,但是我们如果安装了PHP的话已经占用了这个端口,所以我们必须使用docker的端口映射,如果想更改默认端口,请使用–address :9001参数
--address :9001
2、控制台端口是随机的,为了方便管理,可以使用–console-address参数进行设定
3、系统如果不设定,默认的鉴权账号和密码会是默认的minioadmin,会有安全隐患
4、如果不进行本地持久化设定,docker容器一关闭文件就会丢失
综合以上情况,我们最后的启动命令为
docker run --restart=on-failure:5 -d -p 8899:9000 -p 9002:9002 --name minio1 -e "MINIO_ACCESS_KEY=你的KEY" -e "MINIO_SECRET_KEY=你的加密密钥" -v /mnt/data:/data -v /mnt/config:/root/.minio --privileged=true minio/minio server /data --console-address ":9002"
当然我们也可以直接运行编译好的可执行文件
wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --address :8899 --console-address ":9002"
我们甚至可以把它设定为一项系统服务来运行
首先设定配置文件
cat <> /etc/default/minio # Remote volumes to be used for MinIO server. # MINIO_VOLUMES=http://node{1...6}/export{1...32} MINIO_VOLUMES=/mnt/data # Use if you want to run MinIO on a custom port. MINIO_OPTS="--address :8899 --console-address :9002" # Root user for the server. MINIO_ROOT_USER=Root-User # Root secret for the server. MINIO_ROOT_PASSWORD=Root-Password EOT
vi /etc/systemd/system/minio.service
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/minio/minio
[Service]
WorkingDirectory=/minio
#User=minio-user
#Group=minio-user
ProtectProc=invisible
EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exit 1; fi"
ExecStart=/minio/minio server $MINIO_OPTS $MINIO_VOLUMES
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=1048576
# Specifies the maximum number of threads this process can create
TasksMax=infinity
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
# Built for ${project.name}-${project.version} (${project.name})
访问管理
登录http://172.17.0.2:8899就可以管理你的文件系统了,我们可以看到整个系统的使用情况统计,还可以查看磁盘占用情况
Buckets产概念你可以理解为一个专有的存储空间或是项目空间,你可以对Buckets进行相应的权限设置,如果你是想让所有文件能持久化访问,必须要设置为public,同时添加可读的规则
系统默认用户是可以访问所有桶的,如果想某用户只访问某个桶,需要设定特定权限
{
"Version": "2012-10-17", //这个日期就这样吧,虽然比较老
"Statement": [
{
"Effect": "Allow",
"Action": [ // 权限列表
"s3:ListAllMyBuckets", // 查看所有的桶权限
"s3:ListBucket", // 查看桶内对象权限
"s3:GetBucketLocation", // 定位bucket权限
"s3:GetObject", // 下载权限
"s3:PutObject", // 上传权限
"s3:DeleteObject" // 删除权限
],
"Resource": [
"arn:aws:s3:::onebucket/*" // arn:aws:s3不用动,后面用*表示所有桶,用 onebucket/*表示只针对这个桶
]
}
]
}
PHP如何使用minio
我们在官方是查不到PHP的SDK的,这倒不是问题,PHP有专门的SDK,叫aws-sdk-php,介绍如下:
https://docs.min.io/docs/how-to-use-aws-sdk-for-php-with-minio-server.html,可以查看这里有详细的安装说明https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/getting-started_installation.html
composer require aws/aws-sdk-php
基于THINKPHP的代码参考



