Pixiv - KiraraShss
698 字
3 分钟
Docker-Compose 自部署 MinIO S3 对象存储服务
MinIO 是个开源的对象存储服务器,兼容 Amazon S3 API。MinIO 在大数据、云计算和容器化环境中广泛应用,为应用程序提供了可靠、高效的对象存储服务。很多项目都支持 S3 接口,Lobe-Chat、思源笔记、Obsidian 的 Self-hosted LiveSync 插件都能用它做数据同步。因此自部署一个 MinIO 单节点 S3 对象存储服务器,自己用起来也方便许多。

环境准备
先确认有 Docker:
docker -vdocker-compose -v如果没有 Docker 或 Docker Compose,装一下:
# 安装 Dockercurl -sSL https://get.docker.com/ | shsystemctl start dockersystemctl enable docker
# 安装 Docker Composecurl -L https://github.com/docker/compose/releases/download/v2.9.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 赋予 docker-compose 执行权限chmod +x /usr/local/bin/docker-compose部署
创建目录:
mkdir -p /opt/minio/{s3_data,config}cd /opt/miniodocker-compose.yml:
version: "3.5"
services: minio: image: minio/minio:RELEASE.2025-04-22T22-12-26Z container_name: minio restart: always ports: - "9000:9000" # API - "9001:9001" # 控制台 environment: TZ: "Asia/Shanghai" MINIO_ROOT_USER: "admin" # 可以改成你的用户名 MINIO_ROOT_PASSWORD: "your-strong-password" # 换成强密码 MINIO_CORS_ALLOW_ORIGIN: "*" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 10s retries: 5 start_period: 60s volumes: - ./s3_data:/data - ./config:/root/.minio command: "server /data --console-address :9001 --address :9000"启动:
docker-compose up -d等几分钟容器完全启动,浏览器访问控制台:
http://你的服务器IP:9001用你设置的用户名密码登录。
API 地址是:
http://你的服务器IP:9000日常维护
# 停止docker-compose down
# 重启docker-compose restart
# 更新镜像docker-compose pulldocker-compose up -d
# 查看日志docker-compose logs -f minio排查问题
访问不了先检查防火墙:
# Ubuntu/Debiansudo ufw allow 9000/tcpsudo ufw allow 9001/tcp
# CentOS/RHELsudo firewall-cmd --add-port=9000/tcp --permanentsudo firewall-cmd --add-port=9001/tcp --permanentsudo firewall-cmd --reload看端口占用:
netstat -tlnp | grep :9000netstat -tlnp | grep :9001检查容器状态:
docker ps | grep minioNginx 反向代理
准备工作
- 防火墙开放 80 和 443 端口
- 准备两个二级域名, DNS 记录指向你的服务器 IP:
api.your-domain.com→ 你的服务器 IPconsole.your-domain.com→ 你的服务器 IP
配置
Debian/Ubuntu 保存到 /etc/nginx/sites-available/minio,CentOS/RHEL 保存到 /etc/nginx/conf.d/minio.conf:
# APIserver { listen 80; server_name api.your-domain.com; return 301 https://$server_name$request_uri;}
server { listen 443 ssl http2; server_name api.your-domain.com;
ssl_certificate /etc/ssl/certs/your-domain.crt; ssl_certificate_key /etc/ssl/private/your-domain.key;
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options DENY;
location / { proxy_pass http://localhost:9000; 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_connect_timeout 300; proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; }}
# Consoleserver { listen 80; server_name console.your-domain.com; return 301 https://$server_name$request_uri;}
server { listen 443 ssl http2; server_name console.your-domain.com;
ssl_certificate /etc/ssl/certs/your-domain.crt; ssl_certificate_key /etc/ssl/private/your-domain.key;
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options DENY;
location / { proxy_pass http://localhost:9001; 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-Forwarded-Prefix /;
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";
proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; }}申请 SSL 证书
推荐用 Let’s Encrypt:
# Debian/Ubuntusudo apt install certbot python3-certbot-nginxsudo certbot certonly --nginx -d api.your-domain.com -d console.your-domain.com
# CentOS/RHELsudo dnf install certbot python3-certbot-nginxsudo certbot certonly --nginx -d api.your-domain.com -d console.your-domain.com证书在 /etc/letsencrypt/live/your-domain.com/,包含 fullchain.pem 和 privkey.pem。
改 Nginx 配置里的证书路径:
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;测试并重载:
sudo nginx -tsudo systemctl reload nginx现在用 HTTPS 访问:
- API:
https://api.your-domain.com - 控制台:
https://console.your-domain.com
推荐文章
基于标签匹配 · 智能推荐支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
Docker-Compose 自部署 MinIO S3 对象存储服务
https://blog.moewah.com/posts/2877/
喵斯基部落