跳转到内容

Monitor 应用

Monitor 可以通过 Docker Compose 部署 Web 应用,并在面板的应用商店 和桌面中显示。应用运行在 Monitor 所在的服务器上。安装、修改或移除应用时需要再次输入 Monitor 的密码。从 .fsba 包安装、在面板内运行的应用见 桌面应用。

在面板中打开 应用 → 应用商店,按类别浏览或按名称搜索。应用页面会显示项目、发布者、 版本、许可证、运行要求,以及 Compose 文件的作用。选择 安装 并填写应用设置。

部署前的确认页面会列出设置、要拉取的镜像、数据目录和端口。请同时检查这些内容、项目 信息和许可证。Monitor 会要求输入密码;确认这是第三方软件,并在应用要求时接受许可证。 之后 Monitor 会下载镜像并部署 Compose 项目。页面会显示任务进度。

部分应用没有在维护的镜像,会根据应用包中的 Dockerfile 在服务器上构建镜像。这类应用的 确认页面会在 本机构建 下列出构建的镜像,并在要拉取的镜像中列出其基础镜像。构建比 下载耗时更长;更新时会基于同一版本最新的基础镜像重新构建。

安装后,可从应用页面或 全部应用 打开应用。要修改设置,请打开应用页面并选择 修改设置。保存设置会重新部署应用,期间应用会短暂不可用。旧数据目录中的数据 不会移动到新选择的目录。

Monitor 会将每个配置端口与其他容器及应用自身运行的容器进行检查。如果建议端口在部署前 被占用,Monitor 会改用另一个空闲端口。若你明确指定了端口,而该端口已被占用,部署会被拒绝。 启动、重启、更新或保存设置时,不会静默更改已选端口。

如果 Monitor 无法看到主机的网络命名空间(例如 Monitor 运行在容器中),或 Monitor 运行在 WSL 中而检查 Windows 主机端口,端口检查会不完整。在这些环境中,请自行确认主机端口是否可用。端口检查 不完整时,应用页面会显示提示。

Monitor 大约每分钟检查一次已安装应用,并报告健康、启动中、异常、已停止运行或已停止状态。 应用任务运行期间不会检查健康状态。应用停止或状态异常、恢复运行,以及目录中出现比当前 版本更新的版本时,桌面会收到通知。如果目录提供了已翻译的标题,通知会使用阅读者当前的 语言显示。

在应用页面选择 更新,即可部署目录中的当前版本。每个目录版本只会通知一次。要立即 检查目录是否有变化,请在应用商店中选择 检查新应用和更新。

在应用页面或应用窗口中选择 移除。默认情况下,Monitor 会移除应用容器并保留数据, 之后重新安装时可以继续使用。只有在不再需要数据时才选择同时删除数据;数据目录会被删除, 无法恢复。移除应用后,它会从 全部应用 中消失。

目录合并以下三个来源。若多个来源包含同一个 app id,则按以下顺序优先使用最前面的来源:

  1. [stacks] local_apps 配置的目录,Monitor 启动时读取。
  2. 应用仓库,Monitor 启动时和之后每小时刷新一次。也可以选择 检查新应用和更新 手动刷新。
  3. 随 Monitor 附带的应用。

例如,创建 /srv/sbm-apps/example.web/,在其中放置 manifest.toml 和 Compose 文件, 然后配置:

[stacks]
local_apps = "/srv/sbm-apps"

添加或修改本地应用后,请重启 Monitor。本地应用包从配置的目录读取,不会被复制到目录缓存中。

下载、播放或提供文件的应用使用同一个共享文件夹,因此下载工具保存的文件会出现在媒体服务器的媒体库中。它的子文件夹为 downloads、media/movies、media/tv、music、books、comics 和 documents。默认位置是 Monitor 数据库旁的 shared/,可以这样改为其他位置:

[stacks]
shared_dir = "/srv/media"

应用以该文件夹所有者的身份运行,修改文件夹的所有者即可决定应用创建的文件属于哪个用户。移除应用时不会删除共享文件夹中的任何内容。

对于有管理员账号的应用,Monitor 会在应用支持时用生成的密码创建该账号。可以在应用页面的 登录 中查看账号,再次输入 Monitor 的密码后可以查看生成的密码。

App 的 Monitor 标签页 中的 Web 应用 部分按服务器分组, 列出所有通过 Monitor 添加的服务器上已部署的应用及其健康状态。应用目录中有新版本的应用排在前面, 栏上的更新按钮可以只显示这些应用。服务器页面中的 Web 应用 卡片只列出该服务器的应用。

