
本文导读:如何利用Docker技术搭建一个专有的Minio服务对象存储系统,如何通过高性能的PHP框架Webman与开源的MinIO对象存储插件,实现对MinIO对象存储的高效管理。通过本文的指导,带你能够深入了解从Minio服务搭建到与Webman框架集成的全过程,从而为您的项目提供强大的对象存储支持。
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如:图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几KB到最大5T不等。可以很简单的和其他应用结合使用,例如:PHP、Redis、MySQL等。
存储空间(Bucket)是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。
对象(Object)是Minio存储数据的基本单元,也被称为Minio的文件。和传统的文件系统不同,对象没有文件目录层级结构的关系。对象由元数据(Object Meta)、用户数据(Data)和文件名(Key)组成,并且由存储空间内部唯一的Key来标识。对象元数据是一组键值对,表示了对象的一些属性,例如文件类型、编码方式等信息,同时用户也可以在元数据中存储一些自定义的信息。
对象的生命周期是从上传成功到被删除为止。在整个生命周期内,除使用追加方式上传的Object可以通过继续追加上传写入数据外,使用其他方式上传的Object内容无法编辑,您可以通过重复上传同名的对象来覆盖之前的对象。
在各语言SDK中,ObjectKey、Key以及ObjectName是同一概念,均表示对Object执行相关操作时需要填写的Object名称。例如向某一存储空间上传Object时,ObjectKey表示上传的Object所在存储空间的完整名称,即包含文件后缀在内的完整路径,如:tinywan/img/2024.jpg。
Endpoint表示Minio对外服务的访问域名。Minio以HTTP RESTful API的形式对外提供服务,当访问不同的Region的时候,需要不同的域名。通过内网和外网访问同一个Region所需要的Endpoint也是不同的。用于访问存储空间(Bucket)和对象(Object),例如:http://s3.tinywan.com
AccessKey简称AK,指的是访问身份验证中用到的ACCESS KEY和SECRET KEY。Minio通过使用ACCESS KEY和SECRET KEY对称加密的方法来验证某个请求的发送者身份。ACCESS KEY用于标识用户;SECRET KEY是用户用于加密签名字符串和Minio用来验证签名字符串的密钥,必须保密。
docker run \
-p 9000:9000 \
-p 9090:9090 \
-d \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123456" \
-v d:/minio/data:/data \
-v d:/minio/config:/root/.minio \
minio/minio server /data --console-address ":9090" --address ":9000"
-p 9000:9000:将容器内的9000端口映射到宿主机的9000端口,用于提供API服务-p 9090:9090:将容器内的9090端口映射到宿主机的9090端口,用于访问MinIO的图形用户界面(控制台)e "MINIO_ROOT_USER=admin" 和 -e "MINIO_ROOT_PASSWORD=admin123456":设置环境变量,指定MinIO服务的用户名和密码。-v d:/minio/data:/data 和 -v d:/minio/config:/root/.minio:将宿主机的目录挂载到容器的对应目录,用于存储数据和配置文件。minio/minio server /data --console-address ":9090" --address ":9000":指定MinIO以服务器模式运行,并使用/data目录作为其数据存储位置,同时指定控制台和API服务的监听地址和端口。控制台访问地址:http://localhost:9090/

创建
存储空间(Bucket)

创建 Access Keys

Access Keys:aFbJYjvuJJHKVQYokxON
Secret Keys:0k1cWvrT8I56VMdxTn5KTpKJi3I2SoMDpiOrUfcu
基于webman开发的一个开源免费管理后台webman-admin使用。通过云存储插件进行测试上传文件到MinIO服务端。
插件地址:
https://www.workerman.net/app/view/storage
composer require league/flysystem-aws-s3-v3
配置参考如下所示

注意。这里的访问
域名和endpoint需要填写API服务地址,即:http://192.168.3.29:9000

文件上传响应
{
"code": 0,
"msg": "ok",
"data": [
{
"key": "file",
"origin_name": "webman实战教程.png",
"save_name": "108b7f4d06ad88f608df22a4888a5ba7.png",
"save_path": "/108b7f4d06ad88f608df22a4888a5ba7.png",
"url": "http://192.168.3.29:9000/108b7f4d06ad88f608df22a4888a5ba7.png",
"unique_id": "108b7f4d06ad88f608df22a4888a5ba7",
"size": 24556,
"mime_type": "image/png",
"extension": "png"
}
]
}
目录和文件列表

文件预览

Error executing "PutObject" on
"http://127.0.0.1:9000/webman//ef50587a9304c299238d7828ea1eca0f.png";
AWS HTTP error: cURL error 56:
Recv failure: Connection reset by peer
(see https://curl.haxx.se/libcurl/c/libcurl-errors.html)
for http://127.0.0.1:9000/webman//ef50587a9304c299238d7828ea1eca0f.png
以上错误原因是因为本地开启了代理。并且上传执行文件是在Docker容器内。所以只需要把
endpoint配置改成http://192.168.3.29:9000宿主机IP或者公网IP即可解决问题。