Repository navigation
v2.2.11
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