微学AI头像
关注
服务入口越装越多?我用Dashlet把极空间整理成了一个导航首页封面图

服务入口越装越多?我用Dashlet把极空间整理成了一个导航首页

服务入口越装越多?我用Dashlet把极空间整理成了一个导航首页

前言

NAS 用久以后,我发现真正容易乱的不是文件,而是入口。Docker 里装了下载器、代码仓库、监控面板、媒体服务,再加上平时常用的网站,书签越存越多,最后想打开一个服务时,反而要先回忆端口、翻收藏夹或者找以前记下来的地址。

所以我更想要一个很轻的“首页”:不用承担复杂监控,只负责把常用服务和网址整理到一个地方,浏览器打开就能点。Dashlet 正好适合这种思路,它本身支持主题、拖拽、搜索和配置文件导入,部署也比较简单。

这篇我会先在极空间上确认 SSH 和 Docker 环境,再用 Docker Compose 跑起 8989 端口的 Dashlet。随后通过配置文件一次性导入 12 个服务入口,实际看看标题、图标、描述、主题和排序这些基础功能怎么落地。

本地导航页确认可用以后,再处理随机公网地址和固定二级子域名,让其他设备也能打开同一个入口。

对我来说,Dashlet 真正有价值的地方不是“数据大屏”这几个字,而是把越来越散的服务入口重新收拢到一个自己能控制的页面里。

而且这类首页还有个好处:服务本身怎么部署可以继续保持不变,只需要把入口地址整理进配置。以后新增一个容器、改一个端口,也不必重新设计整张页面。

image-20260109175305930

1 Dashlet更适合做“服务入口”,不是重型监控平台

如果 NAS 上只跑一两个服务,记住地址和端口并不难。

但服务一多以后,就很容易变成:

  • 一个下载器一个端口;
  • 一个媒体服务一个端口;
  • 一个监控面板一个端口;
  • 再加上 GitHub、Notion、邮件和各种常用网页。

Dashlet 的作用,更像是给这些入口做一个统一首页。

它支持:

  • 主题切换;
  • 自定义背景;
  • 搜索;
  • 拖拽排序;
  • 配置文件集中管理;
  • 自定义 CSS 与 JavaScript;
  • 响应式布局。

真正适合这篇实操去验证的,是:

页面能不能跑起来,配置能不能导入,服务入口能不能按照 config.json 显示出来。

2 先通过SSH进入极空间

在极空间中开启 SSH 服务,然后使用终端连接:

ssh root@IP

957c00e3b3f0ce8aa95df96aa41b8715

后面的目录创建、Docker 部署和 cpolar 安装都会从这个环境继续。

3 检查Docker环境

先执行:

docker -v 
systemctl status -v

image-20251017103712618

只要 Docker 环境已经正常,就可以继续创建 Dashlet 目录。

4 创建Dashlet目录

执行:

 mkdir Dashlet

image-20260109171540538

当前命令只是创建目录。

如果后续要让 Compose 文件、data 目录和配置长期放在固定位置,最好保持整个 Dashlet 目录结构一致。

5 两种Docker启动方式都保留

5.1 docker run

可以直接执行:

docker run -d \
  --name dashlet \
  --restart unless-stopped \
  -p 8989:8989 \
  -v $(pwd)/data:/app/public \
  ghcr.io/jaberio/dashlet:latest

这条命令里几个关键参数是:

  • 容器名:dashlet
  • 重启策略:unless-stopped
  • 端口:8989:8989
  • 数据映射:$(pwd)/data:/app/public
  • 镜像:ghcr.io/jaberio/dashlet:latest

5.2 Docker Compose

本文使用的是 Compose:

services:
  dashlet:
    image: ghcr.io/jaberio/dashlet:latest
    container_name: dashlet
    restart: unless-stopped
    ports:
      - "8989:8989"
    volumes:
      - ./data:/app/public

image-20260109171932407

两种方式的端口和目录逻辑是一致的。

容器跑起来以后,浏览器访问:

http://极空间IP:8989

进入 Dashlet 页面:

image-20260109172104789

做到这里,只能确认 Web 服务已经可以访问。

真正的导航内容还需要继续导入配置。

6 Dashlet真正好用的地方在config.json

点击设置,然后找到导入:

image-20260109172312513

进入配置导入页面:

image-20260109172328745

选择对应文件以后,可以看到配置内容:

image-20260109172420503

继续编辑:

image-20260109172427085编辑后,点击导入配置文件:

