# Minio文件系统安装与服务化
内容简介:Minio是一款跨平台的可「自建」轻量级对象存储服务,只需要一个命令,就能实现可以通过浏览器访问的简易网盘功能。支持本地储存和 AWS S3,最大存储对象 5TB。提供 API 与 SDK,可以和很多服务整合,甚至可以整合到 Android 与 iOS 应用中,使用 Apache License 2.0 协议发布。
https://github.com/minio/minio (opens new window)
https://gitee.com/mirrors/minio (opens new window)
# docker
docker run -p 9000:9000 --name minio \
-e "MINIO_ACCESS_KEY=TEST" \
-e "MINIO_SECRET_KEY=TEST123456" \
-v /mnt/data:/data \
-v /mnt/config:/root/.minio \
minio/minio server /data
# docker-compose
version: '2'
services:
minio:
image: minio/minio
container_name: minio
environment:
- TZ=Asia/Shanghai
- MINIO_ACCESS_KEY=TEST
- MINIO_SECRET_KEY=TEST123456
command:
- server
- /data
ports:
- 9000:9000
volumes:
- ./data:/data
- ./config:/root/.minio
# 安装篇
简单安装
# wget https://dl.minio.io/server/minio/release/linux-amd64/minio
# chmod +x minio
# mv minio /usr/local/bin
# mkdir -p /tmp/minio
通过这个安装之后,在/usr/local/bin目录下面执行这个命令,就能看到输出信息,获得accessKey和secretKey
# minio server /tmp/minio //后面的是数据目录
# 将Minio设置成服务
# 1、首先需要添加minio用户,以及建一个Minio文件夹
# adduser minio-user
# mkdir /tmp/minio
# chown minio-user:minio-user /tmp/minio
# 2、建立一个配置文件,并更新你的Key值
# vim /etc/default/minio
MINIO_ACCESS_KEY=xxx
MINIO_SECRET_KEY=xxx
MINIO_VOLUMES="/tmp/minio/"
MINIO_OPTS="--address :9000"
# 3、新建一个minio.service 在 /etc/systemd/system
# vim /etc/systemd/system/minio.service
[Unit]
Description=Minio
Documentation=https://docs.minio.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
[Service]
WorkingDirectory=/usr/local/
User=minio-user
Group=minio-user
PermissionsStartOnly=true
EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "[ -n \"${MINIO_VOLUMES}\" ] || echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\""
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
StandardOutput=journal
StandardError=inherit
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0
# SIGTERM signal is used to stop Minio
KillSignal=SIGTERM
SendSIGKILL=no
SuccessExitStatus=0
[Install]
WantedBy=multi-user.target
# 5、正式启用和查看状态
# systemctl enable minio.service
# systemctl daemon-reload
# systemctl start minio
# systemctl status minio.service
通过这些步骤,就可以后台运行Minio服务了。
# minio 图片直接访问地址,而不是下载
通过浏览器访问管理页面设置
登录后台管理界面,在右下角有个红色的加号图标,点击create bucket ,输入要创建的bucket,如test. 创建成功之后对bucket进行编辑。在页面的右上角。找到刚刚创建的test bucket。 点击那三个点,选择Edit policy ,在Prefix中输入* ,即允许所有访问。右边的选项选择 Read and write。然后点击Add 按钮就可以了。
通过minio管理客户端mc设置
1、下载客户端程序
下载地址 https://dl.minio.io/client/mc/release/windows-amd64/mc.exe (opens new window)
2、启动一个cmd窗口,进入mc.exe的目录
输入 .\mc.exe --h 可以查看mc.exe的命令帮助。
3、设置服务端
使用 minio client 将自己的 minio server 添加到 mc 的配置管理,命令如下
.\mc.exe config host add minio http://192.168.50.179:9000 3K2287Q20OW3HWQ2FJXJ L0eTMaBzVQwUgbeuo05f+qmSA
buZiWt4yZfDzrMv
Added `minio` successfully.
此命令将 http://192.168.50.179:9000 取一个别名 minio ,并交给mc进行配置管理。
4、查看minio中的桶,命令
.\mc.exe ls minio
[2019-02-18 20:34:25 CST] 0 B asiatrip\
[2019-02-18 21:15:55 CST] 0 B tonnyyy\
[2019-03-28 20:54:28 CST] 0 B xzspfj\
5、设置桶的访问策略,命令
.\mc.exe policy public minio/xzspfj/20190328/
Access permission for `minio/xzspfj/20190328/` is set to `public`
通过以上步骤,图片就可以直接通过地址进行访问了。
# java sdk
MinioClient minioClient new MinioClient("http://127.0.0.1:9000/","minioadmin","minioadmin");
String bucketName = "test"; // 桶名称,相当于根目录,方便设置权限
InputStream inputStream = new ByteArrayInputStream(data); // 上传文件的数据流
boolean exists = minioClient.bucketExists(bucketName); // 判断桶是否存在
if (!exists) minioClient.makeBucket(bucketName); // 不存在则创建桶
minioClient.putObject(bucketName, filename, inputStream, inputStream.available(), contentType); // 上传文件
path = "/" + bucketName + "/" + filename; // 返回上传的路径
# javascript sdk
初始化客户端
this.minioClient = new Minio.Client({
...this.options,
endPoint: 'xxx.xxx.xxx.xxx',
port: 9000,
useSSL: false,
accessKey: 'xxx',
secretKey: 'xxxx',
});
makeBucket -新建bucket
this.minioClient.makeBucket(BucketName, 'us-east-1', err => {
if (err) {
reject(err);
} else {
resolve('success');
}
});
bucketExists - 判断bucket是否存在
this.minioClient.bucketExists(BucketName)
putObject - 上传文件
const metaData = {
'Content-Type': type,
};
this.minioClient.putObject(
BucketName,
fileName,
file,
1024,
metaData,
);
getObject - 获取上传的文件流
this.minioClient.getObject(BucketName, fileName)
removeObject - 删除文件
this.minioClient.removeObject(BucketName, fileName)