纯纯整活,过程较复杂,无必须,没必要这么整!
纯纯整活,过程较复杂,无必须,没必要这么整!
纯纯整活,过程较复杂,无必须,没必要这么整!
使用 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 后台
- 访问 https://fnos.net 登录你的 FN NAS
- 进入桌面 → Docker → 容器,找到
minio
- 点击端口映射图标,选择 9001(MinIO 管理后台)
- 注意 URL 结构:四级域名,从右往左为
.net → fnos.net → 你的 FNID → 随机字符串
推测的流量路径:请求先到飞牛网关 → 网关通过三级域名(FNID)路由到你的 NAS → NAS 通过端口映射将流量转发到 Docker 容器 → 容器响应后原路返回。
3. 创建 Bucket 并设置权限
- 登录 MinIO 后台(账号密码即
docker-compose.yml 中设置的 minioadmin / minioadmin)
- 点击 Create Bucket 创建存储桶(可类比 Linux 根目录
/ 或 Windows 的 D:\)
- 上传文件测试
新版 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 获取方式:
- 打开飞牛桌面,按
F12 打开开发者工具
- 切换到 Application(应用) → Storage(存储) → Cookies → 对应网址
- 复制约 4-5 对键值对,保持对应关系
- 发给 AI 生成对应的 Header 格式
注意:Cookie 具有时效性,需定期重新登录获取。建议开启 2FA 提升安全性。
自动化获取 Cookie 的解决方案 → 敬请期待下一期分享。
后续计划
- 通过 AccessKey / SecretKey 实现完整的增删改查(CRUD)
- Cookie 自动刷新机制
- 完整 SDK 集成方案
再次提醒:本方案纯属整活,云 OSS 才是更成熟、更稳定的生产环境解决方案。