利用Minio自建兼容S3协议对象存储-免费开源的Minio分布式对象存储
MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储。它与 Amazon S3 云存储服务 API 兼容,适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。
MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。对象存储可以充当主存储层,以处理Spark、Presto、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。
MinIO 在很早的时候就采用了 S3 兼容协议,利用Minio支持S3协议的特性,可以帮助我们搭建兼容S3协议对象存储。本篇文章就来分享一下Minio的安装与使用方法。
更多的云存储和建站教程有:
- FreeFileSync 免费开源的文件备份和同步工具-自动备份定时备份
- 十大免费开源的网站统计程序-自建网站统计工具 可视化数据分析
- 简单图床EasyImage2.0 安装与使用-开源图床源码支持多文件上传无需数据库
一、Minio安装前准备
网站:
- 官网:https://min.io/
- 项目:https://github.com/minio/minio
1.1 准备VPS主机
Docker需要VPS运行,现在的VPS主机基本上也是白菜价了,有关于VPS主机评测查看:VPS主机排行榜单。
1.2 Docker环境
有了VPS主机,现在你就可以需要在VPS主机上配置好Docker环境,这里有一个一键安装Docker环境的命令,配置起来非常地简单:Docker 和 Docker Compose 一键安装脚本 可手动选择安装版本和下载源。
二、Minio Docker安装
Docker:
- https://registry.hub.docker.com/r/minio/minio/tags
2.1 直接安装
- https://docs.min.io/docs/minio-docker-quickstart-guide
执行以下命令开始用Docker安装MinIO(记得修改账号和密码):
mkdir -p ~/minio/data docker pull minio/minio:latest docker run \ -p 9000:9000 \ -p 9001:9001 \ --name minio1 \ -v ~/minio/data:/data \ -e "MINIO_ROOT_USER=wzfou" \ -e "MINIO_ROOT_PASSWORD=wzfou.com" \ quay.io/minio/minio server /data --console-address ":9001"
该命令在您的用户主目录中创建一个新的本地目录
~/minio/data
。然后它使用 -v 参数启动 MinIO 容器,以将本地路径(~/minio/data)
映射到指定的虚拟容器目录(/data)
。当 MinIO 将数据写入/data
时,该数据实际上被写入本地路径~/minio/data
,它可以在容器重新启动之间保持不变。
获取容器 MinIO 容器 ID。执行命令:
docker ps -a
-a
flag makes sure you get all the containers (Created, Running, Exited). Then identify theContainer ID
from the output.
启动或者关闭MinIO容器。执行命令开启容器:
docker start <container_id>
执行命令关闭容器.
docker stop <container_id>
查看MinIO 容器日志。执行命令:
docker logs <container_id>
查看MinIO使用资源。执行命令.
docker stats <container_id>
Minio的其中9000
为 API 端口,主要是用于上传下载的服务端口,而9001
是 Web 管理页面 的端口。
2.2 Docker Compose分布式MinIO
网站:
- https://docs.min.io/docs/deploy-minio-on-docker-compose
(可选)如果使用Docker Compose,您可以使用 Compose 文件来配置 MinIO 服务,从您的配置中创建并启动所有分布式 MinIO 实例。Docker Compose的好处在于可以将分布式 MinIO 实例将部署在同一主机上的多个容器中。
- docker-compose.yaml:https://github.com/minio/minio/blob/master/docs/orchestration/docker-compose/docker-compose.yaml
- nginx.conf:https://github.com/minio/minio/blob/master/docs/orchestration/docker-compose/nginx.conf
习惯用Docker Compose部署的朋友,先确保你已经安装好了Docker环境。然后下载官方的docker-compose.yaml
和 nginx.conf
文件到文件夹中。
mkdir -p ~/minio/data wget https://github.com/minio/minio/blob/master/docs/orchestration/docker-compose/docker-compose.yaml wget https://github.com/minio/minio/blob/master/docs/orchestration/docker-compose/nginx.conf
记得对官方的docker-compose.yaml
做适当的修改。
version: '3.7' # Settings and configurations that are common for all containers x-minio-common: &minio-common image: quay.io/minio/minio:RELEASE.2022-08-08T18-34-09Z command: server --console-address ":9001" http://minio{1...4}/data{1...2} expose: - "9000" - "9001" # environment: # MINIO_ROOT_USER: minioadmin # MINIO_ROOT_PASSWORD: minioadmin healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 # starts 4 docker containers running minio server instances. # using nginx reverse proxy, load balancing, you can access # it through port 9000. services: minio1: <<: *minio-common hostname: minio1 volumes: - data1-1:/data1 - data1-2:/data2 minio2: <<: *minio-common hostname: minio2 volumes: - data2-1:/data1 - data2-2:/data2 minio3: <<: *minio-common hostname: minio3 volumes: - data3-1:/data1 - data3-2:/data2 minio4: <<: *minio-common hostname: minio4 volumes: - data4-1:/data1 - data4-2:/data2 nginx: image: nginx:1.19.2-alpine hostname: nginx volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro ports: - "9000:9000" - "9001:9001" depends_on: - minio1 - minio2 - minio3 - minio4 ## By default this config uses default local driver, ## For custom volumes replace with volume driver configuration. volumes: data1-1: data1-2: data2-1: data2-2: data3-1: data3-2: data4-1: data4-2:
你需要去掉以下一段代码前的“#”
号,然后将账号和密码改成你自己的。
# environment: # MINIO_ROOT_USER: minioadmin # MINIO_ROOT_PASSWORD: minioadmin
现在你可以执行以下命令启动Docker了。
sudo docker-compose up -d #或者 docker-compose pull docker-compose up #或者 docker stack deploy --compose-file docker-compose.yaml minio
现在可以在主机上的 9000 端口访问分布式实例,继续通过 http://127.0.0.1:9000/
访问 Web 浏览器。这里通过 Nginx 负载均衡反向代#@理了 4 个 MinIO 服务器实例。
默认创建了 4 个 minio 分布式实例。您可以将更多 MinIO 服务(最多 16 个)添加到您的 MinIO Compose 部署中。更多关于分布式MinIO教程:https://docs.min.io/docs/distributed-minio-quickstart-guide
三、Minio管理使用
3.1 访问后台面板
使用:IP+9000
端口,就可以访问到你的Minio后台管理面板了。账号和密码就是你在Docker安装时设置的。
以下就是Minio的后台面板界面了。
3.2 反向绑定域名
(可选)Minio使用IP+端口的形式访问,不如使用域名访问方便。给Minio反向绑定域名有三种方式:
宝塔面板反向绑定域名Minio。如果你的VPS主机上安装了宝塔面板(教程:新版宝塔面板安装与使用教程-利用宝塔面板在VPS主机上搭建网站),先在宝塔面板上添加域名网站,并且申请好SSL证书,然后进入到反向绑定域名界面。
如下图填写你的Minio的IP:端口地址
,点击保存,重启Nginx生效。
Docker一键反向绑定域名。如果你在你的Docker安装了Nginx反向绑定域名管理工具,反向绑定域名就更简单了,先添加SSL证书。
然后添加反向绑定域名。
然后填写你的MinIO的IP+端口地址,保存,完成。
Oneinstack或者LNMP反向绑定域名。如果你的VPS主机上安装了Oneinstack或者LNMP一键包,那你可以直接修改你的域名Nginx配置文件达到反向绑定域名的目的了。
- https://docs.min.io/docs/setup-nginx-proxy-with-minio.html
- Oneinstack教程:https://wzfou.com/oneinstack-list/
- LNMP教程:https://wzfou.com/lnmp-yjb/
此部分需要一定的Nginx知识,官方给出Nginx反向绑定域名示例如下:
server { listen 80; server_name example.com; # To allow special characters in headers ignore_invalid_headers off; # Allow any size file to be uploaded. # Set to a value such as 1000m; to restrict file size to a specific value client_max_body_size 0; # To disable buffering proxy_buffering off; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_connect_timeout 300; # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://localhost:9000; # If you are using docker-compose this would be the hostname i.e. minio # Health Check endpoint might go here. See https://www.nginx.com/resources/wiki/modules/healthcheck/ # /minio/health/live; } }
说明:
将 example.com 替换为您自己的主机名。
将 http://localhost:9000 替换为您自己的服务器名称。
添加client_max_body_size 1000m 目的是为了增大Http允许上传文件的大小。默认值是 1m,这对于大多数场景来说太低了。或者直接禁用检查客户端请求正文大小,将 client_max_body_size 设置为 0。
Nginx 默认缓冲响应。要禁止 Nginx 缓冲 MinIO 对临时文件的响应,请设置 proxy_buffering off;。这将改善客户端请求的第一个字节的时间。
Nginx 默认不允许特殊字符。设置 ignore_invalid_headers off 允许带有特殊字符的标题。
MinIO反向绑定域名如下图:
3.3 创建Buckets存储桶
Minio后台面板的Buckets管理,点击创建。
说明:
MinIO 使用桶来组织对象。存储桶类似于文件系统中的文件夹或目录,其中每个存储桶可以保存任意数量的对象。
Versioning版本控制允许将同一对象的多个版本保留在同一键下。
Object Locking对象锁定可防止对象被删除。需要支持保留和合法保留。只能在创建存储桶时启用。
Quota配额限制存储桶中的数据量。
Retention保留规定了在一段时间内防止对象删除的规则。
存储桶命名规则
存储桶名称的长度必须介于 3(最小)和 63(最大)字符之间。
存储桶名称只能由小写字母、数字、点 (.) 和连字符 (-) 组成。
存储桶名称不得包含两个相邻的句点。
存储桶名称不得格式化为 IP 地址(例如,192.168.5.4)。
存储桶名称不能以前缀 xn-- 开头。
存储桶名称不得以后缀 -s3alias 结尾。该后缀是为接入点别名保留的。
存储桶名称在分区内必须是唯一的。
接着你就可以查看并管理你的Buckets存储桶了。
默认情况下新建的Buckets
是私有权限,文件也可以直接分享带有效期的临时链接。如果需要当图床使用,可以将Buckets
修改为公开权限,就可以直接Web访问了。
3.4 用户增加与管理
Minio的用户管理中可以添加新的管理账号。
并且对不同的账号设置不同的权限。
3.5 资源使用情况
Minio后台可以很方便地显示你的Minio使用的资源情况,例如用户、文件、存储量等信息。(点击放大)
3.6 Minio个性设置
Minio的设置项非常地多,大部分保持默认即可。
四、Minio在线管理文件
4.1 在线上传文件
Minio自带了Web文件管理,你可以直接通过Web来上传、下载、分享等管理Minio存储桶中的文件。
Minio批量上传文件。
4.2 下载查看文件
点击文件,可以查看到文件的详细信息。
点击分享可以查看到文件的URL地址。
4.3 Web访问文件
复制该URL就可以在浏览器打开了。(注意:替换为你的服务器IP地址,如果你做了反向绑定域名,替换为你的域名地址)
如果你发现你的文件无法访问,记得查看一下你的Buckets存储桶是不是允许公开访问。
五、S3 Browser可视化管理
Minio官方的 mc 客户端是使用命令行来执行上传下载,有些麻烦,你兴趣的朋友可以到官网查看:https://docs.min.io/docs/minio-client-quickstart-guide.html。
- https://s3browser.com
这里wzfou.com建议使用S3 Browser来管理Minio,S3 Browser支持访问亚马逊S3接口的对象服务服务,应用于Windows平台。 当对象服务提供的是兼容亚马逊S3接口的服务时,可以使用该工具。
5.1 创建密钥
在Minio的用户管理中创建新的密钥与ID,记得保存下来。
5.2 连接Minio
打开S3 Browser,选择S3兼容存储。
在REST Endpoint填写你的Minio的API访问地址:IP+端口或者域名。Minio没有启用SSL的去掉下方的加密连接。
5.3 管理Minio
S3 Browser可以直接对Minio创建存储桶。
S3 Browser可以直接设置Minio存储权限、管理文件、查看、编辑等,权限非常大,功能非常强。
S3 Browser可以设置Minio的存储文件权限。
S3 Browser也可以直接查看、下载、编辑Minio的存储文件。
六、总结
Minio使用Docker非常地简单,由于Minio兼容S3协议,所以你可以将它应用到那些支持S3存储的应用程序上,例如NextCloud网盘、Cloudreve自建网盘、ZPan自建网盘存储、ZFile自建免费公共网盘服务,这些都可以利用S3存储协议扩容。
文章出自:挖站否 https://wzfou.com/minio/, 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。
- ZFile自建免费公共网盘服务-支持阿里云OSS,OneDrive,FTP,S3协议等云存储
- ZPan自建网盘存储-基于各大云存储商的网盘系统zpan安装使用教程
- Cloudreve自建网盘系统-可预览Office文档对接七牛又拍云腾讯云COS
- NextCloud从入门到精通-自建网盘搭建个人云存储系统
- OneManager网盘目录列表程序-支持Onedrive,阿里网盘等在线预览和播放视频
- 支持WebDAV的国内外网盘整理汇总-各大网盘WebDAV服务器地址及连接方式
- 六个开源免费对象存储程序收集整理-自建兼容S3云存储协议对象存储
- 利用Minio自建兼容S3协议对象存储-免费开源的Minio分布式对象存储
- AList 目录列表程序挂载各大网盘-支持阿里云盘、OneDrive、GoogleDrive等
- Zdir 3开源免费目录列表程序-适合个人团队文件分享 可作为轻量级网盘使用
- 自建xBrowserSync解决浏览器书签同步共享问题-开源免费书签同步工具
作者你好,由于阿里云oss收费,于是我就按照您的教程搭建了easyimage图床,但是发现因为easyimage的图片存放都是以日期格式新建文件夹的,日后管理路径比较麻烦。就想用这篇教程搭建自己的oss,不知道Minio能否可以当做图床,支持picgo上传图片?希望可以解答,谢谢~