跳转到内容

现场部署

这是在一个现场搭建 TreeT 的整体顺序。(安装文件和详细步骤会随导入时提供的部署安装包一同 说明。)

安装前请准备以下内容。原则上每个角色使用不同的设备,也可根据规模合并。

角色数量需要准备
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 及以上,同时连接内网和外网的设备

这是设置防火墙、路由器时使用的表格。请先注意方向有两种 — 大多数是终端 向服务器发出连接,只有远程控制这一项方向相反,是进入连接。

端口用途连接对象被阻断时
8443CMS 安全连接 — 注册·设置·排播·内容下载CMS(或 MqttEdge)画面不会切换到新排播
8080CMS 明文连接 — 不使用 https 的现场CMS同上(〃)
8883MQTT(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 自动寻找空闲编号)。

端口用途被阻断时
5900VNC 远程控制 — 直接查看并操作该屏幕远程控制按钮打不开

🔴 **只有这一个方向相反。**即使打开了其他所有端口,漏掉这个也只会导致远程控制不可用 — 而且其余功能都正常,很难找到原因。如果每台设备使用不同端口,请在设备管理 → 设备页面顶部的 编辑基本信息 → 远程连接 栏中填写 地址[:端口](管理员及以上)。

仅管理端使用的端口(与终端无关)

Section titled “仅管理端使用的端口(与终端无关)”
端口用途
4822 · 8080Guacamole 内部通信
5500 · 5901VNC 中继器(内网隔离结构中的服务器端 · 播放器端)

🔵 数据库端口(3306)不对外开放。 只在堆栈内部通信。

如果有边缘中继器,终端只会连接边缘中继器,不直接连接 CMS。边缘中继器会向现场侧开放 8883(MQTT)和 8443(内容代理),对外则只有边缘中继器向中央发出的一条连接。

⭐ 因此即使在内网隔离环境中,也无需在路由器上开放外部进入的端口 — 因为边缘中继器 只使用向外发起的连接。

🔵 请按此顺序操作。尤其不能调换第 2 步和第 3 步 — CMS 地址是在播放器画面上 填写的,所以必须先装好播放器。

  1. 安装 CMS — 在 CMS 主机上搭建服务器,并确定访问地址(IP/域名 + 端口)。 → CMS 服务器安装
  2. 在终端上安装程序 — 安装播放器(+ 监护程序,需要时加装同步服务器)。 → 见下文*“在终端 PC 上安装”*
  3. 填写 CMS 地址 — 在播放器画面按 F8。监护程序和同步服务器可在安装时填写(自相应版本起),或之后通过命令、文件填写。 → 见下文*“填写 CMS 地址”* · “其他程序也需要 CMS 地址”
  4. 🔴 确认是否已生效 — 亲眼查看播放器日志中的 [사이트설정] 확인(站点设置 确认)行。 → 见下文*“如何确认是否正确生效”*。跳过这一步,后面出问题时将无从查找原因。
  5. (仅 HTTPS + IP 地址现场)登记信任服务器证书 — 见下文*“以 IP 作为地址的现场”*。
  6. 设备注册 + 排播 — 地址正确时,播放器会自动向 CMS 注册(设备证书也会 自动签发)。在 CMS 管理后台设置内容和排播。程序的新版本 按 CMS 的更新方式(自动 · 手动)由所有设备共同接收 (管理后台)。

各程序**所需的权限不同。**规划安装顺序时请事先了解。

程序安装权限安装位置
TreeTview(播放器)普通用户该用户的个人文件夹
🔴 SyncServer(同步)管理员程序文件夹(公用)
🔴 Watchdog(监护)管理员程序文件夹(公用)
🔴 MqttEdge(内网隔离中继)管理员公用文件夹

以普通用户身份安装的只有播放器,它按账户分别安装 — 如果同一台 PC 由多人使用, 需要用对应的账户登录后安装。

除了直接运行安装文件,也可以在播放器画面上检查并安装。 CMS 有要下发给该设备的新版本时(程序版本), 在现场这样操作:

  1. 在播放器中按 F8 打开设置界面。
  2. 在程序更新一项中点击 [확인](确认) — 会显示当前版本和状态。
  3. 如有可安装的版本,[지금 설치](立即安装) 按钮会变为可用。

Linux 设备的更新 — 没有安装程序

Section titled “Linux 设备的更新 — 没有安装程序”

Linux 没有像 Windows 那样的安装文件(.exe)。安装本身是一个压缩文件(.tar.gz), 其中包含记录每个文件校验值的清单,以及该清单的签名。 从 CMS 接收新版本的方式(运营时间外 · [지금 설치](立即安装))与 Windows 相同。

WindowsLinux
收到的文件安装文件(.exe)压缩文件(.tar.gz) + 已签名的文件清单
安装方式静默运行安装文件解压到新文件夹后替换文件夹
校验内容文件签名清单的签名 + 每个文件的校验值
未能启动时需要人工查看自动回退到旧文件夹

CMS 搭好后,在要显示画面的每一台终端 PC 上进行。

安装文件位于安装包的 설치파일\(安装文件)文件夹中(C:\treet\설치파일\) — 参阅 CMS 安装手册的*“开始之前”*。 🔴 请把整个文件夹移到终端 PC 上,在该 PC 上运行 — 安装文件是 以自身所在的文件夹为基准运行的。

