轻量、可自托管的 NAS 服务导航页。基于 NasPage 持续增强,用于管理内外网服务入口,提供分类排序、用户视角在线状态、内外网智能切换等功能。
导航管理
- 站点分类管理,支持 上移/下移 或 排序数(越小越靠前) 两种排序方式,互不干扰
- 自动获取站点 favicon,支持 Manifest、多候选图标、公共图标库和手动上传
- 分类、站点、热键、配置支持 JSON 导入导出
网络与状态
- 自动判断内外网环境,也可手动切换(自动 → 内网 → 外网 → 自动 三态循环)
- 状态灯由 浏览器(你的设备)直接探测:反映"当前这台设备能否访问",而非服务器所在网络——内网、外网、虚拟局域网(Tailscale 类)各按实际可达性显示
- 切换网络/模式时状态即时刷新,未登录访客也能看到在线状态
- 内外网地址可分别配置(支持同一网段的字面 IP)
体验
Ctrl + K全局搜索,macOS/iOS 显示并支持⌘ + K- 深色 / 浅色 / 跟随系统三种主题
- 自定义背景、玻璃面板、面板不透明度
- 本地时间滚动显示与中文时段问候
- SQLite 单文件存储,备份迁移方便
安全与登录
- 内网 HTTP 部署下登录正常(Secure Cookie 兼容修复),管理会话有效期 30 天
- 管理密码使用带随机盐的 scrypt 保存,旧格式自动升级
- 图标与背景按真实文件头校验,阻止 SSRF 访问内网服务
容器内端口固定为 4027,示例将宿主机端口设为 4028,数据目录按你的 NAS 环境修改,保持映射到容器的 /app/data 即可。
name: serverpage
services:
serverpage:
image: gujngh/serverpage:latest
container_name: serverpage
restart: unless-stopped
ports:
- "4028:4027"
volumes:
- ./data:/app/data
environment:
- TZ=Asia/Shanghaidocker compose up -d启动后访问 http://NAS_IP:4028,首次打开设置时创建管理密码。
| 变量 | 默认值 | 说明 |
|---|---|---|
NASPAGE_PUBLIC_STATUS |
0 |
设为 1 后允许未登录访客获取站点在线状态 |
NASPAGE_TRUST_PROXY |
0 |
仅在可信反向代理后设为 1 |
需要 Node.js 22 和 pnpm 9:
pnpm install
pnpm dev默认开发地址为 http://localhost:3000,开发数据保存在项目的 data/ 目录。
完整检查:
pnpm test
pnpm typecheck
pnpm lint
pnpm buildNext.js 16、React 19、TypeScript、Tailwind CSS 4、Motion、dnd-kit、Lucide、SQLite、Vitest。
ServerPage 基于 smhjw/NasPage(其上游为 52Lxcloud/HomeDir)持续增强。内置服务图标的来源记录在 public/service-icons/SOURCES.md。
本项目采用 MIT License。