切换主题
在 lidong 上使用 Docker 部署 MinIO 个人图床完全指南
前言
MinIO 是一种开源的大型、高性能、分布式对象存储服务,可以作为个人网盘、图床的通用基座。需要注意的是,MinIO 虽然有着非常好的优化,但如果只是作为个人图床使用,我们更推荐 Lsky 这类的轻量图床应用。
适用环境
本教程适用于 Debian 12 系统,其他 Linux 发行版可能需要调整部分命令。
准备工作
服务器要求
- 一台可通过 SSH 管理的 Debian 12 服务器。
- 足够存放图片与对象数据的磁盘空间。
- 已解析到服务器的域名;若只在内网使用可暂不配置。
- 执行安装前,请先备份服务器上的重要数据。
安装 Docker
提示
如果已安装 Docker,则可以跳过这一步,您可以使用 docker -v命令检查是否已安装。
Debian 12 系统可直接复制以下命令安装 docker、docker-compose,其它系统请参见 Docker 官方文档。
安装 Docker CE 和 Docker Compose
bash
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
sudo apt-get update
sudo apt-get install ca-certificates curl -y
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -yDocker 安装 MinIO
首先创建并进入安装目录,再编辑 docker-compose.yaml。以下示例使用 /root/minio:
bash
mkdir -p /root/minio
cd /root/minio
vim docker-compose.yaml将以下内容输入后,按下 esc :x 保存,输入 docker compose up -d 启动
docker-compose.yaml
yaml
services:
minio:
container_name: minio
image: quay.io/minio/minio
restart: always
volumes:
- ./data:/data
environment:
- TZ=Asia/Shanghai
- MINIO_BROWSER_REDIRECT_URL=https://minio.yourdomain/minio/ui # 请在这里输入你的域名
- MINIO_SERVER_URL=https://minio.yourdomain # 请在这里输入你的域名
- MINIO_ROOT_USER=user # 请在这里输入你的用户名
- MINIO_ROOT_PASSWORD=password # 请在这里输入你的密码
ports:
- "9001:9000"
- "9091:9090"
command: server /data --console-address ":9090"安全提示
请务必修改默认的用户名和密码,使用强密码增强安全性。同时确保将 yourdomain 替换为你实际使用的域名。
配置反向代理和 Cloudflare 加速
确认可通过 IP:端口号 访问 MinIO 管理面板后,建议增加反向代理、HTTPS 与访问控制。本节以 Nginx Proxy Manager 和 Cloudflare 代理为例。
准备一个已解析到服务器的域名,并在 Cloudflare 中开启代理状态。

Cloudflare 代理说明
开启 Cloudflare 代理后,请根据对象存储场景配置缓存与请求规则。
由于 Cloudflare 代理会修改请求头,导致 MinIO 的鉴权出现问题,并且缓存对象存储违反了 Cloudflare 的用户协议,我们需要关闭该子域名的缓存。

在 缓存 - Cache Rules 下创建一条新的规则如下

进入 Nginx Proxy Manager 管理面板,并按下图配置代理主机。
重要提示
MinIO 对反向代理的请求头与路径配置较为敏感。本文采用“开启 Cloudflare 代理并绕过对象缓存”的方案;调整代理方式后,请重新验证上传、下载与签名 URL。


点设置按钮,填入以下信息:
nginx 配置
bash
location /minio/ui/ {
rewrite ^/minio/ui/(.*) /$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_buffering off;
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;
proxy_pass http://172.17.0.1:9091;
}
SSL 必要性
务必开启 SSL。
配置 MinIO 存储桶
现在你应该可以访问 https://minio.yourdomain/minio/ui,输入你在 docker-compose.yaml 中填写的用户名和密码登录到 MinIO 的后台。
点击 Create a Bucket 创建一个新的存储桶。

这里以 img 为例,下面三个选项一般无需勾选。

创建好桶后第一步是配置权限,首先将匿名用户的对根路径的权限设为 read only。

刷新页面后,手动调整关闭匿名用户的 s3:ListBucket 权限,避免被刷目录,删除红框中标记的行,及上一行结尾的逗号,并保存。

权限说明
关闭 s3:ListBucket权限是为了防止他人浏览你的存储桶中的所有文件,这是一个重要的安全措施。
现在,你可以点击右上角的文件夹图标,进入 img 存储桶的根目录,上传一张照片,并测试他的预览和加载功能是否正常。

同时,开启一个浏览器的匿名窗口,使用以下格式的直链测试外部访问,请注意将域名和路径替换为你自己的。

如果能够正常打开,恭喜你,你的图床已经可用了。
PicGo 连接图床上传图片
PicGo 可通过插件连接 MinIO。先为存储桶创建独立的最小权限密钥;Secret Key 只会显示一次,请保存到密码管理器,且不要截图或提交到仓库。
同时,你还要为 PicGo 安装一个插件。

接下来配置插件:填写自己的 Endpoint、Access Key 与 Secret Key,将端口设为 443,并启用 useSSL。
bucket 是你存储桶的名称,基础目录 可任意填写,自定义域名 建议手动填写,否则图片链接会添加 443 端口,不太美观,归档 建议开启。
在 上传区 将默认图床修改为 MinIO图床,拖动并上传文件测试。

测试图床

图片可以正常加载,至此为止,搭建完成。
MinIO 的其他用途
- 个人网盘系统
- 网站静态资源存储
- 应用程序的对象存储后端
- 备份存储解决方案
你可以根据自己的需求进一步探索 MinIO 的高级功能。