3.2 KiB
Provider Gateway Reference
Provider Gateway 是计算节点侧容器。它只主动连出到主 server 暴露的 provider ingress WebSocket,不要求计算节点有公网 IP,适合 NAT、内网和防火墙后的机器。
Main Server Self Provider
当前主 server 也运行一个 provider-gateway,providerId 固定来自 config.json 的 providerGateway.id。这让单机环境也能验证完整的分布式调度闭环:frontend 发起任务,core 写数据库并通过 provider ingress WebSocket 下发,provider gateway 执行后回传状态。
Provider Ingress
provider ingress 是唯一允许公网暴露的 provider 连接接口,当前由 backend-core 容器的独立端口提供 /ws/provider 和 /health。backend-core REST API 仍只在 Docker 内网开放,外部计算节点只应连接 provider ingress。
Docker Socket Path
自动任务执行只允许走本地 Docker socket。Compose 将 /var/run/docker.sock 挂入 provider-gateway,provider 标签会报告 dockerSocketPresent,docker.ps 调试任务会通过该 socket 查询宿主 Docker 容器。
Docker Status Telemetry
provider-gateway 连接成功后必须周期性上报 Docker daemon 状态,数据来源是本地 Docker socket 上的 docker info、docker ps -a、docker images、docker volume ls 和 docker network ls。backend-core 将最新快照保存到 unidesk_node_docker_status,frontend 的资源节点 Docker 状态 子标签用该快照渲染 Docker Desktop 风格视图;该能力仍然只通过 provider 主动上报,不要求主 server 反向连接计算节点。
System Status Telemetry
provider-gateway 连接成功后必须周期性上报节点 CPU、内存和硬盘用量。采集来源是节点本地 /proc/stat、/proc/loadavg、/proc/meminfo 与 df -PB1,backend-core 将最新快照保存到 unidesk_node_system_status,并将历史采样保存到 unidesk_node_metric_samples 供 frontend 绘制任务管理器风格曲线。该链路仍然由 provider 主动上报,主 server 不反向探测计算节点。
Remote Provider Upgrade
backend-core 可以通过真实 WebSocket 调度向在线 provider 下发 provider.upgrade。mode: "plan" 只返回升级计划,用于 E2E 和人工预检;mode: "schedule" 会要求 provider-gateway 通过本地 Docker socket 启动一个 detached updater 容器,由 updater 在节点本地执行 docker compose up -d --no-deps --build provider-gateway。--no-deps 是强制要求,升级 provider-gateway 时不得重建或停止 database、backend-core、frontend。升级执行路径使用 Docker socket 和只读仓库挂载,不使用 Host SSH 维护桥作为自动调度通道。
Host SSH Maintenance Bridge
宿主 SSH 转发只作为应急维护辅助路径,不用于自动任务调度。实现参考 ../web-terminal 的经验:容器内使用只读挂载的私钥,通过 ssh -tt 主动连接宿主 sshd,并设置 StrictHostKeyChecking=accept-new、ServerAliveInterval 和 ServerAliveCountMax。本仓库保留 src/components/provider-gateway/scripts/host-ssh-shell.sh 作为维护桥接脚本,默认 Compose 不挂载私钥,避免把 SSH 路径误用为调度通道。