点按应用即可打开,点按信息按钮可查看应用页面(健康状态、简介、版本、主页和 打开 按钮)。

点按应用会在设备的浏览器中打开它:App 向 Monitor 申请一次性 ticket,浏览器再通过 Monitor 的代理进入应用,与面板窗口相同。之后浏览器使用自己的会话访问代理,因此 ServerBox App 可以切到后台或关闭。部署、更新和移除应用仍在面板中进行。

浏览器会自行检查 Monitor 的 TLS 证书,在 App 中信任的证书不会被浏览器信任,因此 自签名证书会显示浏览器的警告。设备需要能访问代理端口(或下文的应用主机名)。

默认情况下,每个已部署应用会在 Monitor 所在的主机上使用一个独立代理端口,范围为 3780–3799。面板通过该代理进入应用。浏览器需要能够访问这些端口;如果 Monitor 位于反向 代理或 Cloudflare Tunnel 后面,请改用应用主机名监听器:

[stacks]
apps_url = "https://*.apps.example.com"
apps_port = 3779

apps_port 默认值为 3779。创建指向代理或 tunnel 的 *.apps.example.com 通配符 DNS,并使用覆盖该通配符域名的 TLS 证书。每个应用会分配一个主机名,例如 futo-immich.apps.example.com。代理必须保留传入的 Host header,并支持 WebSocket 升级。

Caddy 示例,使用已签发的通配符证书(也可以配置支持的 provider plugin 进行 DNS challenge):

*.apps.example.com {
tls /etc/caddy/certs/apps.example.com.pem /etc/caddy/certs/apps.example.com-key.pem
reverse_proxy 127.0.0.1:3779
}

nginx 虚拟主机示例:

server {
listen 443 ssl;
server_name *.apps.example.com;
ssl_certificate /etc/nginx/certs/apps.example.com.pem;
ssl_certificate_key /etc/nginx/certs/apps.example.com-key.pem;
location / {
proxy_pass http://127.0.0.1:3779;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Cloudflare Tunnel 可将通配符主机名转发到本地应用监听器:

ingress:
- hostname: "*.apps.example.com"
service: http://localhost:3779
- service: http_status:404

如果面板托管在 Cloudflare Pages,请为它配置与应用同站点的自定义域名,例如 panel.example.com 和 *.apps.example.com。当面板使用 *.pages.dev 域名时,Safari 会阻止应用的登录 cookie;其他浏览器会通过 partitioned cookies 保留这些 cookie。如果 运行多个 Monitor,请为每个 Monitor 使用独立的通配符域名和证书。

打开 容器 → 备份,选择容器并点击 备份。可以备份单个容器,或其整个 Compose 项目。归档包含其卷和 bind mount 的文件夹。Monitor 会跳过主机系统文件夹(例如 / 和 /etc)以及 bind mount 的文件;面板会列出被跳过的挂载项。归档期间可以让 Monitor 停止 容器,避免数据库正在写入时被复制。归档任务完成或失败后,Monitor 都会重新启动容器。

要恢复数据,请选择备份并点击 恢复。Monitor 会停止项目中仍存在的容器,清空每个 待恢复的挂载位置,再解压归档数据。恢复和删除操作都会要求输入密码。

默认情况下,备份保存在 Monitor 主机上的数据库目录下:container-backups/<backup-id>/,元数据位于 meta.json。要保存到单独的硬盘,先在 存储 中挂载该硬盘并勾选 允许 ServerBox 写入,再在 容器 → 备份 中选择 备份位置 → 更改,选中该硬盘上的文件夹。 Monitor 会在其中创建 serverbox-container-backups/ 并写入备份。已有的备份不会移动。

每项保留的备份数 设置每个容器或项目保留的备份数量;每次备份完成后,超出数量的最旧备份会被删除。 目标位置的可用空间小于待归档数据时,备份会被拒绝。

要定期备份,在 备份 对话框中选择 重复 → 每天 或 每周 以及时间。计划任务按 服务器本地时间运行,列在 计划任务 下,并显示上次运行的结果。

存储 应用(Linux)列出服务器的硬盘、分区、文件系统和挂载点,以及软件 RAID 阵列(mdadm) 和 ZFS 存储池。可以执行:

  • 对整块硬盘分区(一个 GPT 分区),并格式化为 ext4、xfs 或 btrfs;
  • 挂载文件系统,可选写入 /etc/fstab 以便每次启动时自动挂载(原文件保存为 /etc/fstab.sbm-bak),以及卸载;
  • 创建 RAID 阵列,添加或移除成员,为 RAID 1、5、6 增加一个工作成员(扩容),删除阵列,格式化和挂载阵列本身;
  • 创建 ZFS 存储池(硬盘全部换成更大的盘后会自动扩容),添加硬盘或热备盘,替换故障或更小的设备,为设备添加镜像,让离线设备恢复在线,移除热备盘,执行 scrub,销毁存储池;
  • 把分区扩展到其后的空闲空间(例如虚拟机硬盘扩容后),并在阵列或分区扩容后扩展其上已挂载的 ext4、xfs 或 btrfs 文件系统;
  • 加密格式化分区或整盘(LUKS2,使用密码短语),以及锁定和解锁。加密盘开机时不会自动解锁:重启后需要在存储中解锁并重新挂载;
  • 读取每块硬盘的 SMART 健康信息(温度、通电时间、坏扇区、上次自检结果),在 详情 中查看全部属性和自检记录,并对支持 SMART 的硬盘启动简短或完整自检。

每项更改都会要求输入 Monitor 账户的 sudo 密码,并以 root 身份运行。已挂载、用作 swap、或属于阵列或存储池的 硬盘和分区不会被分区、格式化或用于创建阵列,固件分区(EFI 系统分区、BIOS boot)也一样。系统所在的挂载点(/、/boot、/boot/efi)不能卸载。分区、格式化以及创建阵列或存储池会清除硬盘上的数据,确认对话框会 列出这些硬盘。相应功能需要安装 mdadm、ZFS(zfsutils-linux)和 smartmontools。

读取 SMART 同样需要 root:sudo 不要求密码时应用会自动读取,否则点击 读取磁盘健康 后输入密码读取。

在 维护 中可以设置三项任务每周或每月运行:校验所有 ZFS 存储池和 RAID 阵列、SMART 简短自检、SMART 完整自检(对所有支持 SMART 的硬盘)。立即运行 会马上执行一次。

计划任务在没有密码的情况下运行。Monitor 不是以 root 运行时,sudo 必须允许它的账户免密码运行这些命令。页面会显示对应的配置行,例如写入 /etc/sudoers.d/serverbox-storage:

serverbox ALL=(root) NOPASSWD: /usr/sbin/smartctl, /usr/sbin/zpool scrub *, /usr/sbin/mdadm --action=check *

Monitor 还会持续检查存储:每 5 分钟检查阵列和存储池,每小时检查每块硬盘的 SMART(使用同一条 sudo 规则,或使用页面上最近一次读取的结果)。阵列降级、存储池不在线、硬盘 SMART 检查或自检失败、坏扇区比之前增多时,会在通知中心和通知渠道(设置 → 通知渠道)中提醒。阵列或存储池恢复后会在通知中心提醒。

共享 应用(Linux)通过 SMB(Samba:Windows、macOS、Linux)和 NFS(Linux、macOS)把文件夹共享给其他电脑。 未安装 Samba 或 NFS 服务器时,应用会提供安装按钮,使用系统的包管理器(apt、dnf 或 apk)安装。

  • SMB:用名称和文件夹添加共享,可设为只读、允许访客(无需账户)访问,或只允许部分账户访问。Samba 使用独立的密码,需要在 SMB 密码 中为每个要连接的账户设置。共享可以接收 Mac 的 Time Machine 备份,也可以把删除的文件先放进共享内的 .recycle 文件夹。
  • NFS:把文件夹导出给客户端(*、主机名、地址或网段,例如 192.168.1.0/24),每个客户端可设为只读或读写,并设置客户端的 root 映射为什么用户(默认 nobody)。

ServerBox 把自己创建的共享保存在独立的文件中(/etc/samba/serverbox.conf,由 smb.conf 引入;/etc/exports.d/serverbox.exports),在其他地方设置的共享只显示、不修改。每项更改都要求输入 sudo 密码,并在生效前检查(testparm、exportfs -ra),检查不通过时保留原配置。当前连接 列出正在使用共享的客户端(需要 sudo 密码,Samba 只把这些信息告诉 root)。在防火墙中放行 会打开防火墙应用,并预先填好放行 TCP 445(SMB)或 2049(NFS)的规则,在那里确认。共享的文件夹可以从存储中已挂载的硬盘里选择,也可以手动输入。