Local Object & Capability Unified Space

LOCUS

少记几个地址,少维护一张导航页。

自托管,在一页里找到并打开 NAS、服务器和自建应用。

安装 LOCUS 版本与下载 问题反馈

当前版本 0.1.0.000037

产品界面

LOCUS 首页:启动台固定着 Jellyfin、Immich、Nextcloud、NAS 管理、文件共享、Gitea、终端,以及常用网站 GitHub、哔哩哔哩、少数派;下面是最近使用,以及按存储、开发、网络、家庭和外部分类的设备与网站。
首页:启动台、最近使用,以及按类别整理的设备和网站。
LOCUS 搜索:输入 nas,列出书房 NAS 的两个入口,HTTP 管理页和 SMB 文件共享。
搜索:输入 nas,列出这台 NAS 的管理页和文件共享。
LOCUS 设备菜单:点开书房 NAS,列出 HTTP · NAS 管理和 SMB · 文件共享,每行前面是状态圆点,后面是固定按钮。
设备菜单:一台 NAS 上的多个服务,圆点是最近一次检查的结果。

示例环境,设备名称与服务数据为演示用途。

01 Casa 家里的设备与服务

家里慢慢会多出几台机器:一台 NAS,一台跑着好几个应用的家庭服务器,一台开发主机,路由器和树莓派也各有后台。每样东西都有自己的地址和端口。

一台 NAS,好几个入口
文件共享走 SMB,管理后台是网页,有时还开着 SSH。明明是同一台机器,入口却散在不同地方。
端口记不住
Jellyfin 在 8096,Immich 在 2283,Nextcloud 在 8080。过一阵子,就只记得「在那台服务器上」。
书签和导航页要人维护
收藏夹、自己写的导航页、浏览器历史各存一部分。每加一个服务,就要记得去改一次。
DHCP 换了地址
路由器重新分配 IP 之后,原来的书签就打不开了。

LOCUS 面向的就是这些:NAS、家庭服务器、开发主机和自建应用。它不是智能家居控制面板,也不是监控系统。

02 Locus 找到入口,打开服务

LOCUS 运行在家里的一台 Linux 机器上。它收听局域网里设备发出的广播,把能打开的服务按设备整理到一个页面。

搜索
输入几个字就能找到,例如 nas 或 ssh nas。多个词一起筛选,不必记得地址。网页在新标签打开;SSH、SMB、VNC 交给电脑上已有的客户端。
固定常用入口
把常用的服务固定到启动台,再排序、分组。刚打开过的会出现在「最近」里。暂时找不到的固定项保留名称并灰显,不会凭空消失。
添加不广播的服务
很多自建应用不会广播。粘贴地址,LOCUS 检查能否连上、用网页标题预填名称,再由你选它属于哪台设备。外部网站也能加,和家里的设备分开放。
确认候选
可选,默认关闭。开启候选探测后,LOCUS 检查已知设备上的常见端口,找到的服务先列为候选,由你逐个添加或忽略。

每个入口旁的圆点是最近一次检查的结果:可到达、不可到达、尚未确认,或服务异常(例如网页返回 HTTP 5xx)。

03 安装

系统
Linux,x86_64 或 ARM64(aarch64)。
原生程序
需要 glibc 2.34 或更新,Debian 12、Ubuntu 22.04 及之后的版本都满足。Alpine 等 musl 系统请用 Docker。
权限
安装脚本需要 root,会用 sudo 重新运行自己。它创建系统用户 locus,注册 systemd 或 OpenRC 服务并设为开机启动;防火墙开着时,会先问你是否放行端口和发现用的组播。
访问
默认端口 3033。装好后在浏览器打开 http://这台机器的 IP:3033,或 http://主机名.local:3033。
Docker
在 Linux 上运行,需要能执行 docker 的用户(root 或 docker 组)。必须用 --network host,否则收不到设备广播;因此不做端口映射,数据保存在卷 locus-data。用 Docker 部署只是运行方式,LOCUS 不管理容器。

Linux

curl -fsSL https://locus.casa/releases/install | sh

脚本先让你选语言,检查环境,再问监听地址、端口和数据目录,最后启动服务并给出访问地址。

Docker

curl -fsSL https://locus.casa/releases/latest/docker-linux-amd64.tar.gz | docker load
docker run -d --name locus --network host --restart unless-stopped -v locus-data:/data locus:latest

ARM64 把 amd64 换成 arm64。换端口时,在命令末尾加 --bind 0.0.0.0:端口。

升级

发行版会定期检查新版本。有新版本时,LOCUS 页面右上角出现升级图标,点「升级并重启」:程序下载对应架构的文件,核对 SHA256SUMS,试运行通过后替换并重启。也可以再运行一次安装命令来升级。新程序写在数据目录里(Docker 是 /data 卷),在 Docker 卷内升级不会更新镜像本身。设置环境变量 LOCUS_UPDATE_CHECK=off 可以关闭检查。

升级前先停止服务、备份整个数据目录,再启动服务升级。回退需要与旧程序兼容的数据;不要仅删除升级下载的程序来降级。

手动下载与校验

不想直接运行 curl | sh,可以先下载、校验再运行。每个版本有固定目录 locus.casa/releases/0.1.0.000037/,GitHub Release 上有同样的文件:

下载程序、校验后直接运行(数据放在 ~/.local/share/locus,不注册服务):

V=0.1.0.000037
curl -fsSLO https://locus.casa/releases/$V/linux-x86_64.tar.gz
curl -fsSLO https://locus.casa/releases/$V/SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS
tar -xzf linux-x86_64.tar.gz
./locus-$V-linux-x86_64/locus --bind 0.0.0.0:3033