Dashlet 的很多设置都可以直接放进配置文件里。

这比每换一台设备都重新手动添加入口更适合长期维护。

7 这份配置一次导入12个服务入口

当前使用的完整配置如下:

{
  "settings": {
    "theme": "system",
    "appTitle": "Dashlet",
    "greeting": "Welcome",
    "accentColor": "#3b82f6",
    "blur": true,
    "animations": true,
    "openNewTab": true,
    "layout": "list",
    "wallpaper": "",
    "searchProvider": "https://duckduckgo.com/?q=",
    "customCSS": "",
    "disableDragDrop": false,
    "dragDelay": 0,
    "searchEnabled": true,
    "footerText": "Powered by",
    "footerColor": "",
    "sortBy": "manual"
    },
"services": [
  {
    "id": "1",
    "name": "GitHub",
    "description": "Code hosting",
    "url": "https://github.com",
    "icon": "https://github.githubassets.com/favicons/favicon.png"
  },
  {
    "id": "2",
    "name": "YouTube",
    "description": "Watch videos",
    "url": "https://youtube.com",
    "icon": "https://www.youtube.com/s/desktop/10c3d9b4/img/favicon_144x144.png"
  },
  {
    "id": "3",
    "name": "Google",
    "description": "Search engine",
    "url": "https://www.google.com",
    "icon": "https://www.google.com/favicon.ico"
  },
  {
    "id": "4",
    "name": "Gmail",
    "description": "Email service",
    "url": "https://mail.google.com",
    "icon": "https://ssl.gstatic.com/ui/v1/icons/mail/rfr/gmail.ico"
  },
  {
    "id": "5",
    "name": "Notion",
    "description": "All-in-one workspace",
    "url": "https://notion.so",
    "icon": "https://www.notion.so/images/favicon.ico"
  },
  {
    "id": "6",
    "name": "Reddit",
    "description": "Social news & discussion",
    "url": "https://reddit.com",
    "icon": "https://www.redditstatic.com/desktop2x/img/favicon/favicon-32x32.png"
  },
  {
    "id": "7",
    "name": "Twitter / X",
    "description": "Social media",
    "url": "https://twitter.com",
    "icon": "https://abs.twimg.com/favicons/twitter.3.ico"
  },
  {
    "id": "8",
    "name": "Stack Overflow",
    "description": "Developer Q&A",
    "url": "https://stackoverflow.com",
    "icon": "https://cdn.sstatic.net/Sites/stackoverflow/Img/favicon.ico"
  },
  {
    "id": "9",
    "name": "Wikipedia",
    "description": "Free encyclopedia",
    "url": "https://en.wikipedia.org",
    "icon": "https://en.wikipedia.org/static/favicon/wikipedia.ico"
  },
  {
    "id": "10",
    "name": "Netflix",
    "description": "Streaming movies & shows",
    "url": "https://netflix.com",
    "icon": "https://assets.nflxext.com/us/ffe/siteui/common/icons/nficon2016.ico"
  },
  {
    "id": "11",
    "name": "Spotify",
    "description": "Music streaming",
    "url": "https://open.spotify.com",
    "icon": "https://open.scdn.co/cdn/images/favicon32.c6a9e59d8375a83e22c7b79e9b7a3e3d.png"
  },
  {
    "id": "12",
    "name": "Weather",
    "description": "Check local forecast",
    "url": "https://weather.com",
    "icon": "https://weather.com/favicon.ico"
  }
]
}

这里面除了服务列表,还包含:

  • theme
  • appTitle
  • greeting
  • accentColor
  • blur
  • animations
  • openNewTab
  • layout
  • wallpaper
  • searchProvider
  • customCSS
  • disableDragDrop
  • dragDelay
  • searchEnabled
  • footerText
  • sortBy

导入完成后:

image-20260109172944936

页面会一次出现 12 个网址入口:

4bab59c5db909b9bd1010627019c7413

包括:

  • GitHub
  • YouTube
  • Google
  • Gmail
  • Notion
  • Reddit
  • Twitter / X
  • Stack Overflow
  • Wikipedia
  • Netflix
  • Spotify
  • Weather

这一步真正验证的是:

Dashlet 页面内容可以由配置文件集中驱动。

8 为什么配置驱动比手工加图标更适合NAS

对于自托管环境来说,服务入口会经常变化。

比如:

  • 某个端口改了;
  • 新增一个 Docker 服务;
  • 换了域名;
  • 某个入口不再使用;
  • 想把工作类和娱乐类重新排序。

