MinIO作为文件服务器挺好用,还能进行权限控制,支持匿名下载挺很好用,简单好配置
部署
也支持docker部署,不过docker部署在进行二次设置(比如设置某个目录匿名下载)时会麻烦些,推荐采用二进制方式安装:
- minio 服务端程序
- mc 客户端程序,用于进行参数设置
安装服务端程序(minio)
参考官方:https://docs.min.io/docs/minio-quickstart-guide.html,下载安装
mkdir /home/minio_home
cd /home/minio_home
wget https://dl.min.io/server/minio/release/linux-ppc64le/minio
chmod +x minio
./minio server ./data
会提示:
Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'
为安全起见,最好不要采用默认密码,通过环境变量
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin1234
nuhup ./minio server ./data & #后台方式,通过nohup命令启动
启动后,可以通过默认的9000端口进行访问了
安装客户端(mc)
安装 https://docs.min.io/docs/minio-client-quickstart-guide.html
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc --help
根据help的提示“ Use 'mc --autocompletion' to enable shell autocompletion”
执行./mc --autocompletion
mc: Configuration written to `/root/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/root/.mc/share`.
mc: Initialized share uploads `/root/.mc/share/uploads.json` file.
mc: Initialized share downloads `/root/.mc/share/downloads.json` file.
mc: enabled autocompletion in '$SHELLRC'. Please restart your shell.
客户端使用
服务端和客户端跟部署目录没有关系,是通过消息通信的,首要要先增加自己的云存储服务作为别名
./mc config host add myminio http://10.1.192.120:9000 minioadmin minioadmin1234
可以执行ls查看有多少个bucket
./mc ls myminio # myminio为上一步加的服务别名
设置匿名下载策略
设置可下载的匿名存储桶策略,参见:https://docs.min.io/cn/minio-client-complete-guide.html#policy
对于英文版:https://docs.min.io/docs/minio-client-complete-guide.html#policy
./mc policy set download myminio/ai123/docker/ #myminio为服务名,后面为路径
注意:权限不支持继承,即上面设置了ai123/docker/
目录可以匿名下载,但是ai123/docker/a/b
就不支持匿名下载,还需要单独设置
我用的版本是(minio version RELEASE.2020-05-28T23-29-21Z)
匿名下载后就可以url直接下载文件了,比如浏览器下载或者wget命令等
python代码调用样例
打开 http://
(例如 http://10.1.192.120:9000 )用默认的'minioadmin:minioadmin’既可操作文件系统了
可以手工创建一个bucket,上传一个文件,然后通过下列python代码下载文件了,需要先安装pip install minio
from minio import Minio
from minio.error import ResponseError
minioClient = Minio('10.1.192.120:9000',
access_key='minioadmin',
secret_key='minioadmin',
secure=False)
# Get a full object.
try:
data = minioClient.get_object('pre-inquiry', 'fabric-dev-servers.tar.gz') # 你的bucket,你的对象名称
with open('fabric-dev-servers.tar.gz', 'wb') as file_data:
for d in data.stream(32*1024):
file_data.write(d)
except ResponseError as err:
print(err)
附:docker方式安装说明
特别说明:通过命令行方式安装使用
MinIO快速入门指南
mkdir /home/minio-data
docker run -d --name minio -p 9000:9000 -v /home/minio-data:/data minio/minio server /data
docker logs -f minio # 可以看到默认的'minioadmin:minioadmin’
附: docker-compose样例
minio:
image: minio/minio:RELEASE.2021-05-22T02-34-39Z
volumes:
- ../minio_data/:/data
ports:
- "8039:9000"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: admin123abc
command: server /data
通过nginx作为代理
注意proxy_pass后的路径不要加/,否则会出现307错误错误
location /minio/ {
proxy_pass http://10.17.157.168:8039; #
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
参考
- Deploy MinIO on Docker Compose
- MinIO Docker Quickstart Guide