完整部署手册

适用对象:实施工程师、信息化负责人 · 从硬件到可用,完整生产环境部署
这份文档和快速入门的区别 30 分钟快速部署是为了验证系统可用性。这份手册是正式生产环境的完整部署指南,覆盖 60 台规模的所有配置细节。

硬件清单与选型

60 座位机房参考配置

设备 数量 配置要求 参考价格
服务器 1 台 16 核+ CPU / 128GB+ 内存 / SSD 或 NVMe 存储 约 3-5 万
千兆交换机 1-2 台 48 口千兆管理型交换机 约 2000 元
教师电脑 1 台 普通 Windows 10/11 电脑 已有即可
学生终端(瘦客户机) 60 台 2 核 / 2GB / 8GB / Debian Linux 约 1000 元/台

60 座位总投入参考区间:约 10-12 万元。相比传统 60 台高配 PC 机房(约 30 万),节省 60% 以上。

价格说明 60 座位价格为参考区间,实际按规模、教室数量和现有设备情况报价。价格只公开总价和节省比例,不公开单台终端单价。

服务器选型建议

PVE 安装与配置

安装 Proxmox VE

  1. 从 清华镜像 下载 PVE ISO
  2. 制作 U 盘启动盘(Rufus / dd / Ventoy)
  3. 服务器从 U 盘启动,按向导安装
  4. 管理网口设置静态 IP(如 192.168.10.251),这是教师端和终端访问 PVE API 的地址
  5. 安装完成后浏览器访问 https://服务器IP:8006
PVE 安装的详细步骤、磁盘分区、网络配置请参考 PVE 官方文档。

云课堂特有的 PVE 配置

1. 创建网桥 vmbr0

安装 PVE 时默认会创建 vmbr0。确认它的配置:

# /etc/network/interfaces
auto vmbr0
iface vmbr0 inet static
    address 192.168.10.251/24
    bridge-ports enp1s0
    bridge-stp off
    bridge-fd 0

2. 配置 SPICE 协议(让远程桌面不卡的关键技术)支持

云课堂使用 SPICE 协议传输桌面。确认 PVE 已安装 SPICE 相关组件(PVE 8.x 默认已集成)。

3. 性能调优(可选)

60 台规模建议根据物理核数调整 pveproxy 和 pvedaemon 的 worker 数量:

# 查看 PVE 源码默认值
grep -r 'max_workers' /usr/share/perl5/PVE/Service/

# 保守调优规则:
# ≤2 核 → 3 workers
# ≤4 核 → 4 workers
# ≤8 核 → 6 workers
# 9+ 核 → 8 workers(16 核服务器推荐值)
# 检测失败 → 回退到 4 workers
不要超过 1.5-2 倍物理核数 Worker 数量过高会引发 CPU 争抢,反而降低性能。当前 16 核服务器推荐值为 8。

网络规划

单机方案(最常见)

所有设备接同一交换机,同一网段。这是 90% 学校的部署方式。

服务器 (192.168.10.251)
    |
交换机 (192.168.10.x/24)
    |--- 教师电脑 (DHCP 或固定 IP)
    |--- 终端 T01 (192.168.10.101,教师端分配)
    |--- 终端 T02 (192.168.10.102)
    |--- ...
    |--- 终端 T60 (192.168.10.160)

IP 分配规则

终端 IP 不是 DHCP,是教师端注册时静态计算下发:

终端 IP = terminal_start_ip + (terminal_id - start_number)

示例:
  terminal_start_ip = 192.168.10.101
  start_number = 1
  T01 → 192.168.10.101 + (1-1) = 192.168.10.101
  T02 → 192.168.10.101 + (2-1) = 192.168.10.102
  T60 → 192.168.10.101 + (60-1) = 192.168.10.160
注意 IP 段冲突 terminal_start_ip 和 vm_start_ip(VM 内部 IP)是两个不同的段。终端本机 IP 给终端用,VM 内部 IP 仅供 PVE 校验。

IPv6 链路本地通信

教师端和终端之间的发现和心跳走 IPv6 链路本地地址(fe80::),不需要额外配置 IPv6。教师端启动后每 30 秒向 ff02::1 发空 UDP 宣告。

如果终端无法发现教师端,参考 IPv6 discover 故障排查。

多微机室部署要求(重要)

多个机房严禁接入同一二层网络(同一交换机 / 同网段广播域)。终端通过扫描网络来发现教师端,PXE 部署也依赖网段内广播——两个机房混在同二层会发生:

三种合规做法任选其一:

方案做法适用
一、分开部署两个机房不在同一时间开启教师端和 PXE 服务器(部署是广播敏感操作,错峰使用)无法改网络的存量机房
二、VLAN 隔离每个机房划分独立 VLAN + 独立网段交换机可控的标案机房(推荐)
三、小路由器隔离每个机房放置一台小路由器接入学校网络,机房内网与学校内网隔离(路由器 WAN 接校内,LAN 为机房自有网段)要求与校内网隔离的场景

