# MinIO 安装与使用指南
macOS 环境 | Homebrew | 2026-04-24
# 一、安装步骤
# 1. 安装 MinIO Server
# 安装 MinIO
brew install minio
# 安装 MinIO 客户端
brew install minio-mc
# 2. 启动服务
# 作为 brew 服务启动(推荐,开机自启)
brew services start minio
# 查看服务状态
brew services list | grep minio
# 查看日志
brew services logs minio
# 3. 验证安装
# 检查端口
lsof -i :9000
# 健康检查
curl http://localhost:9000/minio/health/live
# 配置 mc 别名
mc alias set local http://localhost:9000 minioadmin minioadmin
# 查看集群信息
mc admin info local
# 4. 当前配置
| 参数 | 值 |
|---|---|
| ------ | ----- |
| 版本 | 2025-10-15T17-29-55Z |
| API 端口 | 9000 |
| 控制台 | http://localhost:9000 |
| 数据目录 | /opt/homebrew/var/minio |
| 配置目录 | /opt/homebrew/etc/minio |
| 默认账号 | minioadmin |
| 默认密码 | minioadmin |
# 二、服务管理
# 1. 常用命令
# 启动
brew services start minio
# 停止
brew services stop minio
# 重启
brew services restart minio
# 查看状态
brew services list | grep minio
# 卸载
brew services stop minio
brew uninstall minio
# 2. 手动启动(非服务方式)
/opt/homebrew/opt/minio/bin/minio server \
--certs-dir=/opt/homebrew/etc/minio/certs \
--address=:9000 \
/opt/homebrew/var/minio
# 3. 修改端口
编辑 plist 文件:
# 停止服务
brew services stop minio
# 编辑配置
nano ~/Library/LaunchAgents/homebrew.mxcl.minio.plist
# 修改 --address=:9000 为其他端口
# 重启服务
brew services start minio
# 三、安全配置
# 1. 修改默认凭证
方法一:环境变量(推荐)
编辑 ~/Library/LaunchAgents/homebrew.mxcl.minio.plist,在 <array> 中添加:
<key>EnvironmentVariables</key>
<dict>
<key>MINIO_ROOT_USER</key>
<string>your-access-key</string>
<key>MINIO_ROOT_PASSWORD</key>
<string>your-secret-key</string>
</dict>
方法二:启动时指定
MINIO_ROOT_USER=myadmin MINIO_ROOT_PASSWORD=MyStrongPassword123! \
minio server /opt/homebrew/var/minio --address=:9000
# 2. 密码要求
- Access Key: 最少 3 个字符
- Secret Key: 最少 8 个字符
# 四、mc 客户端使用
# 1. 配置别名
# 添加本地 MinIO
mc alias set local http://localhost:9000 minioadmin minioadmin
# 添加远程 MinIO
mc alias set production https://minio.example.com access-key secret-key
# 查看别名列表
mc alias list
# 删除别名
mc alias remove production
# 2. Bucket 操作
# 创建 Bucket
mc mb local/my-bucket
# 列出所有 Bucket
mc ls local
# 删除 Bucket(必须为空)
mc rb local/my-bucket
# 强制删除(包含内容)
mc rb --force local/my-bucket
# 设置 Bucket 访问策略
mc anonymous set public local/my-bucket
mc anonymous set download local/my-bucket
mc anonymous set private local/my-bucket
# 查看 Bucket 策略
mc anonymous get local/my-bucket
# 3. 文件操作
# 上传文件
mc cp ./myfile.txt local/my-bucket/
# 上传目录
mc cp --recursive ./mydir/ local/my-bucket/
# 下载文件
mc cp local/my-bucket/myfile.txt ./
# 下载目录
mc cp --recursive local/my-bucket/ ./mydir/
# 列出文件
mc ls local/my-bucket/
# 列出文件(递归)
mc ls --recursive local/my-bucket/
# 删除文件
mc rm local/my-bucket/myfile.txt
# 删除目录
mc rm --recursive local/my-bucket/mydir/
# 复制文件
mc cp local/my-bucket/file.txt local/other-bucket/
# 移动文件
mc mv local/my-bucket/file.txt local/other-bucket/
# 查看文件信息
mc stat local/my-bucket/myfile.txt
# 查找文件
mc find local/my-bucket/ --name "*.jpg"
# 4. 文件同步
# 同步目录(只复制新/更新的文件)
mc mirror ./local-dir local/my-bucket/
# 同步后删除目标多余文件
mc mirror --remove ./local-dir local/my-bucket/
# 查看同步差异
mc mirror --diff ./local-dir local/my-bucket/
# 五、存储桶策略
# 1. 读写策略
# 公开读写
mc anonymous set public local/my-bucket
# 只读
mc anonymous set download local/my-bucket
# 只写
mc anonymous set upload local/my-bucket
# 私有
mc anonymous set private local/my-bucket
# 2. JSON 策略(高级)
创建 policy.json:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS": ["*"]},
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::my-bucket/*.jpg"]
}
]
}
应用策略:
mc anonymous set-json policy.json local/my-bucket
# 六、用户与权限管理
# 1. 创建用户
# 创建用户
mc admin user add local myuser MyPassword123!
# 列出用户
mc admin user list local
# 查看用户信息
mc admin user info local myuser
# 禁用用户
mc admin user disable local myuser
# 启用用户
mc admin user enable local myuser
# 删除用户
mc admin user remove local myuser
# 2. 创建策略
创建 readwrite.json:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::my-bucket/*"]
}
]
}
# 创建策略
mc admin policy create local readwrite readwrite.json
# 列出策略
mc admin policy list local
# 查看策略
mc admin policy info local readwrite
# 删除策略
mc admin policy remove local readwrite
# 3. 绑定策略到用户
# 绑定策略
mc admin policy set local readwrite user=myuser
# 查看用户策略
mc admin policy info local readwrite
# 解绑策略
mc admin policy unset local readwrite user=myuser
# 七、与 Spring Boot 集成
# 1. 依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.7</version>
</dependency>
# 2. 配置
# application.yml
minio:
endpoint: http://localhost:9000
access-key: minioadmin
secret-key: minioadmin
bucket: my-bucket
# 3. Java 配置类
@Configuration
public class MinioConfig {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.access-key}")
private String accessKey;
@Value("${minio.secret-key}")
private String secretKey;
@Bean
public MinioClient minioClient() {
return MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
}
}
# 4. 文件上传/下载
@Service
public class MinioService {
@Autowired
private MinioClient minioClient;
@Value("${minio.bucket}")
private String bucket;
// 上传文件
public String upload(MultipartFile file) throws Exception {
String objectName = UUID.randomUUID().toString() +
"_" + file.getOriginalFilename();
minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucket)
.object(objectName)
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(file.getContentType())
.build()
);
return objectName;
}
// 下载文件
public InputStream download(String objectName) throws Exception {
return minioClient.getObject(
GetObjectArgs.builder()
.bucket(bucket)
.object(objectName)
.build()
);
}
// 删除文件
public void delete(String objectName) throws Exception {
minioClient.removeObject(
RemoveObjectArgs.builder()
.bucket(bucket)
.object(objectName)
.build()
);
}
// 获取预签名 URL(临时访问链接)
public String getPresignedUrl(String objectName, int expiry) throws Exception {
return minioClient.getPresignedObjectUrl(
GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(bucket)
.object(objectName)
.expiry(expiry, TimeUnit.SECONDS)
.build()
);
}
}
# 八、Docker 方式部署
# 1. 单机运行
docker run -d \
--name minio \
-p 9000:9000 \
-p 9001:9001 \
-e MINIO_ROOT_USER=minioadmin \
-e MINIO_ROOT_PASSWORD=minioadmin \
-v /data/minio:/data \
minio/minio server /data --console-address ":9001"
# 2. Docker Compose
# docker-compose.yml
version: '3.8'
services:
minio:
image: minio/minio:latest
container_name: minio
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
volumes:
- ./data:/data
command: server /data --console-address ":9001"
restart: always
# 启动
docker compose up -d
# 停止
docker compose down
# 九、常见问题
# 1. 默认凭证无法登录
# 检查凭证
mc admin info local
# 重新配置别名
mc alias remove local
mc alias set local http://localhost:9000 minioadmin minioadmin
# 2. 端口被占用
# 查看端口占用
lsof -i :9000
# 修改端口(编辑 plist)
brew services stop minio
# 编辑 ~/Library/LaunchAgents/homebrew.mxcl.minio.plist
brew services start minio
# 3. 数据目录权限
# 检查权限
ls -la /opt/homebrew/var/minio
# 修复权限
sudo chown -R $(whoami) /opt/homebrew/var/minio
# 4. 日志查看
# brew 服务日志
brew services logs minio
# 查看最近 100 行
brew services logs minio --tail=100
# 十、性能优化
# 1. 擦除码设置
# 默认擦除码
export MINIO_ERASURE_SET_DRIVE_COUNT=4
# 2. 缓存配置
export MINIO_CACHE_DRIVES="/data1/cache,/data2/cache"
export MINIO_CACHE_EXCLUDE="*.pdf,*.zip"
export MINIO_CACHE_AFTER=3
export MINIO_CACHE_WATERMARK_LOW=75
export MINIO_CACHE_WATERMARK_HIGH=90
# 3. 压缩配置
export MINIO_COMPRESS_MIME_TYPES="application/json,text/xml,text/plain"
export MINIO_COMPRESS_EXTENSIONS=".xml,.json,.txt"
# 十一、监控与健康检查
# 1. 健康检查
# 存活检查
curl http://localhost:9000/minio/health/live
# 就绪检查
curl http://localhost:9000/minio/health/ready
# 集群健康
curl http://localhost:9000/minio/health/cluster
# 2. 指标监控
# Prometheus 指标
curl http://localhost:9000/minio/v2/metrics/cluster
# 节点指标
curl http://localhost:9000/minio/v2/metrics/node
⚠️ 安全提示: 1. 生产环境务必修改默认凭证 2. 使用 HTTPS(配置 TLS 证书) 3. 定期备份数据目录 4. 限制网络访问(防火墙/安全组) 5. 启用审计日志