小二是新来的实习生。 上次把图片直接存储到服务器上 后,我把他臭骂了一顿。于是他开始反省,后来改用了 OSS,算是符合我的要求了。
后来,我给他提了新的要求:能不能在服务器上搭一个文件存储服务?他想到了 FastDFS,但我告诉他,FastDFS 原生安装非常复杂,即使使用 Docker 安装,也会遇到不少莫名其妙的问题。
“那用啥?”小二嗓门很大,吓得我一跳。
“试试 GitHub 星标 32k+ 的 MinIO 吧!go 语言开发的,性能很好,安装也简单,可分布式存储海量图片、音频、视频等文件,还有后台管理,十分友好。”我整理好情绪后,和蔼可亲地说。
于是小二开始研究,没想到只花了 10 分钟就搞定了!以下是他的笔记,分享给公众号读者。

一、关于 MinIO
衡量一款产品是否流行,有个比较取巧的方法:看看培训机构都在讲什么技术,因为它们通常比较能把握行业趋势。
据我观察,已经有不少知名培训机构开始讲 MinIO 了。这意味着 MinIO 越来越受欢迎。

我之前看 MinIO 的星标还没这么多,刚上去一看,增长确实有点快,马上就到 33k 了!
GitHub 地址: https://github.com/minio/minio

另外,MinIO 可以用来作为云原生应用的主要存储服务,因为云原生应用往往需要更高的吞吐量和更低的延迟,而这些都是 MinIO 的优势。
二、安装 MinIO
MinIO 适用于 Windows、macOS 和 Linux 等平台。我刚好有一台 CentOS 服务器,所以这里以 CentOS 为例安装 MinIO。
如果直接使用 wget https://dl.min.io/server/minio/release/linux-amd64/minio 去下载安装包的话,速度非常慢。

我是选择到官网下载安装包,再通过 Tabby 的 SFTP 上传到服务器的。
MinIO 下载地址: https://min.io/download#/linux

相对 wget,要快得多!

执行 chmod +x minio 命令添加权限,再执行 ./minio server /home/minioserver 启动 MinIO 服务。你可以将 /home/minioserver 替换为自己的数据存储目录。

注意,Console 端口号会动态生成,也就是说,重启服务后端口号就会变化。因此,我们按照提示设置了固定端口号,并确保服务器已放行该端口。
我通过宝塔面板放行了 46747 端口。如果服务器尚未放行该端口,也需要进行设置。

然后再执行下面的命令,同时把日志输出到固定的文件里。
通过 cat /home/minio.log 可以看到安装的日志。

如果不想添加日志文件,也可以直接执行:
然后就可以在浏览器中访问 MinIO 后台管理。注意将 IP 换成你自己的 IP 地址。默认用户名和密码都是:minioadmin。

三、使用 MinIO
通过 MinIO 后台管理面板就可以上传、下载文件。下面以图片为例。
第一步,新建存储桶,点击提示的链接或者右上角的按钮。

第二步,填写桶名,点击创建按钮。

第三步,点击 upload,选择文件上传。

第四步,点击刷新,选中图片,点击分享按钮,就可以访问图片了。

只不过,此时的分享链接是有时效的。

要获取长期有效的链接,需要修改存储桶的访问策略:
点击桶的设置按钮:

添加访问规则,只读即可:

注意前缀设置为 . ,否则会访问不成功。

设置成功后,回到图片访问链接,复制红色下划线标出的部分,并将 ip 替换成你的服务器 ip 地址。别忘了也在服务器或宝塔面板中放行 9000 端口。

然后就可以在地址栏里访问图片了。

四、Spring Boot 整合 MinIO
第一步,在 pom.xml 文件中添加 MinIO 依赖:
第二步,新建 MinIOController.java,并添加 upload 接口。
整个逻辑很简单:通过 endpoint、用户名和密码构建 MinioClient 客户端,然后创建存储桶,最后调用 putObject 方法将文件上传到 MinIO 服务器。

第三步,打开 apipost 测试接口,确认上传成功。

第四步,登录MinIO后台管理,查看刚刚上传的图片。

五、总结
这不比 FastDFS 好用得多?关键是,MinIO 是基于Apache V2 license 100% 开放源代码的,可以无限制、自由免费使用。

MinIO 不仅适合云原生应用,也特别适合单体应用,对小公司也很友好。
如果你的公司不打算上云,那么 MinIO 就是很棒的选择。尤其是公司只想搭建内部使用的文件存储服务时,MinIO 更是不二之选,简单易用!
它也很好管理。和直接上传到服务器相比,MinIO 好用得多,因为它有管理后台。