或者先读安装脚本再运行。它会下载 linux-install.sh,用同一目录的 SHA256SUMS 核对后再执行:

curl -fsSL https://locus.casa/releases/install -o install
less install
sh install

SHA256SUMS 和文件放在一起,只能发现下载损坏或不完整,不能证明文件来源,也不是数字签名。可以把 locus.casa 和 GitHub Release 上的两份清单对照(GitHub 上的文件名多了 locus-版本- 前缀,哈希值相同)。

04 使用前

LOCUS 假定家里的网络是可信的。下面几条决定了该怎么部署它,点开看细节。

没有账户,不要直接放到公网

LOCUS 没有登录。能打开页面的人都能修改设置,也能使用下面说的设备控制。访问防护只挡浏览器里的跨站请求和 DNS 重绑定,不是认证。只在可信的局域网里使用。

只控制少数几类设备,默认开放

目前只有三类:UPnP 媒体播放器(如电视、音箱上的 DLNA 渲染器)可以播放、暂停、停止、上一个、下一个、静音、调音量和切换播放源,具体按钮取决于设备当时允许的动作;IPP 打印机只读型号、排队数和状态,可以打开打印队列页面;ONVIF 摄像头只读设备信息,可以打开视频流地址。不做其他设备管理。

不需要先授权:能打开 LOCUS 页面的电脑,都能控制它发现的这些设备。要收紧时,用环境变量 LOCUS_CONTROL_CLIENTS 列出允许的 IP 或网段(none 表示都不允许),也可以在「态势」面板里逐项关掉控制;关掉的那项,LOCUS 不再为它向设备发请求。

按直接访问设计,暂无经过验证的反向代理配置

浏览器地址里的主机名必须是 LOCUS 认可的名字(本机 IP、localhost、主机名、主机名.local,或在 LOCUS_ALLOWED_HOSTS 里加的),端口必须等于 LOCUS 的监听端口;修改操作只接受来自同一个 http 地址的请求。所以经常见的反向代理访问时,请求会被拒绝(421 或 403)。我们暂不提供反向代理示例。请不要靠删除 Origin 头或关闭防护来绕过。

候选探测和整网扫描默认关闭,只在你有权探测的网络上开启

开启后,LOCUS 会主动连接局域网设备的端口(候选探测每 15 分钟一轮),整网扫描还会向整个网段发包。这类流量可能触发路由器、防火墙或安全软件的告警。在公司或别人管理的网络上,先取得许可。它不是漏洞扫描,也不是资产盘点。

自动发现有网络边界

自动发现用 mDNS、SSDP/UPnP 和 WS-Discovery,只能看到运行 LOCUS 的机器实际收得到的广播,不会自动跨过 VLAN、隔离的 Wi-Fi 或 VPN。跨网段通常要在网络侧转发,或者手动添加入口。服务自己也要开着广播。

LOCUS 会发出哪些网络请求
  • 发现:在局域网里发 mDNS、SSDP 和 WS-Discovery 组播查询,并收听设备广播。
  • 设备描述:读取 UPnP 设备提供的描述文件。
  • 入口检查:定期连接页面上的入口,判断能否到达,包括你添加的外部网站。
  • 页面与图标:添加或检查入口时读取页面标题和图标,外部网站也一样。
  • 候选探测与整网扫描:只在你开启之后。
  • 设备控制:向上面说的媒体播放器、打印机和摄像头读取状态,或在你点按钮时发出动作;关掉控制的不发。
  • 更新检查:读取 https://locus.casa/releases/latest/version,不附带本机信息;升级时从同一处下载程序。LOCUS_UPDATE_CHECK=off 可以关闭。
数据保存在运行 LOCUS 的机器上

设备记录、入口、启动台、名称和分组、设置、使用记录、上传的图标和背景图,都在数据目录里:安装脚本默认是 /var/lib/locus,Docker 是卷 locus-data,直接运行是 ~/.local/share/locus。升级下载的程序也放在这里。备份或迁移时,先停止服务,再复制这个目录。

非网页入口要靠电脑上的客户端

SSH、SMB、VNC 这类入口用 ssh://、smb:// 等地址打开,由浏览器交给电脑上的程序。没有装客户端,或者系统没有关联这个协议时,就打不开;浏览器也可能先询问。手机上能打开的通常更少。LOCUS 不内置终端、文件管理器或远程桌面。

认出同一台设备、跟随新地址,都是有条件的

IP 不是永久身份。有 MAC 等稳定标识时,LOCUS 把不同来源的记录归到同一台设备,地址变了也会更新;不能确认时,记录会分开留着,同名或同 IP 也不一定合并。手动添加的 IP 入口,可以按宿主的 MAC 和邻居记录跟到新地址,但这不是动态 DNS:多网卡、地址冲突或缺少记录时要你确认;HTTPS 换了 IP,证书名称也可能对不上。

绿点是最近一次检查,不保证这次一定打得开

状态来自最近一次检查。两次检查之间设备可能离线;端口能连上,也不代表应用本身正常,或者你已经登录。

它是入口,不是运维控制台

不做指标监控、告警、密码保管或容器管理,也不会替你登录目标服务;打开之后,仍由那个应用自己认证。

闭源的免费软件

LOCUS 以二进制发行,不公开源代码。你可以在自己控制的机器上免费运行未经修改的副本,供个人或内部使用;不能再分发、修改或反向工程。完整条款见许可,随附组件见第三方声明;Docker 镜像里的 Debian 系统组件另见镜像中的 SYSTEM_COMPONENTS.txt。