22
33基于 Golang Echo 的 HTTP 管理界面,在一台机器上查看和管理多个 GitHub Actions 自托管 Runner。使用 YAML 配置,无需数据库。
44
5- 许可证:MIT,见 [ LICENSE] ( LICENSE ) 。
6- CI:push 到 ` main ` /` master ` /` develop ` 时由 [ CI (Manager)] ( .github/workflows/ci-manager.yml ) 与 [ CI (Runner)] ( .github/workflows/ci-agent.yml ) 分别执行检查与构建;[ Publish image (Manager)] ( .github/workflows/publish-image-manager.yml ) / [ Publish image (Runner)] ( .github/workflows/publish-image-agent.yml ) 在 push 分支或 tag 时构建并推送对应容器镜像到 GHCR。推送 tag ` v*.*.* ` 时 [ Release (Manager)] ( .github/workflows/release-manager.yml ) 构建二进制与 Manager 镜像并创建 GitHub Release,[ Release (Runner)] ( .github/workflows/release-agent.yml ) 推送 Runner 镜像(tag 带 ` -runner ` 后缀)。
5+ MIT 许可证,见 [ LICENSE] ( LICENSE ) 。CI/镜像/Release 见 [ .github/workflows] ( .github/workflows ) 。
6+
7+ ## 亮点
8+
9+ - ** 零数据库** :仅用 YAML 配置,无外部依赖,配置即备份、易版本管理。
10+ - ** Web 一站式** :添加、注册、启停、编辑、查看状态均在界面完成,无需 SSH 或手动执行 GitHub Runner ` config.sh ` 。
11+ - ** 自动安装与注册** :在「快速添加」中填写 Token 即可自动下载 runner、执行注册并启动;支持从 GitHub 页面复制 ` ./config.sh --url ... --token ... ` 一键解析并填充表单。
12+ - ** 容器化优先** :Docker / docker-compose 开箱即用,支持 DinD 与 host-socket 两种 Job 内 Docker 方式;可选** 容器模式** (一 Runner 一容器),由 Manager 统一启停与状态采集。
13+ - ** 自愈与排障** :服务启动约 15 秒后自动拉起已注册未运行 Runner,并每 5 分钟定时检查;容器模式下 ` status=unknown ` 时提供结构化 probe(错误类型、检查/修复命令),便于复制命令排障或尝试启停自愈。
14+ - ** 可观测** :注册结果写入并在界面展示;可选配置 PAT(` .github_check_token ` ),定时检查 Runner 是否已在 GitHub 列表显示,结果与界面同步。
715
816## 功能
917
@@ -12,31 +20,28 @@ CI:push 到 `main`/`master`/`develop` 时由 [CI (Manager)](.github/workflows/
1220- ** 快速添加** :名称 + 目标(组织/仓库)+ 可选 Token,一键添加并可自动注册
1321- ** 删除** :从配置中移除(不删磁盘目录)
1422- ** 启停** :对已注册 Runner 启动/停止
15- - ** 容器模式** (可选):每个 Runner 运行在独立容器中 ,Manager 通过 C/S 控制并获取状态 ;Runner 与 Manager 同镜像名,CI 推送 tag 带 ` -runner ` 后缀(如 ` :main-runner ` 、 ` :1.0.0-runner ` )
23+ - ** 容器模式** (可选):每个 Runner 独立容器 ,Manager 通过 C/S 启停 ;Runner 镜像 tag 带 ` -runner ` 后缀
1624
1725## 快速开始
1826
1927``` bash
20- # 1. 复制配置(config.yaml 已在 .gitignore,需从示例复制)
2128cp config.yaml.example config.yaml
29+ # 编辑 config.yaml:runners.base_path 改为 /app/runners
30+ # 宿主机:mkdir -p runners && chown 1001:1001 config.yaml runners
2231
23- # 2. 二选一:本地运行 或 Docker
24- go run ./cmd/runner-manager # 需 Go 1.26
25- # 或 Docker(需挂载 config 与 runners,详见 docs/docker.md)
26- make docker-build && make docker-run
27- # 或使用已发布镜像:见 docs/docker.md 中的「运行容器」与 DinD 说明
32+ docker network create runner-net 2> /dev/null || true
33+ docker compose up -d
2834```
2935
30- 浏览器打开 http://localhost:8080。健康检查:`GET /health` ;版本: ` GET /version ` 或 ` ./runner-manager - version`。
36+ 浏览器打开 http://localhost:8080。更多方式(docker run、DinD、容器模式)见 [ 使用指南 ] ( docs/guide.md ) 。 健康检查:` GET /health ` ;版本:` GET /version ` 。
3137
32- ## 文档
38+ ## 适用场景
3339
34- 详细说明见 [ docs/] ( docs/README.md ) :
40+ - ** 个人 / 团队** :一台机器快速配置为多个 repo 或 org 提供自托管 Runner,用 Web 界面统一管理,无需记命令。
41+ - ** 内网 CI** :在内网部署,Job 需要 Docker 时选用 DinD(隔离)或 host-socket(与宿主机共享);Manager 或 DinD 重启后 Runner 自动恢复。
42+ - ** 需要隔离与可追溯** :容器模式下每 Runner 独立容器,资源与权限边界清晰;结合注册结果与 GitHub 显示检查,便于核对 Runner 是否生效。
43+
44+ ## 文档
3545
36- | 文档 | 说明 |
37- | ------| ------|
38- | [ 配置说明] ( docs/config.md ) | config.yaml 字段与示例 |
39- | [ Docker 部署] ( docs/docker.md ) | 镜像构建、运行、Make 目标 |
40- | [ 添加 Runner] ( docs/adding-runner.md ) | Token 获取、界面添加、多 Runner 同机 |
41- | [ 安全与校验] ( docs/security.md ) | 鉴权、路径安全、唯一性 |
42- | [ 开发与构建] ( docs/development.md ) | 构建、开发、API、Makefile |
46+ - ** [ 使用指南] ( docs/guide.md ) ** :部署(Docker/docker-compose)、配置、添加 Runner、安全与排障
47+ - ** [ 开发与构建] ( docs/development.md ) ** :Go 构建、本地调试、HTTP API、Makefile
0 commit comments