# NasPilot **Repository Path**: y6214880/naspilot ## Basic Information - **Project Name**: NasPilot - **Description**: 一个给自建 NAS 准备的启动台:自动收敛 Docker 容器、扫描宿主机端口,所有服务收进一个页面。零依赖、约 50MB 内存,支持飞牛、群晖、威联通。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-11-03 - **Last Updated**: 2026-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: NAS, Docker, self-hosted, homepage, navigation ## README # NasPilot 一个给自建 NAS / 自建服务准备的启动台。装了一堆容器之后,不用再记一堆 `IP:端口`——它自动收敛 Docker 容器、扫出宿主机端口,把所有服务收进一个页面,点一下就能打开,谁在跑一眼看清。 ![输入图片说明](image.png) ## 功能 - **入口聚合**:分组管理、拖拽排序(手机长按拖)、置顶、隐藏、搜索(`Ctrl/⌘+K`),支持为每个入口填标签/别名一起搜 - **Docker 联动**:自动读取容器列表、状态、端口映射,面板直接启停/重启容器,新装自动出现、删除标记「已移除」 - **端口发现**:扫宿主机监听端口,自动探测可打开的 Web 服务(含飞牛 fnOS 自带应用),`待认领` 一键收录,自动跟随 302、跳过状态码页与默认页,支持 http/https - **系统监控**:CPU / 内存 / 交换 / 网络 / 磁盘,顶栏按钮本身就是 CPU 进度条,悬浮即看,超阈值变色 - **访问密码**:scrypt 加盐哈希,Cookie 签名,同 IP 限频防爆破,支持退出登录 - **其它**:图标抓取失败自动降级为首字母、深浅主题、三档卡片密度、访问统计、导出/导入配置、PWA、手机端适配 零第三方依赖,只用 Node 内置模块,常驻内存约 50MB。 ## 快速开始 ```bash # 拉取源码后 cd naspilot docker compose up -d # 打开 http://<你的IP>:8899 ``` 默认免构建运行(`node:22-alpine` 挂源码),改端口直接改 `docker-compose.yml` 里的 `"8899:8899"` 左边。 首次进入:`设置 → 联动 → 立即同步`,容器即全部出现;`待认领` 里扫描并认领飞牛自带应用。 > 面板数据只落在本地 `data/config.json`,备份这一个文件即可。仅有的外部请求是抓取站点 favicon(有本地缓存、抓不到自动降级为首字母),无统计、无埋点、无上报。 ## 用容器标签控制展示 ```yaml labels: naspilot.name: "影视库" # 显示名称 naspilot.desc: "4K 片源" # 描述 naspilot.icon: "https://.../a.png" # 图标地址 naspilot.group: "media" # 分组 id naspilot.hide: "true" # 不在面板显示 naspilot.url: "http://nas:8096" # 手动指定入口地址 ``` ## 环境变量 | 变量 | 默认 | 说明 | |---|---|---| | `PORT` | `8899` | 监听端口 | | `NASPLOT_DATA` | `/app/data` | 数据目录 | | `TZ` | `Asia/Shanghai` | 时区 | ## 目录结构 ``` naspilot/ ├── server/ # Node 后端(无框架):HTTP 服务、Docker、端口发现、监控、探活、图标、认证 ├── public/ # 前端(原生 HTML/CSS/JS) ├── data/ # 运行时数据与图标缓存(自动生成,备份这一个目录即可) ├── Dockerfile └── docker-compose.yml ``` ## 更新 解压新包,用 `public/`、`server/`、`docker-compose.yml` 覆盖旧目录,**不要覆盖 `data/`**,然后 `docker restart naspilot` 并强制刷新浏览器(`Ctrl/⌘+Shift+R`)。`public/` 必须整体覆盖,不要只换个别文件。 ## 安全说明 - 默认不设密码,可在 `设置 → 通用 → 访问密码` 加一道;设密码后所有接口需先通过校验 - **不要直接映射公网**,放反向代理 + 额外认证更稳妥 - 挂载 `docker.sock` 等于 root 权限,多用户共用建议改成只读(`:ro`) - 面板不向外发数据,唯一外部请求是取站点图标,自动发现只扫本机端口 ## 许可 [MIT](LICENSE) · 作者 小余