Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

ClassIntraOps

ClassIntra(CI)的运维控制台。独立仓库,不依赖 CI 的任何模块。

主要面向零基础用户:下载单文件、双击即用,全程图形界面完成「定位仓库 → 配置密钥 → 启动服务」,无需命令行与开发经验。开发者与需要本地调试的场景请走 CI 快速开始。

⚠️ 测试版声明:ClassIntraOps 当前处于 v0.1 测试阶段,功能与配置格式尚未稳定,后续版本可能包含破坏性变更(配置文件格式、日志位置、数据结构等)。升级前请备份 ClassIntraOps.config.json,并关注 Releases 与 CHANGELOG。

下载:Releases 提供 Windows x64 自包含单文件(如 ClassIntraOps-v0.1-win-x64.exe,约 99MB),下载即用,无需安装 .NET。

使用指引:https://classintra.github.io/ops/(含下载、快速上手、门禁与托盘说明)

形态

双形态组合,按目标机器情况选用:

形态 适用场景 说明
launcher(Avalonia 桌面控制台,主形态) 管理员本机、有桌面的 Windows / Linux Fluent 风格原生窗口:总览 / 密钥 / 跨班 / 安装 / 日志 / 设置 六页,业务逻辑 C# 原生实现
ops-server(Web 控制台,备用形态) 无头 Linux 服务器、远程管理 零第三方依赖,node server.js 直跑;浏览器访问 http://127.0.0.1:9099;从「环境设置」页可一键拉起

快速开始

Avalonia 桌面控制台

# 开发运行
cd launcher
dotnet run -c Release

# 发布单文件(全新机器拷贝这一个 exe 即可,无需安装 .NET)
dotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=true
# 产物: bin/Release/net10.0/win-x64/publish/ClassIntraOps.exe

本机日常使用(推荐):

run-ops.cmd      # 关掉旧实例 → 启动 launcher\dist\ClassIntraOps.exe

构建时若程序正在运行,bin/Release 会被锁住导致编译失败。 用 dotnet build -c Release -p:BaseOutputPath=bin2/ 可以绕开,产物再拷到 dist/。

启动参数:

参数 作用
(无) 正常启动,显示主窗口
--silent / --tray 只驻留托盘,不弹窗;开机自启用的就是它
--diagnose 不开窗口自检「日志 / 搜索 / 班级数据」,结果写 logs/diagnose.txt

已经运行一个实例时,再双击图标会把已有窗口叫出来,不会开第二个。 开机自启在「环境设置」页开启(写 HKCU 的 Run 键,用户级,不需要管理员)。

功能一览:

  • 总览:CPU / 内存 / 磁盘 / 运行时长卡片 + PM2 进程表(状态灯、CPU、内存、重启次数)与启停操作
  • 密钥配置:由 server/.env.example 推导分组表单,密钥打码不回显、留空不覆盖,保存自动备份,一键「应用配置重启」
  • 跨班对端:解析 RELAY_SERVERS,TCP 层探活判在线(不误判 relay 的 426 路径),支持临时探活任意地址
  • 安装更新:从 Gitee 拉源码(GitHub 自动兜底)→ 更新前备份数据库与配置 → 装依赖 → 构建前端 → PM2 启动,输出实时回显,失败即停不回滚
  • 班级初始化:届数 / 班级 / 班管 / 名单一次填完,学号由 CI 自动分配(班管 YYCC00、学生 YYCCnn),装完直接能用,不用再打开 /setup 页面
  • 服务日志:server-out.log / server-error.log 尾部 300 行
  • 环境设置:CI 仓库路径、工具检测(node/pnpm/git/pm2)、拉起 Web 控制台

Web 控制台(无头环境)

node ops-server/server.js
# 打开 http://127.0.0.1:9099,Windows 可双击 ops.bat

