收起左侧

一个使用FN Connect四级域名的MinIO做图床的尝试(上)

0
回复
41
查看
[ 复制链接 ]

2

主题

2

回帖

0

牛值

江湖小虾

纯纯整活,过程较复杂,无必须,没必要这么整!

纯纯整活,过程较复杂,无必须,没必要这么整!

纯纯整活,过程较复杂,无必须,没必要这么整!


使用 FN Connect + MinIO 搭建本地图床

纯纯整活,过程较复杂,如无必要,不建议这么折腾!


适用人群

  • 完全没有公网 IP(如校园网,无公网 IPv4/IPv6)
  • 有一定编程基础(虽然可用 AI 辅助,但建议懂一点)
  • 想"免费"搭建图床、不怕折腾的人
  • 有图床需求(如 SpringBoot + Vue 项目,不想用 MySQL 存图片)
  • 闲得蛋疼的人(lz整了一天 )
  • 伸手党勿扰 — 未来可能会放 GitHub 源码,但不会有懒人包/一键包
  • 单纯整活,有更好的替代方法(如阿里云 OSS、腾讯云 COS 等)

方案思路

作者开发 SpringBoot + Vue 后台管理系统时,经历了以下存储方案的演进:

方案 问题
直接存 MySQL 性能差,不推荐
存本地 + MySQL 存绝对路径 无法迁移,离开本地环境资源丢失
Nginx 反代静态目录 依赖服务器长期开机,安全审计不完备
云服务器 贵,且无法挖掘全部功能
云 OSS(推荐) 免费额度够用,付费也不贵,这是正解
本方案:FN Connect + MinIO 完全本地、狭义免费(不算电费折旧)

核心思路:利用 FN Connect 的四级域名,将本地 MinIO 暴露到公网,作为类 OSS 的图床使用。


技术环境

NAS 端(FnOS)

项目 配置
硬件 Dell R730XD;E5-2680v4 ×2;SK 16G 2R ×4 2133P ×2;DELL 750W 电源;5 块硬盘共 6.5TB;Tesla P4(未使用)
系统 ESXi 8.0 **机;FnOS 1.1.3107 虚拟机(4 核 4 线程 / 2GB 内存 / 1TB 存储)
设置 开启 FN Connect(免费版)+ SSH
软件 Nginx Docker、MinIO Docker、MinIO 客户端 mc、VS Code

笔记本端

项目 配置
硬件 机械革命笔记本
系统 Windows 10
软件 VS Code、PyCharm、MobaXterm、IDEA、WebStorm

折腾过程

1. 部署 MinIO(Docker)

SSH 连接到 NAS,执行以下命令:

# 返回 home 目录
cd ~

# 创建 MinIO 专用目录
mkdir minio && cd minio

# 创建必要子目录
mkdir config data

minio 目录下创建 docker-compose.yml

services:
  minio:
    # 使用 1ms.run 加速镜像,注意保留 docker. 前缀
    image: docker.1ms.run/minio/minio:latest
    container_name: minio
    restart: always
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - ./data:/data
      - ./config:/root/.minio
    environment:
      # 管理员账号(默认参考 minioadmin)
      MINIO_ROOT_USER: minioadmin
      # 管理员密码(默认参考 minioadmin)
      MINIO_ROOT_PASSWORD: minioadmin
      MINIO_REGION_NAME: "cn-east-1"
      TZ: Asia/Shanghai
    command: server /data --console-address ":9001"

启动容器:

docker compose up -d

2. 通过 FN Connect 访问 MinIO 后台

  1. 访问 https://fnos.net 登录你的 FN NAS
  2. 进入桌面 → Docker → 容器,找到 minio
  3. 点击端口映射图标,选择 9001(MinIO 管理后台)
  4. 注意 URL 结构:四级域名,从右往左为 .netfnos.net你的 FNID随机字符串

推测的流量路径:请求先到飞牛网关 → 网关通过三级域名(FNID)路由到你的 NAS → NAS 通过端口映射将流量转发到 Docker 容器 → 容器响应后原路返回。


3. 创建 Bucket 并设置权限

  1. 登录 MinIO 后台(账号密码即 docker-compose.yml 中设置的 minioadmin / minioadmin
  2. 点击 Create Bucket 创建存储桶(可类比 Linux 根目录 / 或 Windows 的 D:\
  3. 上传文件测试

新版 MinIO 网页端无法直接修改权限,需通过 SSH 使用 mc 客户端:

# 下载 mc 客户端
sudo wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc

# 添加执行权限
sudo chmod +x /usr/local/bin/mc

# 关联本地 MinIO 服务(最后两个参数是账号和密码)
mc alias set myminio http://127.0.0.1:9000 minioadmin minioadmin

# 设置桶为只读公开(将 test01 替换为你的桶名)
mc anonymous set download myminio/test01

常用配套命令

# 查看当前桶权限
mc anonymous get myminio/test01

# 关闭公开权限(恢复私有)
mc anonymous set private myminio/test01

刷新 MinIO 后台,确认 private 标识已消失。此时手动上传的图片即可通过 URL 直接访问。


但还是有很多坑:

坑 1:API 端口与管理后台端口不同

图片访问的 URL 不是 MinIO 管理后台(9001)的 URL!

  • 回到飞牛桌面的 Docker 中,选择 9000 端口跳转
  • 9000 端口的四级域名结尾与管理后台不同(如 -0 vs -1
  • 访问格式:https://<随机串>-0.<FNID>.fnos.net/<桶名>/<文件名>

示例

https://xxx-0.FNID.fnos.net/test01/test01.png

坑 2:Cookie 认证问题(疑似安全机制或漏洞)

所有经过 fnos.net 的请求都需要登录飞牛后获取 Cookie,并加到请求 Header 中,否则统一返回 403

Cookie 获取方式

  1. 打开飞牛桌面,按 F12 打开开发者工具
  2. 切换到 Application(应用)Storage(存储)Cookies → 对应网址
  3. 复制约 4-5 对键值对,保持对应关系
  4. 发给 AI 生成对应的 Header 格式

注意:Cookie 具有时效性,需定期重新登录获取。建议开启 2FA 提升安全性。

自动化获取 Cookie 的解决方案 → 敬请期待下一期分享。


后续计划

  • 通过 AccessKey / SecretKey 实现完整的增删改查(CRUD)
  • Cookie 自动刷新机制
  • 完整 SDK 集成方案

再次提醒:本方案纯属整活,云 OSS 才是更成熟、更稳定的生产环境解决方案。

收藏
送赞 1
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则