Files

22 lines
2.1 KiB
Markdown
Raw Permalink Normal View History

# ADR 0002:使用专用脚本管理控制台
日期:2026-10-13;状态:按用户确认方案实施,替代 Rundeck 作为日常入口。
## 原因
用户需要直接上传脚本、查看只读代码、上传新版本、配置执行参数,并在同一页面看到日志、结果和历史。Rundeck 的任务编辑/导入模型与这里的脚本文件管理存在额外映射,继续叠加集成会增加维护成本。
## 决策
网页/API 使用 FastAPI,SQLite 保存元数据与状态,文件系统保存不可变上传版本、日志和结果。数据库 `user_version=1` 为新控制台独立结构,不改写旧 H2。Git 保留应用源代码,不作为每次运行的自动拉取来源。
共享队列单并发,独立宿主 worker 拥有 Docker 管理能力,但没有网络监听入口。网页和任务容器没有 Docker socket、GPU、宿主 PID 或设备。网页需读取原目录的 root/0700 文件,使用容器 UID 0、移除全部 capabilities、只读根文件系统和来源挂载;不改变原目录属主或权限。网页仅绑定内网 IP,通过真实 peer IP、Host、Origin 和自定义请求头限制访问,不信任转发身份/IP头。
上传代码仍是不可信输入。任务放入受限容器;临时结果目录是宿主项目路径下的 128 MiB tmpfs,归档后卸载。允许的原输出目录可写,原文件不清理;其增长采用运行时软限制,不能当成文件系统硬配额。特定旧脚本认证仅存在专用代理进程内存中,stdin 注入,不修改原脚本或复制认证文件。
## 兼容和退出条件
旧容器、H2、日志和备份保留,但旧记录不转换或混入 SQLite。14440 上 `/project/xas-test-library/*` 的浏览器书签跳转到新脚本库;仅为已经发给用户的公开页面链接保留,在团队更新书签后可以移除。没有保留旧 API 或双写路径。
后续接入 GPU、服务管理脚本、额外依赖、更多输出目录或鉴权,需要单独明确资源和权限范围。当前服务不自动安装依赖,也不从任务容器停止其他维护者服务。