增加自定义 Docker APP 支持
背景现状
当前 fn-nas 已支持通过 Docker 部署自定义软件服务,但存在以下问题:
- **新增的 Docker 服务无法在 NAS 界面显示。**用户自行运行的容器不会自动生成 NAS 应用入口或图标。
- 无法通过 fnconnect 进行访问转发。
手动部署的容器无法自动映射至 NAS 的统一访问入口或子域名。
这使得自建 Docker 服务的体验与系统内置 APP 存在较大差异。
期望功能
参考 Traefik、Homepage、Tinyauth 等项目,通过 Docker Label 机制,让容器自动与 NAS 管理界面及 fnconnect 系统集成。
目标实现
- 通过标准化的 Docker Label:
- NAS 界面可自动识别并显示相应 APP 图标与入口;
- fnconnect 自动配置内网与外网的访问转发;
- 用户可灵活控制哪些服务在 NAS 界面展示。
Label 设计建议
示例:MinIO 管理端
MinIO 是一个常用的对象存储服务,包含两个端口:
- 9000:对象存储访问接口(API / 用户端)
- 9001:管理控制台(Web 管理端)
以下示例展示如何让 MinIO 管理端(9001) 通过 fn-nas 自动集成:
labels:
- "fn.enable=true"
- "fn.minio-admin.icon=https://min.io/resources/img/logo.svg"
- "fn.minio-admin.port=9001"
- "fn.minio-admin.subdomain=minio-admin"
行为说明
Label |
说明 |
fn.enable=true |
控制是否在 NAS 界面中显示该容器的应用入口。对于纯后台服务(如数据库等),可省略或设为 false 。 |
fn.<name>.icon |
指定该应用在 NAS 界面的图标。 |
fn.<name>.port |
指定该应用在容器中的监听端口。 |
fn.<name>.subdomain |
指定 fnconnect 外网访问子域名。 |
访问行为
环境 |
访问路径 |
说明 |
局域网内 |
http://<NAS_IP>:9001 |
使用局域网IP+监听端口号(fn.<name>.port )。 |
外网(通过 fnconnect) |
https://minio-admin.<fnconnect_url> |
生成子域名转发入口,映射到容器服务。 |
功能优势
- ✅ 统一的 Docker APP 构建规范提供通用的 Label 标准,方便社区用户构建可识别的 fn-nas 应用。
- 🌐 自动集成与访问转发无需手动配置反向代理或入口,NAS 自动识别并生成访问入口与子域名。
- ⚙️ 灵活控制显示通过
fn.enable
控制哪些容器显示在 NAS 界面,满足多种场景(后台、前端、工具类服务)。
- 🧩 社区生态扩展
用户与开发者可共享基于 Docker 的 APP,实现生态快速增长。
高级功能建议
1. Auth Middleware
为 Docker Web 应用提供简单的访问控制:
labels:
- "fn.auth.enabled=true"
当启用该参数时:
- 系统自动在访问入口前添加统一鉴权;
- 可与 NAS 用户体系集成;
- 为无鉴权的 Docker Web 服务提供安全访问保护。
2. 多 Web 界面支持
部分应用(如 MinIO)同时提供多个 Web 界面:
未来可考虑通过扩展 Label 结构来支持多入口显示,例如:
labels:
- "fn.enable=true"
- "fn.minio-user.port=9000"
- "fn.minio-admin.port=9001"
NAS 界面可在应用图标下展示多个入口按钮,以区分不同功能界面。
总结
通过引入基于 Docker Label 的自定义 APP 注册机制,fn-nas 将实现:
- 自定义 Docker 应用自动显示在 NAS 界面;
- 内外网统一访问入口(fnconnect 自动转发);
- 灵活显示控制与潜在多入口扩展;
- 可选的统一认证保护;
- 促进社区贡献更多 Docker 应用,增强系统可扩展性。