Minio 对象存储服务实践

前言

来啦老铁!

笔者今天在弄一个写文档的工具 google codelabs,而文档中经常用到图片、文件之类的,如果将这些文件都放在源代码中,显然是不优雅的,想到之前开发有用过一个工具作为图床,今天特地学习下,他就是:

  • Minio 对象存储服务;

今天我们只简单介绍单机使用。

Minio 对象存储服务简介;

以下为网络摘抄:
  • MinIO是在Apache License v2.0下发布的对象存储服务。它与Amazon S3云存储服务兼容。它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/ VM映像。对象的大小可以从几KB到最大5TB。服务端可通过 web 访问,客户端支持Java, Python, Javacript, Golang语言。

  • Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能。

  • 商业上,我们经常听到阿里云的OSS对象存储服务,而对于中小型企业,如果不选择存储上云,那么 Minio 是个不错的选择,麻雀虽小,五脏俱全。当然 Minio 除了直接作为对象存储使用,还可以作为云上对象存储服务的网关层,无缝对接到 Amazon S3、MicroSoft Azure。

官网:https://github.com/minio/minio

废话不多说了,我们一起来学习如何搭建环境吧~

整体步骤

1). 服务端搭建;
2). 客户端搭建;
3). mc 部分;

1). 服务端搭建;

(以 mac 为例)

1. 创建数据存储的文件夹;
  • 如:/Users/dylan.z.zhang/Desktop/test/minio-data
2. 安装 minio 服务端;
brew install minio/stable/minio
3. 启动 minio 服务端;
minio server /Users/dylan.z.zhang/Desktop/test/minio-data
启动 minio 服务端

从启动日志中我们能看到一些重要信息:

  • 服务端 web 访问端口、访问地址;
  • 默认 root 账号、密码(用于 web 访问 minio 服务端时登录用);
4. web 访问 minio 服务端;
web 访问 minio 服务端
web 访问 minio 服务端

2). 客户端搭建;

创建客户端项目,如:minio-client,可自选编程语言进行编写链接服务端的客户端代码,笔者项目中使用 javascript,因此,我选择 javascript 语言,参考 npm 包:minio

具体步骤:

1. 创建 node 项目;
cd minio-client
npm init
2. 安装 minio 包:
npm install minio --save-dev
3. 编写上传的简单案例;
const path = require('path');
const Minio = require('minio');

const imageList = process.argv.slice(2).map(u => path.resolve(u));
if (imageList.length == 0) {
    return;
}

const minioClient = new Minio.Client({
    endPoint: '192.168.2.175',
    port: 9000,
    useSSL: false,
    accessKey: 'minioadmin',
    secretKey: 'minioadmin'
});
const bucketName = "gallery";

minioClient.bucketExists(bucketName, function (err, exists) {
    if (err) {
        return console.log(err);
    }
    if (!exists) {
        // Make a bucket called defaultBucket.
        minioClient.makeBucket(bucketName, 'us-east-1', function (err) {
            if (err) {
                return console.log(err);
            }
            console.log('Bucket created successfully in "us-east-1".');
        })
    }
    if (exists) {
        return;
    }
})

// Using fPutObject API to upload your file to the specific bucket.
const metaData = {
    'Content-Type': 'application/octet-stream'
}
imageList.forEach(image => {
    const fileName = `${path.basename(image).split(".")[0]}-${Date.now()}${path.extname(image)}`;
    // bucketName, objectName, sourceObject, conditions, callback
    minioClient.fPutObject(bucketName, fileName, image, metaData, function (err, objInfo) {
        if (err) {
            return console.log(err, objInfo);
        }
        console.log("上传成功!地址:", `http://192.168.2.175:9000/${bucketName}/${fileName}`);
    });
});
4. 客户端上传文件至服务端;

命令如:

node index.js assets/doggie.png

支持多个文件同时上传,如:

node index.js assets/doggie.png assets/test.png
客户端上传文件至服务端

web 服务端可以看到已上传的文件:


web 服务端查看已上传的文件
5. 设置下载链接可直接访问;

步骤 4 获得的文件访问路径,截止目前还是访问不了的,浏览器访问会报错,如:

无法下载

这里需要加一个重要的步骤,
这里需要加一个重要的步骤,
这里需要加一个重要的步骤,

重要的事情说 3 遍!!!如下~

3). mc 部分;

1. 安装 mc;
brew install minio/stable/mc

关于 mc 介绍:https://github.com/minio/minio#test-using-minio-client-mc

2. 设置 mc 接管 minio 服务端;
mc config host add minio http://192.168.2.175:9000/ minioadmin minioadmin

minioadmin minioadmin 分别为 root 账号的账号、密码;

mc 接管 minio 服务端
3. 设置我们的 bucket 为可直接下载、访问:
mc policy set download minio/gallery
设置我们的 bucket 为可直接下载、访问
4. 访问链接下载资源;

浏览器直接访问下载链接,即可进行下载,如:http://192.168.2.175:9000/gallery/doggie-1636046619801.png

这样的链接,也就是能放到 markdown 中用于展示,那么文档工具 google codelabs 的图床功能就基本完成啦!更多的应用,未来如有涉及再另做总结~

Minio 对象存储的基本使用,也就完成啦,是不是很简单,赶快一起实践起来吧~

如果本文对您有帮助,麻烦动动手指点点赞?

非常感谢!

你可能感兴趣的:(Minio 对象存储服务实践)