> For AI agents: the complete documentation index is available at https://docs.vps.town/llms.txt, the full documentation bundle is available at https://docs.vps.town/llms-full.txt.

# 在 VPS.Town 上使用 Docker 部署 MinIO 个人图床完全指南

:::tip 温馨提示

本文由用户 `听风` 撰写，并已加入 `VPS.Town 优秀原创文章激励计划`，本站享有完整版权，未经允许不得转载。

本文已通过 [VPS.Town 社区文章投稿及奖励规则 (试行稿)](https://docs.vps.town/kb/community.md) 审核，并获得 `现金 50 元` 奖励。

:::

:::details 📖 本文目录

[](#前言)[](#准备工作)[](#购买-vps)[](#安装-docker)[](#docker-安装-minio)[](#配置反向代理和-cloudflare-加速)[](#配置-minio-存储桶)[](#picgo-连接图床上传图片)[](#测试图床)
:::

## 前言

MinIO 是一种开源的大型、高性能、分布式对象存储服务，可以作为个人网盘、图床的通用基座。需要注意的是，MinIO 虽然有着非常好的优化，但如果只是作为个人图床使用，我们更推荐 Lsky 这类的轻量图床应用。

:::tip 适用环境
本教程适用于 Debian 12 系统，其他 Linux 发行版可能需要调整部分命令。
:::

## 准备工作

### 购买 VPS

:::tip 🖼️ VPS.Town & MiniIO + PicGo 图床解决方案

1. 最多可提供高达 **8TB 大容量存储** 的选项，随时随地为您的图床安个新家；
2. 同时提供 **SSD & HDD** 混合方案，读写速度更快、上传图片更稳定；
3. 完善的 7/12 售后保障，支持随时灵活升级配置、支持 7 天内有理由退款；
4. 可在香港抗下 DMCA 版权投诉，分享图床更安全；
5. 服务器位于香港，距离大陆近，对于移动用户更加友好

无 AFF 购买链接：[点我一键直达](https://vps.town/cart/goodsList.htm?fid=3\&gid=1)

:::

### 安装 Docker

:::info 提示
如果已安装 Docker，则可以跳过这一步，您可以使用 `docker -v` 命令检查是否已安装。
:::

Debian 12 系统可直接复制以下命令安装 docker、docker-compose，其它系统请参见 Docker 官方文档。

```bash title="安装 Docker CE 和 Docker Compose"
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 -y
```

## Docker 安装 MinIO

首先创建并进入你的安装目录，编辑 docker-compose.yaml，这里我的目录是 `/root/minio`

```bash
mkdir -p /root/minio
cd /root/minio
vim docker-compose.yaml
```

将以下内容输入后，按下 `esc` `:x` 保存，输入 `docker compose up -d` 启动

```yaml title="docker-compose.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"
```

:::warning 安全提示
请务必修改默认的用户名和密码，使用强密码增强安全性。同时确保将 yourdomain 替换为你实际使用的域名。
:::

## 配置反向代理和 Cloudflare 加速

不出意外的话，你已经可以通过 `ip:端口号` 的方式访问 MinIO 的管理面板了，但考虑到存储服务的公开性，我强烈建议开启反向代理并启用 Cloudflare 加速，这里我使用 nginx proxy manager 配置反向代理，npm 的具体安装方式请参照官方文档。

配置 nginx 你首先需要一个域名，以 Cloudflare 为例，添加如下的 DNS 解析，**注意开启小黄云**。

![Cloudflare 添加 DNS 解析](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413202218082.png)

:::info 小黄云说明
Cloudflare 的"小黄云"是指开启了 Cloudflare 代理服务，它能为你的服务提供额外的安全防护和性能优化。
:::

由于 Cloudflare 代理会修改请求头，导致 MinIO 的鉴权出现问题，并且缓存对象存储违反了 Cloudflare 的用户协议，我们需要关闭该子域名的缓存。

![Cloudflare 关闭子域名缓存](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413202521077.png)

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

![Cloudflare 创建缓存规则](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413203005683.png)

现在，我们进入 npm 的管理面板进行配置，请尽量按照我的配置方式，避免不必要的折腾。

:::danger 重要提醒
由于 MinIO 同 nginx 的适配非常烂，如果要关闭小黄云可能需要另外的 nginx 配置。所以建议 `开启小黄云+绕过缓存`。
:::

![npm 反向代理配置界面](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413233600362.png)

![npm 反向代理配置续](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413233648402.png)

点设置按钮，填入以下信息：

```bash title="nginx 配置"
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;
   }
```

![npm 反向代理 SSL 配置](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413233750641.png)

:::warning SSL 必要性
务必开启 SSL。
:::

## 配置 MinIO 存储桶

现在你应该可以访问 `https://minio.yourdomain/minio/ui`，输入你在 docker-compose.yaml 中填写的用户名和密码登录到 MinIO 的后台。

点击 `Create a Bucket` 创建一个新的存储桶。

![MinIO 点击 Create a Bucket](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413204745325.png)

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

![MinIO 创建 img 存储桶](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413204913593.png)

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

![匿名用户权限设为只读](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413205059650.png)

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

![删除 s3:ListBucket 权限](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413205326303.png)

:::note 权限说明
关闭 `s3:ListBucket` 权限是为了防止他人浏览你的存储桶中的所有文件，这是一个重要的安全措施。
:::

现在，你可以点击右上角的文件夹图标，进入 `img` 存储桶的根目录，上传一张照片，并测试他的预览和加载功能是否正常。

![img 存储桶上传测试图片](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413205916965.png)

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

![匿名窗口测试图片直链](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413210054959.png)

如果能够正常打开，恭喜你，你的图床已经可用了。

## PicGo 连接图床上传图片

PicGo 是一个非常实用的 Markdown 图片上传软件，为了能够连接你搭建的 MinIO 图床，你需要为存储桶配置密钥，密钥在创建后**只会显示一次，请妥善保存**。

![MinIO 为存储桶创建密钥](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413210715130.png)

同时，你还要为 PicGo 安装一个插件。

![PicGo 安装 MinIO 插件](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413210835177.png)

接下来配置这个插件。注意将端口设为 `443` 并勾选 `useSSL`

![PicGo 插件端口与 SSL 设置](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413211019552.png)

`bucket` 是你存储桶的名称，`基础目录` 可任意填写，`自定义域名` 建议手动填写，否则图片链接会添加 443 端口，不太美观，`归档` 建议开启。

![PicGo 存储桶与域名配置](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413211222401.png)

在 `上传区` 将默认图床修改为 `MinIO图床`，拖动并上传文件测试。

![PicGo 上传区测试上传](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413211529002.png)

## 测试图床

![图床图片正常加载](/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413233425534.png)

图片可以正常加载，至此为止，搭建完成。

:::details MinIO 的其他用途
除了作为图床使用外，MinIO 还可以用作：

- 个人网盘系统
- 网站静态资源存储
- 应用程序的对象存储后端
- 备份存储解决方案

你可以根据自己的需求进一步探索 MinIO 的高级功能。
:::