⚠️ 请把安装包中的 TreeT_코드서명_공개인증서.cer(代码签名公钥证书)也一起带去。如果不先登记它, 自动更新会静默失败(参阅上文*“安装与更新”*)。

顺序程序是否必需
1TreeTview — 显示画面的播放器✅ 必需
2Watchdog — 播放器退出时将其重新拉起,并代为安装新版本✅ 推荐(无人值守现场实际上必需)
3SyncServer — 仅在需要多块屏幕同步切换时仅需要的现场
4🔴 UltraVNC — 如需在 CMS 中查看这台设备的画面✅ 推荐

不让任务栏 · 通知出现在画面上方

Section titled “不让任务栏 · 通知出现在画面上方”

播放器处于 全屏(Kiosk) 时,位于任务栏 之上。即使通知或其他窗口短暂夺走焦点,任务栏也不会出现在播放器上方。用快捷键退出全屏进入 窗口模式 后,它会像普通窗口一样降下去。

WindowsLinux(树莓派)
播放器全屏时播放器覆盖任务栏窗口管理器(labwc)自行隐藏任务栏 —— 播放器不会关闭任务栏
通知Watchdog 关闭通知,被打开时改回—
从触摸屏边缘滑入Kiosk 设置(Settings_All.cmd)将其关闭 —— 这是整台电脑的设置,Watchdog 发现不一致时 只报告—
刚开机后—安装时运行的加固会 把任务栏从自动启动中去掉
窗口模式时—若开启了隐藏光标,播放器会关闭任务栏(备用)

⚠️ 光标只在播放器窗口上方隐藏 —— 在播放器未覆盖的画面(第二台显示器等)上仍可见(Windows · Linux 相同)。

🔵 播放器不在画面上时,任务栏 · 光标会显示 —— 关闭播放器(F4)或收起(F11)后,任务栏和光标会重新出现,可以立即使用这台 PC;播放器重新显示时,会恢复为 用户选择的状态(用 F9 · F10 选择的 —— 未选择时两者都隐藏)。播放器意外停止时,Watchdog 也会恢复任务栏和光标。

播放器首次启动时会自动找到 CMS 并注册。无需人工注册。

CMS 管理后台的**设备管理(기기관리)**列表中出现该设备即表示成功。

安装包(C:\treet)中附带了一个检测安装是否正确的脚本。 它会检查那些仅凭屏幕有画面看不出来的问题。

在终端 PC 上打开 PowerShell,逐行运行。

安装之前 — 以当前值为基准记录下来(有了它才能判断*“设置是否被保留”*):

Terminal window
powershell -ExecutionPolicy Bypass -File C:\treet\check-install.ps1 -Before

安装之后 — 检查后置条件:

Terminal window
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退出播放器
  1. 在播放器运行的状态下按 F8。
  2. 在 CMS 주소(CMS 地址)栏中填写该现场的 CMS 地址 — 例:http://192.168.0.10:8080
  3. 🔴 同时填写 MQTT 사이트(MQTT 站点)栏 — 与安装 CMS 时询问的站点名称完全一致 (包括大小写)。⚠️ 如果留空,画面会显示,但远程指令永远不会到达 — 消息代理 会以主题权限将其拦截,而且不会出现任何错误提示。
  4. MQTT 주소(MQTT 地址)栏:如果与 CMS 在同一台机器上,只填 CMS 地址的主机部分(例:192.168.0.10)。
  5. 保存后,播放器会用该地址找到 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 会每隔几分钟反复重新拉起播放器。表面上看就是*“开着机,但就是 没有内容”*。上面这行日志是唯一准确的信号。

播放器首次向 CMS 注册时,会自行生成密钥、申请签发证书并保存。 无需准备或复制任何东西 — 只要地址正确,其余都会自动完成。

可能需要人工放置的只有 https 现场的站点 CA 这一项 (参阅下文*“以 IP 作为地址的现场”*)。

只改播放器还不够。一起安装的程序也各自连接 CMS。

程序要修改的文件要修改的项
WatchdogC:\ProgramData\TreeT\Watchdog\watchdog.jsonappCheck.cmsUrl
SyncServer(仅使用它的现场)C:\Program Files\TreeT\SyncServer\SyncServer.jsoncms.url
MqttEdge(仅内网隔离现场)安装文件夹中的 conf.d\site.conf中央消息代理地址

用命令修改的方法 —— 不打开文件也能只修改地址。 在管理员 PowerShell 中逐行执行:

Terminal window
& "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(管理员)重启时,逐行执行:

Terminal window
Stop-Process -Name Watchdog -Force
Terminal window
Start-ScheduledTask -TaskName Watchdog
Terminal window
Stop-Process -Name SyncServer -Force

SyncServer 很快会被 Watchdog 重新拉起 — 因此随后仪表盘上出现一行*“SyncServer.exe 이(가) 죽어 있어 다시 띄웠습니다”*(SyncServer.exe 已停止,已重新启动) 是正常的。

安装后会注册为登录该 PC 时自动启动。无需另行操作。

如果 CMS 地址使用域名,可以使用公共证书,无需额外操作。 而通过 IP 地址访问的现场使用的是该站点专用的证书,因此需要让终端信任它, 登记一次即可。

登记通过导入时提供的工具完成,现场负责人只需核对指纹。