运维与安全
运维与安全
日常检查
docker compose ps
docker compose logs --tail 200 remoteci
Invoke-RestMethod https://remoteci.example.com/api/health同时在管理页面确认插件在线、手表连接数和最近一次课表同步时间。日常巡检可直接打开 WebUI“设备状态”:离线、待升级和档案与服务端不一致的教室电脑一目了然;在校时段的离线告警会主动推送给系统管理员和班主任。需要追查某次关机、通知或换课是谁发起的,查看“操作记录”。
备份
SQLite 数据库包含账号、权限、会话、插件凭据、API Key 摘要、全局档案模板和班级工作副本(完整 JSON 与修订信息)。为避免复制到一半的数据库,建议短暂停止容器后备份整个数据目录:
docker compose stop remoteci
Copy-Item -Recurse .\data ".\backup\data-$(Get-Date -Format yyyyMMdd-HHmmss)"
docker compose start remoteci备份文件与生产数据库具有同等敏感性,应加密保存并限制访问。
登录页背景图保存在数据库的 SystemMetadata 表中,会随数据目录一起备份;导出加密配置包只包含主题、背景不透明度与登录卡片位置三项标量设置,不包含背景图,换机器部署后需要在“登录页设置”重新上传。
加密配置备份 schema 7 在此基础上还包含集控运维设置(离线告警、操作记录保留天数、每日档案差异检查)与自动化规则;恢复 schema 6 及更早的配置包时保留当前的这些设置与规则。操作记录、设备在线记录、课时台账和档案历史版本属于运行数据,只随数据库文件备份,不进入配置包;电子班牌链接在恢复配置包后需要重新生成。
加密配置备份 schema 5 包含服务器档案库和班级工作副本,恢复后保留档案 JSON、来源模板和修订信息;旧备份没有档案数据时按空库恢复,需要重新上传或新建。这些是服务器上的工作档案,备份不会读取或保存教室电脑当前档案。
恢复
- 停止容器。
- 备份当前数据目录。
- 用同一版本或兼容版本的备份替换数据目录。
- 启动容器并检查迁移日志和健康检查。
- 验证管理员登录、插件连接、手表登录,以及档案库与班级副本。
不要在容器运行时直接覆盖 SQLite 文件。
升级
服务端、插件、手表和 ClassIsland 主程序使用不同的升级方式:
- 服务端:管理员登录 WebUI 后,在“系统配置 → 系统更新”选择正式版或 Beta 渠道并点击“检查更新”。正式版排除预发布,Beta 同时包含正式版和预发布;启用强制更新后可重新下载并覆盖同一版本,但不会降级。Docker 会就地替换后由
restart: unless-stopped重新启动;Windows 与裸机 Linux 会启动独立更新器,等待旧进程退出和文件锁释放后再替换实际程序集目录并自动重启。更新前会核对包内服务端版本与 release 标签。Visual Studio 或dotnet run的 Development 环境由构建工具管理,WebUI 会禁用在线覆盖更新,避免 release 写入源码目录。 - 手动上传更新包(调试):在“系统配置 → 系统更新”展开“手动上传更新包(调试)”,选择当前平台的服务端发布包 zip(页面会显示平台,如
win-x64;可以是 GitHub Release 中的RemoteCI.Server-版本-平台.zip,也可以是本地dotnet publish输出打成的 zip,多包一层目录也能识别),确认后按与在线更新相同的流程安装并重启。上限 512MB;不校验 SHA-256,版本号取自包内RemoteCI.Server.dll,允许同版本覆盖和降级——降级后若数据库已被新版本迁移,旧版本可能无法启动(Windows、裸机 Linux 与数据卷安装会在启动失败时自动退回原版本)。脚本可调用POST /api/admin/updates/upload。 - 插件:默认仍由 ClassIsland 插件市场统一管理;管理员也可在 WebUI“批量控制”页勾选一台或多台在线设备批量触发官方插件升级。插件包仍使用同一个四段纯数字多端 Release,固定资产名为
RemoteCI.Plugin.cipx,Release 正文携带同名文件的 MD5 标记;Beta 使用v3.x.x-beta.y,仅供三端测试,不进入市场。升级命令只代表设备已接受任务,下载完成后 ClassIsland 会重启并重新上报版本。 - 手表:连接 WebUI 后,在“设置 → 更新”选择正式版或 Beta 渠道;可强制重新下载并覆盖同一版本,但不能降级。稳定渠道只选择协议主版本相同的四段纯数字 Release,Beta 额外选择
v3.x.x-beta.y及在 GitHub 标为预发布的四段 Release,旧三段v3.x.x稳定标签不再作为新候选;通过系统安装器覆盖安装时仍要求发布包与当前安装包签名一致。 - 飞牛 fnOS:WebUI 提示由 fnOS 应用中心管理;从 GitHub Release 下载在线或对应架构离线 FPK 后手动升级。
- ClassIsland 主程序:管理员可在 WebUI“批量控制”页勾选在线设备,使用 ClassIsland 官方更新服务批量升级主程序。该流程会校验官方文件图并在部署后自动重启,失败或已是最新版本时不会重启。
个人账号页的“修改密码”与系统配置页的“系统更新”位于不同页面和独立表单:检查或执行更新不会校验密码字段,只有提交密码修改按钮时才会校验当前密码、新密码和确认新密码;人员管理中的“重置密码”也要求填写确认新密码,两次输入必须一致。
人员管理页的 Excel 批量导出不包含密码列。导出的文件带有隐藏系统标识和导出范围信息,可修改后用于覆盖导入;覆盖导入只更新文件中出现的班级成员关系,文件中缺失的关系会保留,不会读取、重置或覆盖账号密码,并在发现任一错误时保持整批不写入。
班级管理页的 Excel 导入导出用于批量维护班级与分组,同样在发现任一错误时保持整批不写入,但覆盖导入只新增与修改、不会删除班级或分组。删除班级会移除成员关系与插件凭据,因此只能由管理员在班级管理页显式执行,不会由上传的文件触发。
升级前应先备份数据库卷。三端软件版本可以不同,但必须保持协议号为 3;不支持的新功能由能力协商隐藏,破坏性协议变更必须升级到 V4 并协调升级。
3.2.1.2 是从旧 v3.2.0 三段稳定标签切换后首个实际发布的 ClassIsland 四段纯数字版本。旧更新器不会自动发现新标签,首次迁移必须手动安装服务端或 FPK、RemoteCI.Plugin.cipx 和 RemoteCI.Watch-3.2.1.2.apk;之后稳定版可按四段数字标签自动更新。
手动升级服务端时:
docker compose stop remoteci
# 先备份 remoteci-data 卷,再构建或拉取新镜像。
docker compose up -d
docker compose logs --tail 200 remoteci安全清单
- 公网入口仅开放 443,并启用有效 HTTPS 证书。
- 8080 只绑定到回环地址或受信任的容器网络。
- 初始密码至少 8 位,实际部署建议使用随机长密码。
- 不在 Compose 文件、截图或问题反馈中公开密码、令牌、配对码和 API Key。API Key 只在创建时显示一次,泄露后应立即在“个人账号”或“人员权限”中吊销。
- 普通用户按最小权限分配,设备丢失后立即撤销会话。
- “发送与清除通知”(SendNotifications)保护自定义通知和清除提醒;“扩展功能”(RunExtensions)是插件扩展的独立总权限;“主界面”(MainMenuControl)保护主界面显隐;“电源控制”(PowerControl)保护音量与电源操作。旧版协议中的隐藏权限位仅为兼容旧数据保留;用户名(显示名)只能由系统管理员修改,因为它是老师关联课表的依据;“修改用户名”(ChangeDisplayName)权限位仅为兼容旧数据保留。
- 远程终端和文件分发可在教室电脑上执行任意命令或写入文件,只有系统管理员可以使用;应妥善保护管理员账号,并在不需要时避免日常使用管理员身份登录。
- 定期备份并实际演练恢复。
- 定期更新服务端镜像、插件和手表应用。