参考资料
Docker部署: https://hub.docker.com/r/minio/minio
Java官方教程: https://min.io/docs/minio/linux/developers/java/minio-java.html
其他语言访问教程: https://min.io/docs/minio/linux/developers/minio-drivers.html?ref=docs
Minio Nginx转发配置:https://min.io/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html
Minio 可视化控制台配置:https://min.io/docs/minio/linux/administration/minio-console.html
遇到的坑
Minio的API接口,不能使用Nginx二级目录转发(只能配置转发控制台的9001端口)
这里使用Java代码访问,如图直接报错地址格式错误。

docker部署
命令行部署
docker run -p 9000:9000 -p 9001:9001 --name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=admin" \
-e "MINIO_SECRET_KEY=admin" \
# 如果要配置Nginx二级域名转发,必须要写清楚Minio控制台域名路径。
-e "MINIO_BROWSER_REDIRECT_URL=https://domain.com/minio/" \
-v /data/minio/data:/data \
-v /data/minio/config:/root/.minio \
minio/minio:RELEASE.2023-11-01T18-37-25Z.fips \
server /data --console-address ":9090"
docker-compose.yml文件部署
docker-compose -f .\docker-compose.yml up -d
version : '3.8'
services:
minio:
container_name: minio
image: minio/minio:RELEASE.2023-11-01T18-37-25Z.fips
ports:
- "9000:9000"
- "9001:9001"
environment:
- MINIO_ACCESS_KEY=admin
- MINIO_SECRET_KEY=admin
# 如果要配置Nginx二级域名转发,必须要写清楚Minio控制台域名路径。
- MINIO_BROWSER_REDIRECT_URL=https://domain.com/minio/
volumes:
- ./minio/data:/data
- ./minio/config:/root/.minio
command: server /data --console-address ":9001"
9000和9001端口作用
9000: 提供API访问
9001: 提供可视化页面使用
Minio控制台,可视化界面访问
- 访问
http://IP:9001。 - 创建Access Key提供API进行访问。

配置Nginx转发可视化界面
# 需要转发的二级目录
location /minio/ {
rewrite ^/minio/(.*) /$1 break;
proxy_set_header Host $http_host;
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 X-NginX-Proxy true;
# This is necessary to pass the correct IP to be hashed
real_ip_header X-Real-IP;
proxy_connect_timeout 300;
# To support websockets in MinIO versions released after January 2023
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)
# Uncomment the following line to set the Origin request to an empty string
# proxy_set_header Origin '';
chunked_transfer_encoding off;
# 对应的docker容器名称与域名
proxy_pass http://minio:9001;
}
代码访问
Java代码访问
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import io.minio.errors.*;
import org.testng.annotations.Test;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class MinioTest {
@Test()
public void test2() throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
// 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
MinioClient minioClient = MinioClient.builder()
.endpoint("http://ip:9000")
// 这里写之前可视化页面创建的 Access Key
.credentials("wrYc3jGugGwhJn8sOkdK",
"8mByhjkpOmP1LC0NLyN8Yccvohwdd7E9kb4gGeDs")
.build();
// 如果桶不存在就新建
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("asiatrip").build());
if (!found) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket("asiatrip").build());
} else {
System.out.println("'asiatrip桶已存在");
}
// 上传文件
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket("asiatrip")
.object("test.zip")
.filename("D:\\下载\\test.zip")
.build());
System.out.println("上传成功");
}
}