首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >高性能PHP框架webman集成开源MinIO对象存储服务

高性能PHP框架webman集成开源MinIO对象存储服务

作者头像
Tinywan
发布2024-11-21 18:48:34
发布2024-11-21 18:48:34
52400
举报
文章被收录于专栏:开源技术小栈开源技术小栈
运行总次数:0

本文导读:如何利用Docker技术搭建一个专有的Minio服务对象存储系统,如何通过高性能的PHP框架Webman与开源的MinIO对象存储插件,实现对MinIO对象存储的高效管理。通过本文的指导,带你能够深入了解从Minio服务搭建到与Webman框架集成的全过程,从而为您的项目提供强大的对象存储支持。

Minio

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如:图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几KB到最大5T不等。可以很简单的和其他应用结合使用,例如:PHP、Redis、MySQL等。

核心概念

存储空间(Bucket)

存储空间(Bucket)是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

  • 同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的存储空间。
  • 每个用户可以拥有多个存储空间。
  • 存储空间的名称必须是全局唯一的。存储空间创建成功后,名称将无法修改。

对象(Object)

对象(Object)是Minio存储数据的基本单元,也被称为Minio的文件。和传统的文件系统不同,对象没有文件目录层级结构的关系。对象由元数据(Object Meta)、用户数据(Data)和文件名(Key)组成,并且由存储空间内部唯一的Key来标识。对象元数据是一组键值对,表示了对象的一些属性,例如文件类型、编码方式等信息,同时用户也可以在元数据中存储一些自定义的信息。

对象的生命周期是从上传成功到被删除为止。在整个生命周期内,除使用追加方式上传的Object可以通过继续追加上传写入数据外,使用其他方式上传的Object内容无法编辑,您可以通过重复上传同名的对象来覆盖之前的对象。

ObjectKey

在各语言SDK中,ObjectKey、Key以及ObjectName是同一概念,均表示对Object执行相关操作时需要填写的Object名称。例如向某一存储空间上传Object时,ObjectKey表示上传的Object所在存储空间的完整名称,即包含文件后缀在内的完整路径,如:tinywan/img/2024.jpg

Endpoint(访问域名)

Endpoint表示Minio对外服务的访问域名。Minio以HTTP RESTful API的形式对外提供服务,当访问不同的Region的时候,需要不同的域名。通过内网和外网访问同一个Region所需要的Endpoint也是不同的。用于访问存储空间(Bucket)和对象(Object),例如:http://s3.tinywan.com

AccessKey(访问密钥)

AccessKey简称AK,指的是访问身份验证中用到的ACCESS KEYSECRET KEY。Minio通过使用ACCESS KEYSECRET KEY对称加密的方法来验证某个请求的发送者身份。ACCESS KEY用于标识用户;SECRET KEY是用户用于加密签名字符串和Minio用来验证签名字符串的密钥,必须保密。

部署

Docker部署

代码语言:javascript
代码运行次数:0
运行
复制
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服务的监听地址和端口。

访问MinIO控制台

控制台访问地址:http://localhost:9090/

创建存储空间(Bucket)

创建 Access Keys

代码语言:javascript
代码运行次数:0
运行
复制
Access Keys:aFbJYjvuJJHKVQYokxON

Secret Keys:0k1cWvrT8I56VMdxTn5KTpKJi3I2SoMDpiOrUfcu

使用

基于webman开发的一个开源免费管理后台webman-admin使用。通过云存储插件进行测试上传文件到MinIO服务端。

插件地址:https://www.workerman.net/app/view/storage

安装依赖包

代码语言:javascript
代码运行次数:0
运行
复制
composer require league/flysystem-aws-s3-v3

S3储配置

配置参考如下所示

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

测试上传

文件上传响应

代码语言:javascript
代码运行次数:0
运行
复制
{
    "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"
        }
    ]
}

MinIO控制台查看

目录和文件列表

文件预览

可能遇到的问题

代码语言:javascript
代码运行次数:0
运行
复制
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即可解决问题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Minio
  • 核心概念
    • 存储空间(Bucket)
    • 对象(Object)
    • ObjectKey
    • Endpoint(访问域名)
    • AccessKey(访问密钥)
  • 部署
    • Docker部署
    • 访问MinIO控制台
  • 使用
    • 安装依赖包
    • S3储配置
    • 测试上传
    • MinIO控制台查看
    • 可能遇到的问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档