SpringBoot + MinIO 轻松构建对象存储服务,支持私有化部署!

01、背景介绍

在实际的软件系统开发过程中,经常避免不了需要用到文件存储服务。

例如,对于小型的网站系统,通常会将文件存储服务和网站系统部署在一台服务器中,以实现低成本的资源投入,如果访问量不大,基本上没什么问题。当访问量逐渐升高,此时网站的文件资源读取越来越频繁,单台服务器可能难以承载较大的请求量,这个时候网站可能会出现打不开,甚至系统异常等问题。

当出现这个场景,很容易第一时间想到将文件采用云存储服务来解决。所谓云存储服务,简单的说,就是将访问很频繁的文件资源服务,由本地改成云厂商提供的文件存储服务,比如阿里云 OSS、七牛云、腾讯云、百度云等等,迁移之后,网站的访问压力会得到极大的释放,服务也会变得更加稳定。但是,这些云存储服务大部分都是收费的,以阿里云为例,数据存储通常按照 0.12 元/GB/月的标准来收费,虽然便宜,但是日积月累下来也是一笔不小的开支啊。

为了节省成本,很多项目团队会自己搭建一套云存储服务,比如采用开源的 fastDFS 工具来作为文件存储服务器,虽然能性能不错,但是软件安装环境非常复杂,最重要的是没有一个完整的技术文档,大部分都是某某公司或者某某网友自己总结的文档,每次维护起来很是麻烦。

直到出现了 MinIO,云存储服务工具又多了一个新的可选项。

MinIO 是一款号称世界上速度最快的对象存储服务器,专为大规模数据存储和分析而设计。它支持在各种环境中部署,包括物理服务器、虚拟机、容器等,最关键的是它的技术文档非常完善,非常容易上手;同时,对个人用户是完全开源免费的。

今天通过这篇文章,我们一起了解一下如何利用 MinIO 来搭建一套属于自己的云存储服务。

02、方案实践

2.1、minio 快速安装

minio 工具的安装非常简单,如果你本机安装了 Docker 容器,可以通过 Docker 命令一键实现安装操作。

以 windows 操作系统为例,安装命令如下。
在这里插入图片描述

相关参数解读:

  • docker run:表示启动运行容器
  • -p:表示为容器绑定一个本地的端口
  • -name:表示为容器创建一个本地的名字
  • -v:表示将文件路径设置为容器使用的持久卷位置。当 MinIO 将数据写入 /data时,该数据会镜像到本地路径~/minio/data, 使其能够在容器重新启动时保持持久化。您可以设置任何具有读取、写入和删除权限的文件路径来使用。
  • -e:表示设置登陆控制台的用户名和密码。其中控制台的访问地址为http://本机ip:9001,api 的访问地址为http://本机ip:9000

如果没有 docker 容器,可以采用软件包方式进行安装,具体实现方式可以参考官网文档,地址如下。

https://minio.org.cn/docs/minio/container/index.html

服务启动成功之后,在浏览器中访问http://127.0.0.1:9001地址,会看到类似于如下界面。

图片

输入上文设置的用户名和密码,即可登陆!

2.2、minio 使用介绍

登陆成功之后,会看到类似于如下的主界面。

图片

由于官方并没有提供汉化版,如果想要实现中文展示,可以使用浏览器插件进行翻译,翻译之后的内容如下。

图片

在对象存储服务里面,所有的文件都是以桶的形式来组织的。简单的说,你可以将桶看作是目录,这个目录下有很多的文件或者文件夹,这和其它云存储服务基本一致。

下面我们一起来快速体验一下!

2.2.1、创建存储桶

所有的文件必须要存储到桶中,因此我们需要先创建一个存储桶。

图片

如果想要修改存储桶信息,点击左侧的Buckets菜单,就可以看到相关的存储桶配置信息。

2.2.2、上传和下载文件

存储桶创建完成之后,就可以上传文件了。

点击Object Browser菜单,可以看到刚刚创建的存储桶public-bucket,点击进入,上传我们想要存储的文件了。

图片

图片

图片

如果想要下载文件或者预览文件,点击文件,右侧会弹出相关的操作按钮,点击相应的操作按钮就可以了。

2.2.3、设置文件公开访问

默认创建的存储桶,都是私有桶,也就是说无法被公开访问。

图片

以上文的文件为例,如果以 api 的方式直接访问,会提示无权限,示例如下:

图片

通常来说,我们会将数据写入操作进行控制;对于读操作,很多不涉及安全问题的,我们希望能被互联网公开访问,以便加快文件的访问速度,此时如何实现呢?

可以在存储桶里面配置,将数据读取权限设置为公开访问,操作示例如下:

图片

此时,我们再次以 api 的方式访问,结果如下:

图片

可以清晰的看到,此时文件可以公开访问了。

2.3、springBoot 集成 minio 实现文件存储

最后,我们一起来看看,如何在 Spring Boot 工程中集成 minio 客户端以便实现文件存储服务。

2.3.1、创建用户访问密钥

MinIO 支持通过用户、密码来管理存储桶,我们可以利用 minio 客户端来实现文件的上传和下载。

点击Access Keys菜单,创建用户名和密码并将其保存,下文会用到。

图片

2.3.2、引入依赖包

在 Spring Boot 工程,引入 minio 客户端依赖包。

在这里插入图片描述

2.3.3、添加相关配置

application.properties文件中,添加 minio 相关的配置信息.
在这里插入图片描述

2.3.4、编写 Minio 客户端配置类

基于上文的配置信息,编写 Minio 客户端配置类。
在这里插入图片描述

2.3.5、编写上传和文件预览服务

接着利用 minioClient 客户端,编写上传和文件预览服务。
在这里插入图片描述

2.3.6、编写上传页面

resources/static目录下,创建index.html文件,编写上传页面。
在这里插入图片描述

2.3.7、最后验证一下服务

最后,将服务启动,一起来验证一下代码的正确性。

1)上传服务验证

在浏览器端,访问http://127.0.0.1:8080/,选择文件并上传,示例如下。

图片

回到 minio 控制台,可以看到刚刚上传的文件信息。

图片

2)文件预览地址验证

在浏览器端,访问http://127.0.0.1:8080/getPreviewUrl?fileName=图片.jpeg,会返回一段带有签名的文件预览地址,示例如下。

图片

将其地址复制出来直接访问,可以清晰的看到图片能正常展示。

图片

通过getPresignedObjectUrl()方法生成的文件地址链接,无论是是公有桶还是私有桶,都可以正常访问。与getObjectUrl()方法生成的文件预览地址相比,它带有过期时间,这样设计的目的也是为了保护文件资源,避免频繁窃取。

03、小结

最后总结一下,本文主要围绕利用 minio 实现对象存储服务,进行了一次知识内容的总结,如果有描述不对的地方,欢迎留言指出。

在实际的使用过程中,通常会这样处理。

  • 如果当前文件不包含隐私信息,比如图片,可以配置公共访问权限,构建永久访问链接。
  • 如果当前文件包含隐私信息,比如营业执照图片,可以配置私有桶,构建带有有效时长的访问链接,比如配置过期时间1小时等。

示例代码地址:

https://gitee.com/pzblogs/spring-boot-example-demo

04、参考

1.https://minio.org.cn/docs/minio/container/index.html

写到最后

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

最后感谢各位的阅读。

  • 30
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot集成Minio工具类的步骤如下: 1. 添加Minio依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>RELEASE.2021-06-17T22-59-28Z</version> </dependency> ``` 2. 配置Minio连接信息 在application.properties文件中添加以下配置: ``` minio.endpoint=http://localhost:900 minio.accessKey=minioadmin minio.secretKey=minioadmin minio.bucketName=test ``` 3. 创建Minio工具类 创建一个MinioUtil类,用于封装Minio的操作方法,例如上传文件、删除文件等。 ``` @Component public class MinioUtil { @Value("${minio.endpoint}") private String endpoint; @Value("${minio.accessKey}") private String accessKey; @Value("${minio.secretKey}") private String secretKey; @Value("${minio.bucketName}") private String bucketName; private MinioClient minioClient; @PostConstruct public void init() throws Exception { minioClient = new MinioClient(endpoint, accessKey, secretKey); if (!minioClient.bucketExists(bucketName)) { minioClient.makeBucket(bucketName); } } public void uploadFile(String objectName, String filePath) throws Exception { minioClient.putObject(bucketName, objectName, filePath, null); } public void deleteFile(String objectName) throws Exception { minioClient.removeObject(bucketName, objectName); } public String getFileUrl(String objectName) throws Exception { return minioClient.presignedGetObject(bucketName, objectName); } } ``` 4. 使用Minio工具类 在需要使用Minio的地方,注入MinioUtil类,调用其方法即可。 ``` @Autowired private MinioUtil minioUtil; public void uploadFile() throws Exception { minioUtil.uploadFile("test.jpg", "/path/to/test.jpg"); } public void deleteFile() throws Exception { minioUtil.deleteFile("test.jpg"); } public String getFileUrl() throws Exception { return minioUtil.getFileUrl("test.jpg"); } ``` 以上就是Spring Boot集成Minio工具类的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值