Skip to content

v2.2.11

Choose a tag to compare

@github-actions github-actions released this 18 Oct 08:01
· 1 commit to main since this release

feat: xiaomusic 增加直装、节点 Docker 生命周期管理、外部应用监控

一、xiaomusic 增加直装方式(原仅有 Docker)

  • 改为 methods: [native, docker],直装优先。
  • 直装走官方 PyPI 包:python3-venv 建独立虚拟环境 → pip 安装 xiaomusic==<版本>,
    专用系统账号 xiaomusic 运行(与 gitea 一致:先建组再建用户,避免
    USERGROUPS_ENAB=no 时 systemd 的 Group= 找不到组)。
  • 环境变量显式给绝对路径(music/conf/cache/tmp/download),避免相对路径被解释
    成 WorkingDirectory 下的目录。
  • Python 版本前置检查:项目要求 >= 3.10,Debian 11 自带 3.9,直接给出
    「改用容器方式或升级系统」的明确提示,而不是让 pip 抛一堆解析错误。
  • armv7 上 pillow/pycryptodome 常无预编译包:首次安装失败会自动补装
    build-essential/python3-dev/图形库后重试,并额外启用 piwheels 索引。

二、节点 Docker 生命周期管理(安装 / 启动 / 停止 / 重启 / 卸载)

  • 新增 internal/apps/docker_lifecycle.go + 任务类型 docker_lifecycle。
  • 状态判定不再只看 Engine ping:ping 失败后再看「装没装 / 单元是不是 active」,
    区分 运行中 / 已安装未运行 / 未安装 —— 这三种状态在界面上该给不同按钮。
  • 卸载先 disable 服务再 purge 软件包并清理 APT 源;默认保留 /var/lib/docker,
    只有显式 purge_data 才删除镜像与容器数据。
  • 任务终态写审计(docker_start/stop/restart/uninstall),面板重启后按节点实际
    状态对账。

三、节点已安装应用监控(支持非面板安装的应用)

  • 新增 external_apps 表(迁移 022)与 CRUD API:
    GET/POST /api/nodes/{id}/external-apps、
    PUT/DELETE /api/nodes/{id}/external-apps/{eid}、
    POST /api/nodes/{id}/external-apps/{eid}/action。
  • 三种监控方式:
    systemd 单元(systemctl show 的 ActiveState/SubState)、
    进程匹配(pgrep -f,取前 5 个 PID)、
    容器名(Engine API /containers//json)。
  • 展示状态、PID、CPU/内存占用、运行时长、命令行,端口可选(ss/netstat 探测监听)。
  • 启停:systemd 走 systemctl;进程走 pkill -TERM 与登记的启动命令
    (setsid nohup 脱离会话,日志落 /var/log/ocp-external-.log);容器走 Engine API。
  • 安全:单元名走白名单正则,容器名禁空格/斜杠,端口范围校验;所有写操作
    需 node:write 权限并写审计。节点删除时一并清理其登记项。

四、前端(节点详情)

  • 新增「Docker 引擎」卡片:状态标签 + 版本 + 安装/启动/停止/重启/卸载按钮,
    卸载用输入 purge 二次确认,避免误删镜像与容器。
  • 新增「外部应用监控」卡片:表格展示类型/目标/状态/资源/端口与启停删改按钮,
    另有登记/编辑对话框(按类型切换目标提示与启动命令输入)。

验证:

  • 配方:TestBuiltinRecipesLoadAndRender / TestBuiltinNativeRecipesPrepare 通过
    (含模板渲染与变量校验)。
  • 新增 apps 用例:登记项校验(systemd 注入、容器名、端口、未知类型)、
    systemd/进程探测输出解析、多 PID 与端口监听、ProbeExternals 顺序与状态、
    删除节点清理登记项。
  • 新增 api 用例:外部应用 CRUD 与鉴权、跨节点访问 404、未知 Docker 操作 400。
  • go build / go vet 通过;go test ./... -p 1 全量通过(20 个包)。
  • 前端 vite build 通过;运行时冒烟:面板初始化 → 登记外部应用 → 列表返回
    实时状态(JSON 字段为小写,与前端一致)→ Docker 状态返回 absent,均 200。

完整提交:06ff886