如果所有内容都写在 config.json,后续修改和备份会更清楚。

这也是 Dashlet 更适合做“服务导航页”的原因。

它并不要求每个入口本身一定运行在 NAS 上。

你可以同时放:

  • NAS 内部服务;
  • 公司内部地址;
  • 公网网站;
  • SaaS 工具;
  • 常用搜索和资料站。

9 本地页面够用以后,再处理远程访问

如果 Dashlet 只作为家里的起始页,到这里已经够了。

如果还希望手机、平板或者外面的电脑也能打开,再继续处理公网入口。

这里仍然要区分:

Dashlet 负责导航页面,cpolar 负责网络入口。

10 安装cpolar

执行:

sudo curl https://get.cpolar.sh | sh

e464b045413a024674a93ea472511b0f

安装完成以后检查服务:

sudo systemctl status cpolar

aa03713b56d9eef12a4da6b99d2e46ac

随后通过主机 IP 加:

9200

进入 Web UI:

3af79ad708cc47c5bbea0b63c2c7230d

登录以后继续创建 Dashlet 对应隧道。

11 先用随机公网地址验证

进入隧道管理,创建隧道。

当前参数:

  • 隧道名称:dashlet
  • 协议:http
  • 本地地址:8989
  • 域名类型:随机域名
  • 地区:China Top

image-20260109174156723

创建以后打开在线隧道列表:

image-20260109174658215

复制地址访问:

image-20260109174745451

能够正常打开 Dashlet 页面以后,说明公网入口已经打通。

12 长期使用再切换固定二级子域名

随机地址适合先验证。

如果准备把 Dashlet 当成长期开机首页,再继续配置固定二级子域名。

进入预留:

image-20250918151358733

选择保留二级子域名。

当前示例:

  • 地区:China Top
  • 子域名:dashlet

image-20260109174921149

然后回到隧道列表,找到对应隧道并编辑:

image-20260109175032370

修改为:

  • 域名类型:二级子域名
  • Sub Domain:填写前面保留成功的名称
  • 地区:China Top

更新:

image-20260109175004750

在线隧道列表会显示新的固定地址:

image-20260109175111712

最后通过固定地址访问:

image-20260109175142258

页面能够正常打开以后,固定访问入口就配置完成了。

13 仪表盘公开到公网以后,要区分“入口”和“后端权限”

Dashlet 本身只是把很多服务入口集中到一起。

这意味着它可能会展示:

  • NAS 管理页;
  • 下载器;
  • 监控面板;
  • 代码仓库;
  • 媒体服务;
  • 邮件和第三方网站。

因此公网开放以后,不能因为 Dashlet 页面能访问,就认为后面的每个服务都已经安全。

更合理的做法是:

  • Dashlet 只作为导航页;
  • 每个后端服务仍使用自己的账号和权限;
  • 不需要外网访问的内部服务不要随意暴露;
  • 不要在配置里放敏感 Token、密码或管理密钥。

导航页解决的是“找得到”。

真正的访问控制仍然属于各个服务自己。

14 这类轻量导航页真正适合什么场景

我觉得 Dashlet 更适合:

  • NAS 上装了很多服务;
  • Docker 容器越来越多;
  • 经常忘记端口;
  • 浏览器书签已经开始失控;
  • 希望自己控制首页;
  • 想用配置文件统一管理入口。

如果真正需要的是服务器 CPU、内存、网络、日志和告警监控,那应该继续使用专门的监控工具。

Dashlet 在这篇实际操作里,更准确的角色是:

一个轻量、自托管、可以自己配置的服务导航首页。

总结

这次把 Dashlet 跑到极空间以后,我觉得它最实用的地方不是“仪表盘”三个字听起来多高级,而是终于可以把 NAS 和日常使用的各种入口放到同一个页面里。

Docker 只负责把 8989 服务跑起来,真正决定页面长什么样、有哪些入口的,是后面的 config.json。一次导入 12 个服务以后,标题、图标、描述和排序都能集中维护,这比继续往浏览器收藏夹里堆东西更清楚。

远程访问放在最后处理也更合理。Dashlet 负责导航,cpolar 负责网络入口,而每个被导航到的服务仍然要保留自己的登录和权限。

如果家里的 NAS 已经越装越多,我觉得 Dashlet 更像一个轻量的“起始页”:不替代监控、不替代服务本身,只负责让那些已经存在的东西更容易找到。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_42878111/article/details/167681681

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--