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

温馨提示

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

本文已通过 VPS.Town 社区文章投稿及奖励规则 (试行稿) 审核,并获得 现金 50 元 奖励。

📖 本文目录

前言

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

适用环境

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

准备工作

购买 VPS

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

无 AFF 购买链接:点我一键直达

安装 Docker

提示

如果已安装 Docker,则可以跳过这一步,您可以使用 docker -v命令检查是否已安装。

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

安装 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

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

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

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"
安全提示

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

配置反向代理和 Cloudflare 加速

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

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

小黄云说明

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

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

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

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

重要提醒

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

点设置按钮,填入以下信息:

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;
   }

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 是一个非常实用的 Markdown 图片上传软件,为了能够连接你搭建的 MinIO 图床,你需要为存储桶配置密钥,密钥在创建后只会显示一次,请妥善保存

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

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

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

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

测试图床

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

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

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