前言
来啦老铁!
笔者今天在弄一个写文档的工具 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
从启动日志中我们能看到一些重要信息:
- 服务端 web 访问端口、访问地址;
- 默认 root 账号、密码(用于 web 访问 minio 服务端时登录用);
4. 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 服务端可以看到已上传的文件:
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 账号的账号、密码;
3. 设置我们的 bucket 为可直接下载、访问:
mc policy set download minio/gallery
4. 访问链接下载资源;
浏览器直接访问下载链接,即可进行下载,如:http://192.168.2.175:9000/gallery/doggie-1636046619801.png
这样的链接,也就是能放到 markdown 中用于展示,那么文档工具 google codelabs 的图床功能就基本完成啦!更多的应用,未来如有涉及再另做总结~
Minio 对象存储的基本使用,也就完成啦,是不是很简单,赶快一起实践起来吧~
如果本文对您有帮助,麻烦动动手指点点赞?
非常感谢!