香港服务器搭建Minio对象存储:替代七牛/阿里云OSS的私有化方案
为什么要自建对象存储?
七牛、阿里云 OSS、腾讯 COS 这类公有云对象存储有三个明显痛点:按流量计费难以预估成本、数据托管在第三方存在隐私风险、海外访问速度不稳定。对于有一定规模的业务,在香港服务器自建 Minio,一次性投入,数据完全自主,流量成本可控。
Minio 是 S3 兼容的开源对象存储,支持 AWS SDK 直接接入,迁移成本极低。
一、用 Docker 部署 Minio(推荐方式)
# 创建数据目录
mkdir -p ~/minio/data
# 运行 Minio 容器
docker run -d \
--name minio \
-p 9000:9000 \
-p 9001:9001 \
-v ~/minio/data:/data \
-e "MINIO_ROOT_USER=your_admin_user" \
-e "MINIO_ROOT_PASSWORD=StrongPassword123!" \
--restart unless-stopped \
quay.io/minio/minio server /data --console-address ":9001"参数说明:
9000 是 API 端口(应用上传下载文件用),9001 是 Web 控制台端口。
二、配置 Nginx 反向代理
sudo nano /etc/nginx/sites-available/minio# Minio API 端口
server {
listen 80;
server_name storage.your-domain.com;
# 忽略客户端请求体大小限制(允许上传大文件)
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_http_version 1.1;
proxy_set_header Host $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_buffering off;
proxy_request_buffering off;
}
}
# Minio 控制台
server {
listen 80;
server_name minio-console.your-domain.com;
location / {
proxy_pass http://127.0.0.1:9001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}sudo ln -s /etc/nginx/sites-available/minio /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
# 申请 SSL 证书
sudo certbot --nginx -d storage.your-domain.com -d minio-console.your-domain.com三、防火墙配置
# 不直接对外暴露 9000/9001 端口,通过 Nginx 80/443 访问
# 确保这两个端口没有开放到公网
sudo ufw deny 9000
sudo ufw deny 9001四、创建 Bucket 和访问密钥
访问 https://minio-console.your-domain.com,用管理员账号登录控制台:
- Buckets → Create Bucket,填写 bucket 名称(如
myapp-uploads) - Access Keys → Create Access Key,生成应用专用的 Access Key 和 Secret Key
- 根据需要设置 Bucket 访问策略(公开读 / 私有读写)
五、与 WordPress 集成
安装 WP Offload Media Lite 插件,将 WordPress 媒体文件自动上传到 Minio:
- 插件设置中选择"Amazon S3 Compatible"
- 填入 Minio 的 Endpoint:
https://storage.your-domain.com - 填入 Access Key 和 Secret Key
- 选择对应的 Bucket
- 开启"从 S3 提供文件",WordPress 上传的图片将直接通过 Minio 提供
六、与 Python / Node.js 应用集成
Minio 完全兼容 AWS S3 SDK,只需修改 endpoint 即可:
# Python(boto3)
import boto3
s3 = boto3.client(
's3',
endpoint_url='https://storage.your-domain.com',
aws_access_key_id='your_access_key',
aws_secret_access_key='your_secret_key',
)
# 上传文件
s3.upload_file('local_file.jpg', 'myapp-uploads', 'remote/path/file.jpg')
# 生成预签名下载链接(有效期1小时)
url = s3.generate_presigned_url('get_object',
Params={'Bucket': 'myapp-uploads', 'Key': 'remote/path/file.jpg'},
ExpiresIn=3600
)// Node.js(@aws-sdk/client-s3)
const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3");
const s3 = new S3Client({
endpoint: "https://storage.your-domain.com",
region: "us-east-1", // Minio 需要填写但不使用,任意值即可
credentials: {
accessKeyId: "your_access_key",
secretAccessKey: "your_secret_key",
},
forcePathStyle: true, // Minio 必须开启 path-style
});总结
Minio 私有化对象存储的核心优势:S3 完全兼容(现有代码几乎零改动)、数据完全自主、流量费用可控、香港节点访问速度稳定。部署完成后,可以替代七牛、阿里云 OSS 用于图片存储、文件上传、静态资源分发等场景。
自建 Minio 需要足够的存储空间,IDC.Net 香港独立服务器提供大容量 SSD 配置,月付 299 元起,CN2 GIA 直连大陆,文件上传下载速度快,支付宝 / USDT 付款,免 KYC 实名。
版权声明:
作者:后浪云
链接:https://idc.net/help/442564/
文章版权归作者所有,未经允许请勿转载。
THE END