Windows 模板镜像制作

模板是所有学生桌面的基础镜像。模板做好一次,后续克隆都基于它。

制作步骤

  1. 在 PVE 创建新 VM(编号建议 9000-9999 范围作为模板编号)
  2. 分配配置:4 核 / 4GB 内存 / 40-60GB 磁盘
  3. 挂载 Windows ISO + virtio 驱动(让虚拟机跑得更快的专用驱动) ISO
  4. 开机安装 Windows(推荐 Win10 LTSC 或 Win11 LTSC)
  5. 安装 virtio 驱动:网卡、磁盘、显卡、气球
  6. 安装 SPICE Guest Tools(让远程桌面更流畅的辅助程序)
  7. 配置 USB 重定向支持(spice usbredir)
  8. 关闭:Windows 自动更新、休眠、屏幕保护、防火墙(测试环境)
  9. 安装课程软件
  10. 关机,在 PVE 中转为模板(Convert to Template)
首页不要写 Windows 版本号 对外页面只写"Windows 桌面"。具体版本号在系统组成页或部署文档里写。不同学校可能用 Win7/Win10/Win11。

教师端安装与配置

安装

  1. 从 下载中心 获取教师端安装包
  2. 解压到 Windows 电脑任意目录(免安装)
  3. 主要文件:
    • communication_module.exe:后端,负责终端注册、心跳、PVE 控制、IPv6 宣告
    • teacher_lite.exe:前端界面,老师日常使用

初始配置

首次打开教师端,在设置中配置以下参数:

参数说明示例
PVE 服务器 IPPVE 管理地址192.168.10.251
PVE 用户名PVE 管理用户名root
PVE 密码PVE root 密码—
模板 VM 编号PVE 中的模板 VM ID9000
终端起始 IP终端本机 IP 段起始192.168.10.101
VM 起始 IPVM 内部 IP 段起始192.168.10.201
终端起始编号编号从几开始1
用户名只填 root 不需要手动加 @pam 后缀。系统在下发配置给终端时,会自动检查并补全 @pam 后缀(见 communication_module.py L117-119)。

启动顺序

  1. 先启动 communication_module.exe(后端)
  2. 等后端日志显示 "listening" 后,再启动 teacher_lite.exe(前端)

终端程序部署

单台终端部署

  1. 瘦客户机安装 Debian Linux
  2. 配置网络为 systemd-networkd(不要用 ifupdown)
  3. 将终端程序文件放到 /home/vdi/:
    • terminal_student.py(主程序)
    • discover_teacher.py(发现模块)
    • terminal_heartbeat.py(心跳模块)
    • terminal_ws_manager.py(WebSocket 管理)
    • terminal_launcher_v1_5_006.py(启动器)
  4. 配置 terminal_launcher 为开机自启
  5. 接上网线,上电

批量克隆终端

60 台终端不建议逐台装。推荐做法:

  1. 装好 1 台完整终端(含所有程序和配置)
  2. 用 Clonezilla 或 dd 做磁盘镜像
  3. 批量克隆到其他 59 台
  4. 注意:克隆后的终端必须自己发现教师端注册,不能手动写 terminal_id
克隆后不要手动配 IP 或 terminal_id 终端上电后会自己 discover 教师端、注册、获取编号和 IP。手动写 teacher_ip6、手动 TCP connect、手动改 .terminal_config 都属于违规操作。

Guest 程序部署

Guest 程序运行在 VM 内部(Windows 或 Linux Guest),负责 Guest 级别的初始化、心跳和与教师端的联动。

部署方式

Guest 初始化流程

  1. VM 从模板克隆并首次启动
  2. guest-init-cli 执行:读取 VM 分配的终端编号、配置网络(如有需要)
  3. guest-service 启动:向教师端发 Guest 心跳(60 秒过期)
  4. 教师端收到 Guest 心跳后,标记此 VM 的 Guest 状态为"活跃"
Guest 心跳 vs 终端心跳 终端心跳在终端本机跑(Debian),告诉教师端"我在线"。Guest 心跳在 VM 内部跑,告诉教师端"VM 里的服务正常"。这是两条独立的链路。

部署完成验证清单

检查项预期结果✓
PVE 版本8.x 正常运行□
vmbr0 网桥UP,IP 正确□
模板 VM 9000已转为 Template□
教师端后端communication_module 日志有 listening + announce□
教师端界面teacher_lite 显示正常□
终端自动发现60 台全部自动注册,分配编号□
开始上课VM 批量克隆启动,终端显示 Windows 桌面□
USB 透传终端插 U 盘,VM 内可见□
结束下课VM 批量回收,终端回到待机□
自由选课切模板后重新上课,桌面正确切换□
预约演示
🤖
智能客服
服务极客 · 随时响应
您好!我是服务极客的智能客服 👋 有什么关于云桌面系统的问题,欢迎随时咨询——上课使用、部署安装、故障排查,都可以问我。
刚刚
您也可以通过以下方式联系我们: