问题
一般在正式的环境下,通过给域名添加子路径(如oss)用于下载文件服务器上的文件。但这种设置子路径的方式不能直接通过API上传文件,创建桶等,鉴于安全,也不能让这种子路径拥有创建、删除文件的权限。所以,一般情况下,后台还是通过访问多个minio端口9000实现文件的操作,甚至有时,还需要在自己的代码中写一套负载均衡的逻辑(之前我的代码中就是这样实现的)。其实完全可以基于Nginx直接暴露9001,9000, 同时再给web通过/oss/xx的形式访问的能力。
结构设计
本次环境在一台主机上搭建:
主机
软件
网卡
端口
192.168.56.61
bitnami/minio:2022.9.1
mybridge
不对外暴露
bitnami/minio:2022.9.1
mybridge
不对外暴露
bitnami/minio:2022.9.1
mybridge
不对外暴露
bitnami/minio:2022.9.1
mybridge
不对外暴露
nginx:1.23.1
mybridge
80,9000,9001
目录结构
在任意目录下,创建data{1..4}目录,用于保存minio的数据。创建nginx用于添加nginx的配置文件。在nginx1.19版本以后,可以通过映射 /etc/nginx/templats文件,将此目录下的xxx.conf.template文件自动的保存到nginx的配置文件下/etc/nginx/conf.d/,nginx将 templates下的 *.conf.template文件保存到/etc/nginx/conf.d/目录下以后,会删除.template扩展名。
目录截图:
配置文件Docker-compose.yml
此配置文件,用于管理4个minio容器和一个nginx容器。由于bitnami/minio在创建时,会自动创建mc client,这会影响创建的速度,我们可以通过MINIO_SKIP_client将它关闭。关闭后,如果需要使用此功能,可以进入容器自行设置。
配置文件default.conf.template
此配置文件为oss映射配置文件,配置后,web可以通过http://<或名>/oss/<桶名称>/1.png直接访问到到图片,但不能操作minio的文件系统,如上传、创建桶等。
配置文件minio_api.conf.template
此配置文件用于nginx影射9000端口,实现直接通过此端口创建桶、上传等,也用于其他client接口。
配置文件minio_console.conf.template
此配置文件,用于影射9001端口,实现console ui的相关操作。
启动所有容器
# docker compose up -d
启动过程中,可以通过log查看启动日志,如出现以下信息,即表示启动成功,注意最后的 4 online表示4台主机都已经上线并可以使用了。
通过以下启动的容器可以看出,仅nginx对外影射了端口,minio所有端口仅对nginx开放。
可选的,进入任意一台容器,查看集群状态
访问ui
由于只开放了nginx9000端口,而此端口后面,负载均衡了minio{1...4}:9000端口,所以,访问时,如果有宕机的minio也不影响操作,登录之后,可以查看到minio集群的运行状态。
http://192.168.56.61:9001
创建一个桶,并设置访问权限
宕机测试
现在让其中一台minio服务器下线,并继续在console ui上操作,创建桶、上传或下载文件,都可以正常操作。
下线某个minio后查看ui中的offline下线已经为1 servers ,1 drivers。
测试完成后,再重新启动
docker compose start minio1
oss访问测试(通过)
域名访问测试(通过)
JAVAAPI访问(通过)
直接访问nginx的9000端口即后,再不用于自己手写代码实现api接口的负载均衡了。
deepin
另:本人的操作系统为deepin 20(绝对不是给deepin做宣传),deepin是基于debian的linux系统,非常好用。推荐大家尝试。上个图: