现场部署
这是在一个现场搭建 TreeT 的整体顺序。(安装文件和详细步骤会随导入时提供的部署安装包一同 说明。)
准备事项(按角色)
Section titled “准备事项(按角色)”安装前请准备以下内容。原则上每个角色使用不同的设备,也可根据规模合并。
| 角色 | 数量 | 需要准备 |
|---|---|---|
| CMS 服务器 | 每个站点 1 台 (一台 CMS 可管理多个站点) | Ubuntu 26.04 LTS。Docker 由安装文件自动安装 → CMS 服务器安装 |
| 终端 | 每个站点 N 台 (通常 10~30 台) | Windows · Linux · Android 任选其一。显示器和有线网络。 最低配置:Windows 10 及以上(64 位)· 64 位 Linux(x86-64 · 树莓派已在 Pi 5 + 64 位系统 上确认)· Android 7.0 及以上 |
| 同步服务器 | 使用多屏时 1 台 | Windows 10 及以上(64 位)或 64 位 Linux(x86-64 · arm64)。无需另装运行环境(单个可执行文件) |
| 边缘中继器 | 仅内网隔离现场 1 台 | Windows 11 22H2 及以上,同时连接内网和外网的设备 |
需要开放的端口
Section titled “需要开放的端口”这是设置防火墙、路由器时使用的表格。请先注意方向有两种 — 大多数是终端 向服务器发出连接,只有远程控制这一项方向相反,是进入连接。
终端 → 服务器(外发方向)
Section titled “终端 → 服务器(外发方向)”| 端口 | 用途 | 连接对象 | 被阻断时 |
|---|---|---|---|
| 8443 | CMS 安全连接 — 注册·设置·排播·内容下载 | CMS(或 MqttEdge) | 画面不会切换到新排播 |
| 8080 | CMS 明文连接 — 不使用 https 的现场 | CMS | 同上(〃) |
| 8883 | MQTT(TLS) — 远程指令·状态上报 | CMS 消息代理(或 MqttEdge) | 远程控制、即时生效不可用。播放本身会继续 |
| 53000 起 | 同步播放 — 每个同步池一个端口 | SyncServer | 多块屏幕的播放会错位 |
⚠️ 以 https(8443)运营的现场不对外开放 8080 — 因为它是明文入口。因此位于现场之外(不同网络)的
终端,请将CMS 地址和内容地址都设为 https://…:8443。在设备设置中只修改 CMS 地址时,
内容地址会由 CMS 一并跟随修改 — 如果两者原本是同一入口,则会连端口一起改为 https://…:8443/data。
⚠️ Android 7.0 及以下的设备需要 TreeTview Android 2026.9.135 及以上版本 — 这仅在 CMS 使用 Let’s Encrypt 证书的现场(https 8443)中出现。这些设备不认识 Let’s Encrypt 的根证书 (ISRG Root X1),因此无法信任 CMS,连接不上(实测:三星 Galaxy Note4 · Android 6,2026-09-22)。 自 2026.9.135 起,应用内置了该根证书,因此可以连接。安装了更低版本的设备无法连上 CMS, 所以无法通过 CMS 更新,必须直接安装新版本。
⚠️ 53000 号段只在现场内部通信 — 不会向互联网发出,因此无需在路由器上开放端口。 每增加一个池,端口会依次增加为 53001、53002…(由 CMS 自动寻找空闲编号)。
服务器 → 终端(进入方向)
Section titled “服务器 → 终端(进入方向)”| 端口 | 用途 | 被阻断时 |
|---|---|---|
| 5900 | VNC 远程控制 — 直接查看并操作该屏幕 | 远程控制按钮打不开 |
🔴 **只有这一个方向相反。**即使打开了其他所有端口,漏掉这个也只会导致远程控制不可用 —
而且其余功能都正常,很难找到原因。如果每台设备使用不同端口,请在设备管理 →
设备页面顶部的 编辑基本信息 → 远程连接 栏中填写 地址[:端口](管理员及以上)。
仅管理端使用的端口(与终端无关)
Section titled “仅管理端使用的端口(与终端无关)”| 端口 | 用途 |
|---|---|
| 4822 · 8080 | Guacamole 内部通信 |
| 5500 · 5901 | VNC 中继器(内网隔离结构中的服务器端 · 播放器端) |
🔵 数据库端口(3306)不对外开放。 只在堆栈内部通信。
使用 MqttEdge 的现场
Section titled “使用 MqttEdge 的现场”如果有边缘中继器,终端只会连接边缘中继器,不直接连接 CMS。边缘中继器会向现场侧开放 8883(MQTT)和 8443(内容代理),对外则只有边缘中继器向中央发出的一条连接。
⭐ 因此即使在内网隔离环境中,也无需在路由器上开放外部进入的端口 — 因为边缘中继器 只使用向外发起的连接。
🔵 请按此顺序操作。尤其不能调换第 2 步和第 3 步 — CMS 地址是在播放器画面上 填写的,所以必须先装好播放器。
- 安装 CMS — 在 CMS 主机上搭建服务器,并确定访问地址(IP/域名 + 端口)。 → CMS 服务器安装
- 在终端上安装程序 — 安装播放器(+ 监护程序,需要时加装同步服务器)。 → 见下文*“在终端 PC 上安装”*
- 填写 CMS 地址 — 在播放器画面按 F8。监护程序和同步服务器可在安装时填写(自相应版本起),或之后通过命令、文件填写。 → 见下文*“填写 CMS 地址”* · “其他程序也需要 CMS 地址”
- 🔴 确认是否已生效 — 亲眼查看播放器日志中的
[사이트설정] 확인(站点设置 确认)行。 → 见下文*“如何确认是否正确生效”*。跳过这一步,后面出问题时将无从查找原因。 - (仅 HTTPS + IP 地址现场)登记信任服务器证书 — 见下文*“以 IP 作为地址的现场”*。
- 设备注册 + 排播 — 地址正确时,播放器会自动向 CMS 注册(设备证书也会 自动签发)。在 CMS 管理后台设置内容和排播。程序的新版本 按 CMS 的更新方式(自动 · 手动)由所有设备共同接收 (管理后台)。
各程序**所需的权限不同。**规划安装顺序时请事先了解。
| 程序 | 安装权限 | 安装位置 |
|---|---|---|
| TreeTview(播放器) | 普通用户 | 该用户的个人文件夹 |
| 🔴 SyncServer(同步) | 管理员 | 程序文件夹(公用) |
| 🔴 Watchdog(监护) | 管理员 | 程序文件夹(公用) |
| 🔴 MqttEdge(内网隔离中继) | 管理员 | 公用文件夹 |
以普通用户身份安装的只有播放器,它按账户分别安装 — 如果同一台 PC 由多人使用, 需要用对应的账户登录后安装。
在播放器画面上更新
Section titled “在播放器画面上更新”除了直接运行安装文件,也可以在播放器画面上检查并安装。 CMS 有要下发给该设备的新版本时(程序版本), 在现场这样操作:
- 在播放器中按 F8 打开设置界面。
- 在程序更新一项中点击 [확인](确认) — 会显示当前版本和状态。
- 如有可安装的版本,[지금 설치](立即安装) 按钮会变为可用。
Linux 设备的更新 — 没有安装程序
Section titled “Linux 设备的更新 — 没有安装程序”Linux 没有像 Windows 那样的安装文件(.exe)。安装本身是一个压缩文件(.tar.gz),
其中包含记录每个文件校验值的清单,以及该清单的签名。
从 CMS 接收新版本的方式(运营时间外 · [지금 설치](立即安装))与 Windows 相同。
| Windows | Linux | |
|---|---|---|
| 收到的文件 | 安装文件(.exe) | 压缩文件(.tar.gz) + 已签名的文件清单 |
| 安装方式 | 静默运行安装文件 | 解压到新文件夹后替换文件夹 |
| 校验内容 | 文件签名 | 清单的签名 + 每个文件的校验值 |
| 未能启动时 | 需要人工查看 | 自动回退到旧文件夹 |
在终端 PC 上安装
Section titled “在终端 PC 上安装”CMS 搭好后,在要显示画面的每一台终端 PC 上进行。
安装文件位于安装包的 설치파일\(安装文件)文件夹中(C:\treet\설치파일\)
— 参阅 CMS 安装手册的*“开始之前”*。
🔴 请把整个文件夹移到终端 PC 上,在该 PC 上运行 — 安装文件是
以自身所在的文件夹为基准运行的。
⚠️ 请把安装包中的 TreeT_코드서명_공개인증서.cer(代码签名公钥证书)也一起带去。如果不先登记它,
自动更新会静默失败(参阅上文*“安装与更新”*)。
| 顺序 | 程序 | 是否必需 |
|---|---|---|
| 1 | TreeTview — 显示画面的播放器 | ✅ 必需 |
| 2 | Watchdog — 播放器退出时将其重新拉起,并代为安装新版本 | ✅ 推荐(无人值守现场实际上必需) |
| 3 | SyncServer — 仅在需要多块屏幕同步切换时 | 仅需要的现场 |
| 4 | 🔴 UltraVNC — 如需在 CMS 中查看这台设备的画面 | ✅ 推荐 |
不让任务栏 · 通知出现在画面上方
Section titled “不让任务栏 · 通知出现在画面上方”播放器处于 全屏(Kiosk) 时,位于任务栏 之上。即使通知或其他窗口短暂夺走焦点,任务栏也不会出现在播放器上方。用快捷键退出全屏进入 窗口模式 后,它会像普通窗口一样降下去。
| Windows | Linux(树莓派) | |
|---|---|---|
| 播放器全屏时 | 播放器覆盖任务栏 | 窗口管理器(labwc)自行隐藏任务栏 —— 播放器不会关闭任务栏 |
| 通知 | Watchdog 关闭通知,被打开时改回 | — |
| 从触摸屏边缘滑入 | Kiosk 设置(Settings_All.cmd)将其关闭 —— 这是整台电脑的设置,Watchdog 发现不一致时 只报告 | — |
| 刚开机后 | — | 安装时运行的加固会 把任务栏从自动启动中去掉 |
| 窗口模式时 | — | 若开启了隐藏光标,播放器会关闭任务栏(备用) |
⚠️ 光标只在播放器窗口上方隐藏 —— 在播放器未覆盖的画面(第二台显示器等)上仍可见(Windows · Linux 相同)。
🔵 播放器不在画面上时,任务栏 · 光标会显示 —— 关闭播放器(F4)或收起(F11)后,任务栏和光标会重新出现,可以立即使用这台 PC;播放器重新显示时,会恢复为 用户选择的状态(用 F9 · F10 选择的 —— 未选择时两者都隐藏)。播放器意外停止时,Watchdog 也会恢复任务栏和光标。
安装后需要确认的事项
Section titled “安装后需要确认的事项”播放器首次启动时会自动找到 CMS 并注册。无需人工注册。
CMS 管理后台的**设备管理(기기관리)**列表中出现该设备即表示成功。
运行安装检查 — check-install.ps1
Section titled “运行安装检查 — check-install.ps1”安装包(C:\treet)中附带了一个检测安装是否正确的脚本。
它会检查那些仅凭屏幕有画面看不出来的问题。
在终端 PC 上打开 PowerShell,逐行运行。
安装之前 — 以当前值为基准记录下来(有了它才能判断*“设置是否被保留”*):
powershell -ExecutionPolicy Bypass -File C:\treet\check-install.ps1 -Before安装之后 — 检查后置条件:
powershell -ExecutionPolicy Bypass -File C:\treet\check-install.ps1 -After即使没有记录 -Before,-After 也能运行。只是它只能说明*“当前值是这样”*,
无法说明哪些发生了变化。
填写 CMS 地址 — 在播放器画面上(仅首次一次)
Section titled “填写 CMS 地址 — 在播放器画面上(仅首次一次)”播放器刚安装完时带着开发默认值(127.0.0.1)。需要在该 PC 上填写一次,
它才能找到 CMS。手动操作只有这一次,之后都在 CMS 中修改。
通过键盘快捷键操作 — 无需打开文件。
| 按键 | 作用 |
|---|---|
| F8 | 打开设置界面 ← 在这里填写 CMS 地址 |
| F11 | 暂时收起画面(最小化) |
| F10 | 开启/关闭全屏 —— 会记住所选状态(重启后保持) |
| F9 | 显示/隐藏鼠标指针和任务栏(Linux 也包括树莓派任务栏) —— 会记住所选状态 |
| F4 | 退出播放器 |
- 在播放器运行的状态下按 F8。
- 在 CMS 주소(CMS 地址)栏中填写该现场的 CMS 地址 — 例:
http://192.168.0.10:8080 - 🔴 同时填写
MQTT 사이트(MQTT 站点)栏 — 与安装 CMS 时询问的站点名称完全一致 (包括大小写)。⚠️ 如果留空,画面会显示,但远程指令永远不会到达 — 消息代理 会以主题权限将其拦截,而且不会出现任何错误提示。 - MQTT 주소(MQTT 地址)栏:如果与 CMS 在同一台机器上,只填 CMS 地址的主机部分(例:
192.168.0.10)。 - 保存后,播放器会用该地址找到 CMS 并自动注册。
即使树莓派 · Linux 没有中文字体,设置画面 · 启动画面中的韩文 · 日文 · 中文也能正常显示 —— 播放器自带字体(安装包增大约 13MB)。不从互联网下载,封闭网络中也可使用。
如何确认是否正确生效(请勿跳过)
Section titled “如何确认是否正确生效(请勿跳过)”重启播放器后,打开该 PC 上的
%APPDATA%\TreeTview\logs\main_<今天日期>.log查看最下方的 [사이트설정](站点设置)行。
| 显示的行 | 含义 |
|---|---|
[사이트설정] 확인 — CMS 주소·MQTT·CA 설정에 걸리는 것 없음.(CMS 地址、MQTT、CA 设置均无问题) | ✅ 通过 |
✗ CMS 주소가 아직 개발 기본값입니다 (http://127.0.0.1)(CMS 地址仍为开发默认值) | ❌ path.baseUrl 未生效 |
✗ mqtt.host 가 아직 개발 기본값입니다 (127.0.0.1)(mqtt.host 仍为开发默认值) | ❌ mqtt.host 中仍留有开发默认值。🔵 修复方式不是填入值,而是清空它(清空后会跟随 baseUrl)。仅在使用封闭网络的边缘中继时才填写地址 |
✗ mqtt.site 가 기본값 "site" 입니다(mqtt.site 为默认值 “site”) | ❌ MQTT 사이트 栏为空 — 远程指令不会到达 |
· 사이트 CA 가 아직 없습니다(尚无站点 CA) | 如果尚未首次注册,这是正常的(不是错误) |
🔴 地址错误时的症状看起来不像”故障”。画面会正常全屏显示, Watchdog 会每隔几分钟反复重新拉起播放器。表面上看就是*“开着机,但就是 没有内容”*。上面这行日志是唯一准确的信号。
设备证书无需人工放置
Section titled “设备证书无需人工放置”播放器首次向 CMS 注册时,会自行生成密钥、申请签发证书并保存。 无需准备或复制任何东西 — 只要地址正确,其余都会自动完成。
可能需要人工放置的只有 https 现场的站点 CA 这一项 (参阅下文*“以 IP 作为地址的现场”*)。
其他程序也需要 CMS 地址
Section titled “其他程序也需要 CMS 地址”只改播放器还不够。一起安装的程序也各自连接 CMS。
| 程序 | 要修改的文件 | 要修改的项 |
|---|---|---|
| Watchdog | C:\ProgramData\TreeT\Watchdog\watchdog.json | appCheck.cmsUrl |
| SyncServer(仅使用它的现场) | C:\Program Files\TreeT\SyncServer\SyncServer.json | cms.url |
| MqttEdge(仅内网隔离现场) | 安装文件夹中的 conf.d\site.conf | 中央消息代理地址 |
用命令修改的方法 —— 不打开文件也能只修改地址。 在管理员 PowerShell 中逐行执行:
& "C:\Program Files\TreeT\Watchdog\Watchdog.exe" --configure 192.168.0.10& "C:\Program Files\TreeT\SyncServer\SyncServer.exe" --configure 192.168.0.10- 只写地址时会变成
https://192.168.0.10:8443。http 现场请加上--scheme=http(http://192.168.0.10:8080)。 - 只想先看看时加上
--dry-run—— 只显示会改动几处,不写入。 - 修改前的原文件会以
.bak保留在同一文件夹。 - 旧版 Watchdog 执行此命令会以
watchdog.json 을 못 찾았습니다(找不到文件)停止 —— 这时请按下文用记事本修改。 - 无论用命令还是记事本,修改后都要重新启动才会生效(见下表)。 用记事本修改的方法 — 以管理员身份打开记事本,只修改该文件中的地址。
端口已预先填写在两个栏中 — httpPort(明文入口,默认 8080)· httpsPort(安全入口,默认 8443)。只有 CMS 使用其他端口的现场才需要修改。
通过 https 连接时(例:https://192.168.0.10:8443),caFile 保持为空 — Watchdog 会通过 httpPort 从 CMS 获取一次站点 CA 并保存,
并把它的指纹写入日志。请与 CMS 设置画面上的站点 CA 指纹核对一次。
watchdog.json 是以 [ 开头的列表,地址位于第一个 { … } 块中的 appCheck 里。
只修改那一行,其余的值保持不变 — 尤其是如果清空 signerThumbprints,自动更新会被关闭。
下面是 CMS 为 192.168.0.10:8080 的现场的完整文件。
[ { "autoHide": true, "updateLock": { "file": "%APPDATA%\\TreeTview\\update.lock", "maxHoldMinutes": 10 }, "startupDelayMs": 30000, "appCheck": { "cmsUrl": "http://192.168.0.10:8080", "caFile": "", "httpPort": 8080, "httpsPort": 8443, "tokenFile": "%APPDATA%\\TreeTview\\data\\device-token.json", "intervalMs": 600000, "autoApply": true, "downloadDir": "%APPDATA%\\TreeTview\\data\\update", "signerThumbprints": [ "1CAE827334F20023B720E10A3460FEA788F2DD8B" ], "nodeHeartbeatInterval": 60000 } }, { "processName": "TreeTview.exe", "execPath": "%LOCALAPPDATA%\\TreeT\\TreeTview\\TreeTview.exe", "execArgv": [], "heartbeatTimeout": 30000, "scheduledTask": "TreeTview" }, { "processName": "SyncServer.exe", "execPath": "%ProgramFiles%\\TreeT\\SyncServer\\SyncServer.exe", "execArgv": [], "program": "SyncServer" }, { "processName": "mosquitto.exe", "execPath": "C:\\ProgramData\\TreeT\\MqttEdge\\vendor\\win64\\mosquitto.exe", "execArgv": ["-c", "mosquitto.conf"], "workingDir": "C:\\ProgramData\\TreeT\\MqttEdge", "program": "MqttEdge", "logFile": "logs/mosquitto.log" }]- 路径中的
\\是 JSON 语法,保持两个不变。 - 在没有 MqttEdge 的 PC 上,Watchdog 会自动跳过
mosquitto.exe块 — 无需删除。 - 保存时编码为 UTF-8。
SyncServer 只需修改 cms 块中的一行(这里本来就没有 /treetweb):
"cms": { "url": "http://192.168.0.10:8080",修改后需要重启该程序才能生效。
| 程序 | 重启方法 |
|---|---|
| Watchdog | 任务计划程序 → Watchdog 任务 → 结束后运行(管理员) |
| SyncServer | 任务计划程序 → SyncServer 任务 → 方法相同。或注销后重新登录 |
| TreeTview(播放器) | 任务计划程序 → TreeTview 任务 → 结束后运行。监护程序也会在 10 秒内自动将其拉起 |
确认是否正确生效 — Watchdog 启动时会在自己的日志中输出地址:
C:\Program Files\TreeT\Watchdog\logs\server_<今天日期>.log| 显示的行 | 含义 |
|---|---|
업데이트 확인 시작 (10분 주기, CMS http://192.168.0.10:8080)(开始检查更新,10 分钟周期) | ✅ 正在连接该地址(周期数值取决于 intervalMs) |
업데이트 확인이 설정돼 있지 않습니다(watchdog.json 의 appCheck.cmsUrl)(未设置更新检查) | ❌ 该项为空 |
在 CMS 中确认更可靠 — 即使日志中的地址正确,如果路径(/treetweb)错误,也无法注册。
在 设备管理(기기관리) 中打开该 PC 上的设备,如果 设备设置 选项卡的 此 PC 上的程序 中在 1~2 分钟内出现 Watchdog · SyncServer,
并且最后应答在 방금(刚刚)~1분 전(1 分钟前),就说明成功了(如果尚未关联到 PC,会先出现在设备管理列表上方的 PC 미확인 프로그램 行中)。如果没有出现,请先重新检查地址。
用 PowerShell(管理员)重启时,逐行执行:
Stop-Process -Name Watchdog -ForceStart-ScheduledTask -TaskName WatchdogStop-Process -Name SyncServer -ForceSyncServer 很快会被 Watchdog 重新拉起 — 因此随后仪表盘上出现一行*“SyncServer.exe 이(가) 죽어 있어 다시 띄웠습니다”*(SyncServer.exe 已停止,已重新启动) 是正常的。
安装后会注册为登录该 PC 时自动启动。无需另行操作。
以 IP 作为地址的现场(HTTPS)
Section titled “以 IP 作为地址的现场(HTTPS)”如果 CMS 地址使用域名,可以使用公共证书,无需额外操作。 而通过 IP 地址访问的现场使用的是该站点专用的证书,因此需要让终端信任它, 登记一次即可。
登记通过导入时提供的工具完成,现场负责人只需核对指纹。