利用Minio自建兼容S3协议对象存储-免费开源的Minio分布式对象存储

MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储。它与 Amazon S3 云存储服务 API 兼容,适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。

MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。对象存储可以充当主存储层,以处理Spark、Presto、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。

MinIO 在很早的时候就采用了 S3 兼容协议,利用Minio支持S3协议的特性,可以帮助我们搭建兼容S3协议对象存储。本篇文章就来分享一下Minio的安装与使用方法。

利用Minio自建兼容S3协议对象存储-免费开源的Minio分布式对象存储服务

更多的云存储和建站教程有:

  1. FreeFileSync 免费开源的文件备份和同步工具-自动备份定时备份
  2. 十大免费开源的网站统计程序-自建网站统计工具 可视化数据分析
  3. 简单图床EasyImage2.0 安装与使用-开源图床源码支持多文件上传无需数据库

一、Minio安装前准备

网站:

  1. 官网:https://min.io/
  2. 项目: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环境

二、Minio Docker安装

Docker:

  1. https://registry.hub.docker.com/r/minio/minio/tags

2.1 直接安装

  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 the Container ID from the output.

启动或者关闭MinIO容器。执行命令开启容器:

docker start <container_id>

执行命令关闭容器.

docker stop <container_id>

查看MinIO 容器日志。执行命令:

docker logs <container_id>

查看MinIO使用资源。执行命令.

docker stats <container_id>
Minio完成安装

Minio的其中9000为 API 端口,主要是用于上传下载的服务端口,而9001是 Web 管理页面 的端口。

2.2 Docker Compose分布式MinIO

网站:

  1. https://docs.min.io/docs/deploy-minio-on-docker-compose

(可选)如果使用Docker Compose,您可以使用 Compose 文件来配置 MinIO 服务,从您的配置中创建并启动所有分布式 MinIO 实例。Docker Compose的好处在于可以将分布式 MinIO 实例将部署在同一主机上的多个容器中。

  1. docker-compose.yaml:https://github.com/minio/minio/blob/master/docs/orchestration/docker-compose/docker-compose.yaml
  2. 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后台访问

以下就是Minio的后台面板界面了。

Minio创建存储桶

3.2 反向绑定域名

(可选)Minio使用IP+端口的形式访问,不如使用域名访问方便。给Minio反向绑定域名有三种方式:

宝塔面板反向绑定域名Minio。如果你的VPS主机上安装了宝塔面板(教程:新版宝塔面板安装与使用教程-利用宝塔面板在VPS主机上搭建网站),先在宝塔面板上添加域名网站,并且申请好SSL证书,然后进入到反向绑定域名界面。

Minio宝塔面板

如下图填写你的Minio的IP:端口地址,点击保存,重启Nginx生效。

Minio反向绑定

Docker一键反向绑定域名。如果你在你的Docker安装了Nginx反向绑定域名管理工具,反向绑定域名就更简单了,先添加SSL证书。

Minio一键绑定

然后添加反向绑定域名。

Minio添加域名

然后填写你的MinIO的IP+端口地址,保存,完成。

Minio设置端口

Oneinstack或者LNMP反向绑定域名。如果你的VPS主机上安装了Oneinstack或者LNMP一键包,那你可以直接修改你的域名Nginx配置文件达到反向绑定域名的目的了。

  1. https://docs.min.io/docs/setup-nginx-proxy-with-minio.html
  2. Oneinstack教程:https://wzfou.com/oneinstack-list/
  3. 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反向绑定域名如下图:

Minio域名访问

3.3 创建Buckets存储桶

Minio后台面板的Buckets管理,点击创建。

Minio创建存储

说明:

MinIO 使用桶来组织对象。存储桶类似于文件系统中的文件夹或目录,其中每个存储桶可以保存任意数量的对象。

Versioning版本控制允许将同一对象的多个版本保留在同一键下。

Object Locking对象锁定可防止对象被删除。需要支持保留和合法保留。只能在创建存储桶时启用。

Quota配额限制存储桶中的数据量。

Retention保留规定了在一段时间内防止对象删除的规则。

存储桶命名规则
存储桶名称的长度必须介于 3(最小)和 63(最大)字符之间。
存储桶名称只能由小写字母、数字、点 (.) 和连字符 (-) 组成。
存储桶名称不得包含两个相邻的句点。
存储桶名称不得格式化为 IP 地址(例如,192.168.5.4)。
存储桶名称不能以前缀 xn-- 开头。
存储桶名称不得以后缀 -s3alias 结尾。该后缀是为接入点别名保留的。
存储桶名称在分区内必须是唯一的。

接着你就可以查看并管理你的Buckets存储桶了。

Minio管理存储

默认情况下新建的Buckets是私有权限,文件也可以直接分享带有效期的临时链接。如果需要当图床使用,可以将Buckets修改为公开权限,就可以直接Web访问了。

Minio存储权限

3.4 用户增加与管理

Minio的用户管理中可以添加新的管理账号。

Minio用户管理

并且对不同的账号设置不同的权限。

Minio用户权限

3.5 资源使用情况

Minio后台可以很方便地显示你的Minio使用的资源情况,例如用户、文件、存储量等信息。(点击放大)

Minio资源使用

3.6 Minio个性设置

Minio的设置项非常地多,大部分保持默认即可。

Minio个性设置

四、Minio在线管理文件

4.1 在线上传文件

Minio自带了Web文件管理,你可以直接通过Web来上传、下载、分享等管理Minio存储桶中的文件。

Minio文件管理

Minio批量上传文件。

Minio批量上传

4.2 下载查看文件

点击文件,可以查看到文件的详细信息。

Minio下载查看文件
Minio 预览图片

点击分享可以查看到文件的URL地址。

Minio分享文件

4.3 Web访问文件

复制该URL就可以在浏览器打开了。(注意:替换为你的服务器IP地址,如果你做了反向绑定域名,替换为你的域名地址)

Minio浏览器访问

如果你发现你的文件无法访问,记得查看一下你的Buckets存储桶是不是允许公开访问。

Minio域名访问图片

五、S3 Browser可视化管理

Minio官方的 mc 客户端是使用命令行来执行上传下载,有些麻烦,你兴趣的朋友可以到官网查看:https://docs.min.io/docs/minio-client-quickstart-guide.html。

  1. https://s3browser.com

这里wzfou.com建议使用S3 Browser来管理Minio,S3 Browser支持访问亚马逊S3接口的对象服务服务,应用于Windows平台。 当对象服务提供的是兼容亚马逊S3接口的服务时,可以使用该工具。

5.1 创建密钥

在Minio的用户管理中创建新的密钥与ID,记得保存下来。

Minio S3 Browser创建密钥

5.2 连接Minio

打开S3 Browser,选择S3兼容存储。

Minio S3 Browser连接

在REST Endpoint填写你的Minio的API访问地址:IP+端口或者域名。Minio没有启用SSL的去掉下方的加密连接。

Minio S3 Browser设置

5.3 管理Minio

S3 Browser可以直接对Minio创建存储桶。

Minio S3 Browser直接创建存储
Minio S3 Browser管理存储

S3 Browser可以直接设置Minio存储权限、管理文件、查看、编辑等,权限非常大,功能非常强。

Minio S3 Browser浏览编辑文件

S3 Browser可以设置Minio的存储文件权限。

Minio S3 Browser直接设置权限

S3 Browser也可以直接查看、下载、编辑Minio的存储文件。

Minio S3 Browser预览图片

六、总结

Minio使用Docker非常地简单,由于Minio兼容S3协议,所以你可以将它应用到那些支持S3存储的应用程序上,例如NextCloud网盘、Cloudreve自建网盘ZPan自建网盘存储ZFile自建免费公共网盘服务,这些都可以利用S3存储协议扩容。

文章出自:挖站否 https://wzfou.com/minio/, 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。


分享到:
Avatar for Qi
关于站长(Qi),2008年开始混迹于免费资源圈中,有幸结识了不少的草根站长。之后自己摸爬滚打潜心学习Web服务器、VPS、域名等,兴趣广泛,杂而不精,但愿将自己经验与心得分享出来与大家共勉。
已有 7 条评论
  1. Avatar for 超

    作者你好,由于阿里云oss收费,于是我就按照您的教程搭建了easyimage图床,但是发现因为easyimage的图片存放都是以日期格式新建文件夹的,日后管理路径比较麻烦。就想用这篇教程搭建自己的oss,不知道Minio能否可以当做图床,支持picgo上传图片?希望可以解答,谢谢~

    2023年8月5日 11:27 回复
    • Avatar for Qi Qi

      可以的,不过Minio最好用来做存储。

      2023年8月5日 17:26 回复
  2. Qi妹反代换Tr#a#ef¥ik吧,云原生,自动发现服务,docker compose部署的时候加几行tr#aef#ik条件就行了,配合por#tai#ner使用简直爽歪歪

    2023年4月30日 15:27 回复
    • Avatar for Qi Qi

      好的,那我去试试。

      2023年5月12日 10:33 回复
  3. Avatar for vef vef

    要求是挺高的

    2023年4月28日 20:06 回复
  4. Avatar for tegw tegw

    功能很强大。

    2023年4月25日 20:15 回复
  5. Avatar for bet bet

    配置起来还是挺复杂的

    2023年4月14日 17:32 回复

Login

Welcome! Login in to your account

Remember me Lost your password?

Don't have account. Register

Lost Password

Register