功能

  • 欢迎页与门禁:CI 仓库未定位时,欢迎页是唯一落点,密钥 / 跨班 / 日志导航禁用——先让仓库就位,再谈配置;定位完成自动进入「配置密钥」
  • 总览:CPU / 内存 / 磁盘 KPI 仪表 + PM2 进程状态与启停 + 资源趋势图 + 应用配置重启
  • 环境:node / pnpm / git / pm2 检测、CI 仓库路径设置
  • 密钥:由 server/.env.example 推导表单 schema(含分组与注释),密钥默认打码、留空不覆盖,保存自动备份
  • 跨班:解析 RELAY_SERVERS 并对每个对端做 TCP 探活(不误判 relay 的 426 路径),附延迟微型柱与行内探活
  • 安装:从 Gitee 浅克隆(GitHub 自动兜底)→ 装依赖 → 构建 → PM2 启动,全程实时回显,失败即停不回滚
  • 班级初始化:届数 / 班级 / 班管 / 名单一次填完,学号由 CI 自动分配,装完即可用,不必再进 /setup
  • 日志:logs/server-out.log / server-error.log 尾部
  • 托盘常驻:关闭窗口 = 隐藏进系统托盘后台运行(监控持续),左键恢复,右键菜单退出
  • 崩溃兜底:UI 线程未处理异常统一落盘 logs/crash.log,窗口不闪退;后台任务未观察异常不杀进程
  • 无边框窗口:客户区扩展 + 自绘标题栏(拖动 / 双击最大化 / 窗口控制)+ 右下缩放握把

设计决定(为什么这样做)

  1. Avalonia 原生实现业务逻辑(C# 版):pm2 jlist 解析、.env schema 推导与读写、TCP 探活,全部与 Node 版对齐。桌面形态不依赖 ops-server 常驻,没有鸡生蛋问题。
  2. 零第三方依赖(Node 侧):只用 Node 内置模块。没有 npm install,就不受受限网络拉包抖动影响。
  3. schema 不手写:运行时解析 .env.example(权威字段清单)与 ecosystem.config.js 的 env 块(正则提取,不求值),CI 加字段零漂移。
  4. 改密钥必须走「应用配置重启」:它执行 pm2 restart ecosystem.config.js --update-env。普通的 pm2 restart <name> 保留旧环境变量,.env 改了不生效——这是 ecosystem.config.js 只在 start 时读 .env 决定的。
  5. 本进程绝不进 PM2:控制台要重启 PM2,被 PM2 管等于自杀;且会加剧 PM2 双 daemon 抢 \\.\pipe\rpc.sock 的问题。开机自启用注册表 Run 或计划任务单独拉起。
  6. 对端探活用 TCP 而非 HTTP:CI 的 relay 只在 /relay 路径响应(返回 426 Upgrade Required),根路径会把 HTTP 请求挂到超时,误判成离线。TCP 握手不受应用路由影响。
  7. 只绑 127.0.0.1:本服务能读写全部密钥。确需局域网访问时设置 OPS_HOST,并务必同时设置 OPS_TOKEN。
  8. 失败即停、保留现场:安装向导任一步失败立即停止,不自动回滚,避免破坏已有部署。
  9. 默认 Gitee、GitHub 兜底:校园网对 github.com 的 HTTPS 常见 Connection reset(实测 codeload 直接 SSL 失败),而同仓库在 Gitee 上完整 clone 40MB 仅 6 秒、浅克隆 25MB 仅 4 秒。主源失败会自动切备源;已有仓库会先改 origin 再重试。
  10. 浅克隆 + 原地对齐:首次 --depth 1 --single-branch 只取最新快照,不拉 30MB 历史;更新用 fetch + reset --hard,语义是「部署目录与远端一致」——不被本地改动阻塞,也不拉全部标签。.gitignore 保护着 db/.env/Resources,reset 不会碰它们。
  11. 更新前自动备份:只备份「丢了找不回」的东西(SQLite 三件套、.env、version.json、config/*.json),落在 backup/ops-pre-update-<ts>/。刻意不备份 Resources/(52GB 媒体资产)与 node_modules、dist(可再生)。
  12. 初始化逻辑不复制:Ops 只做「表单 → 一次 HTTP 调用」,届数与班级校验、学号排号(YYCC00 / YYCCnn)、pre-records.json 与 .env 落盘,全部由 CI 的 /api/setup/save 负责。CI 改排号规则时 Ops 不需要跟着改,也不会出现两套规则打架。

配置(环境变量)

变量 默认 说明
OPS_PORT 9099 监听端口
OPS_HOST 127.0.0.1 监听地址,改前先读安全须知
OPS_TOKEN 空 启用后所有请求需带 ?token= 或 x-ops-token 头
CI_ROOT 自动探测 CI 仓库根目录

冒烟测试

cd ops-server
node test-smoke.js
# env 读写测试在临时目录进行,不会碰真实的 server/.env

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages