使用 MinIO 自建云存储
使用 MinIO 自建云存储
1. MinIO 是什么
- 定位:一款高性能、开源的 对象存储(Object Storage)系统,完全兼容 AWS S3 API。
- 核心目标:提供轻量级、易部署的私有云存储方案,适用于云原生和大数据场景。
- 开源协议:GNU AGPL v3(商业版提供企业级支持)。
- 核心特性
- 高性能:
- 速度优势:支持并行多线程上传/下载,单节点吞吐量可达 10-100 Gbps
- 低延迟: 采用 Golang 编写,优化内存管理,响应时间在毫秒级
- S3 完全兼容
- 无缝迁移:所有 AWS S3 SDK、CLI 工具(如 awscli)可直接对接 MinIO。
- API 支持:覆盖 Put/Get/Object、分片上传、生命周期管理等全部 S3 操作
- 分布式架构
- 纠删码(Erasure Code):数据分片存储,允许节点故障自动恢复(如 4节点容忍2节点失效)。
- 多租户:支持为不同业务创建隔离的存储桶(Bucket)和访问策略。
- 轻量易部署
- 单二进制文件:无需复杂依赖,Docker/Kubernetes 一键部署。
- 资源占用低:单节点运行仅需 ~200MB 内存,适合边缘计算和 IoT 设备。
- 高性能:
- 适用场景
- 私有云存储
- 替代方案:替代阿里云 OSS、AWS S3,实现数据自主可控。
- 用例:企业文档库、备份归档。
- 大数据与 AI
- 兼容性:直接对接 Hadoop HDFS、Spark、TensorFlow 的 S3 接口。
- 用例:训练数据存储、模型版本管理。
- 云原生应用
- Kubernetes 集成:通过 CSI 驱动为容器提供持久化存储。
- 用例:微服务应用的文件共享。
- 边缘计算
- 轻量级:在树莓派等设备上运行,就近处理数据。
- 用例:物联网设备数据采集。
- 私有云存储
2. 部署 MinIO
- 方式一: docker部署
1# 创建存储目录和配置文件 2mkdir -p ~/minio/data ~/minio/config 3 4# 使用 Docker 启动 MinIO(单机版) 5docker run -d \ 6-p 9000:9000 \ # API 端口 7-p 9001:9001 \ # 控制台端口 8-v ~/minio/data:/data \ # 持久化存储 9-v ~/minio/config:/root/.minio \ 10-e "MINIO_ROOT_USER=admin" \ 11-e "MINIO_ROOT_PASSWORD=yourpassword" \ 12--name minio \ 13minio/minio server /data --console-address ":9001" - 方式二: 原生二进制安装(推荐)
下载和安装
1# Linux/macOS 2wget https://dl.min.io/server/minio/release/linux-amd64/minio 3chmod +x minio 4sudo mv minio /usr/local/bin/ 5 6# 创建数据存储目录 7mkdir -p ~/minio/data 8 9# 启动 MinIO(前台运行,默认端口 9000) 10export MINIO_ROOT_USER=admin 11export MINIO_ROOT_PASSWORD=yourpassword 12minio server ~/minio/data \ 13--address ":9002" \ # 自定义 API 端口 14--console-address ":9001" # 自定义控制台端口配置系统服务(可选)
创建 Systemd 服务文件
/etc/systemd/system/minio.service内容如下1[Unit] 2Description=MinIO Object Storage 3After=network.target 4 5[Service] 6User=root 7Group=root 8Environment="MINIO_ROOT_USER=admin" 9Environment="MINIO_ROOT_PASSWORD=yourpassword" 10ExecStart=/usr/local/bin/minio server /path/to/minio/data \ 11--console-address ":9001" 12--address ":9002" 13 14Restart=always 15LimitNOFILE=65536 16 17[Install] 18WantedBy=multi-user.target启动服务
1sudo systemctl daemon-reload 2sudo systemctl enable --now minio 3# 检查状态 4sudo systemctl status minio 5 6# 禁用开机自启:sudo systemctl disable minio
- 访问控制台:http://服务器IP:9001,使用 admin 和 yourpassword 登录。
- 创建存储桶:
- 进入控制台 → Buckets → Create Bucket。
- 输入名称(如 wordpress-media),权限设为 public(或按需配置私有访问)。
3. 配置 HTTPS(可选但推荐)
- 生成自签名证书
1mkdir -p ~/minio/certs 2openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ 3-keyout ~/minio/certs/private.key \ 4-out ~/minio/certs/public.crt \ 5-subj "/C=US/ST=State/L=City/O=Organization/CN=minio.yourdomain.com" - 重启 MinIO 启用 HTTPS
1docker run -d \
2 -p 9000:9000 \
3 -p 9001:9001 \
4 -v ~/minio/data:/data \
5 -v ~/minio/certs:/root/.minio/certs \ # 挂载证书
6 -e "MINIO_ROOT_USER=admin" \
7 -e "MINIO_ROOT_PASSWORD=yourpassword" \
8 --name minio \
9 minio/minio server /data --console-address ":9001"
- 访问 HTTPS 控制台:https://服务器IP:9001(浏览器需信任自签名证书)。
4.WordPress 集成 MinIO
- 安装插件
- 在 WordPress 后台 → 插件 → 安装插件,搜索 “WP Offload Media Lite” 并安装激活。
- 配置插件
- 进入设置:
- WordPress 后台 → 设置 → Offload Media。
- 填写 MinIO 信息:
- Storage Provider: 选择 “Amazon S3”(MinIO 兼容 S3 API)。
- Access Key ID: admin(MinIO 的 root 用户)。
- Secret Access Key: yourpassword。
- Bucket: wordpress-media(提前创建的存储桶名)。
- Endpoint: http://服务器IP:9000(HTTPS 则填 https://域名:9000)。
- Region: 留空或填 us-east-1(MinIO 忽略此字段)。
- 高级设置:
- 勾选 “Enable Path Style Access”(MinIO 必须开启)。
- 设置 “File URL” 为 http://服务器IP:9000/wordpress-media(或自定义域名)。
- 进入设置:
- 测试上传
- 在 WordPress 媒体库上传图片,检查是否自动同步到 MinIO 存储桶:
1ls ~/minio/data/wordpress-media # 查看文件是否生成
5. 优化
- 绑定域名并启用 CDN
- 域名解析:将 media.yourdomain.com 解析到服务器 IP。
- Nginx 反向代理(示例配置):
1server { 2 listen 80; 3 server_name media.yourdomain.com; 4 return 301 https://$host$request_uri; 5} 6 7server { 8 listen 443 ssl; 9 server_name media.yourdomain.com; 10 11 ssl_certificate /etc/letsencrypt/live/media.yourdomain.com/fullchain.pem; 12 ssl_certificate_key /etc/letsencrypt/live/media.yourdomain.com/privkey.pem; 13 14 location / { 15 proxy_pass http://localhost:9000; 16 proxy_set_header Host $host; 17 } 18} - 更新 WordPress 文件 URL:
- 在 WP Offload Media 设置中修改为 https://media.yourdomain.com/wordpress-media。
- 权限控制
- 私有文件访问:
- 在 MinIO 控制台将存储桶设为 private。
- 使用插件生成预签名 URL(需 Pro 版功能)。
- 私有文件访问:
- 监控与备份
- 监控:通过 MinIO 控制台的 Metrics 查看流量和存储。
- 备份:定期压缩 ~/minio/data 目录或使用 mc mirror 命令同步到其他存储。
- 通过 CDN 加速全球访问(如 Cloudflare)。
6. MinIO 的通用兼容性
MinIO 完全兼容 AWS S3 API,因此任何支持 S3 协议的工具、语言或框架均可直接调用。以下是集成方式(php)
使用 MinIO 官方 PHP SDK https://min.io/docs/minio/linux/developers/minio-drivers.html?ref=docs
1composer require minio/minio1<?php 2require 'vendor/autoload.php'; 3 4use Minio\MinioClient; 5 6// 初始化客户端 7$minio = new MinioClient([ 8 'endpoint' => 'minio服务器IP:9000', 9 'accessKey' => 'admin', 10 'secretKey' => 'yourpassword', 11 'useSSL' => false // 如果是 HTTPS 则改为 true 12]); 13 14// 上传文件 15try { 16 $minio->putObject([ 17 'Bucket' => 'wordpress-media', 18 'Key' => 'uploads/test.jpg', 19 'SourceFile' => '/var/www/html/test.jpg', 20 ]); 21 echo "上传成功"; 22} catch (Exception $e) { 23 echo "错误: " . $e->getMessage(); 24}
7. 其他同类工具
- Ceph
- SeaweedFS
- GlusterFS
发表评论