Files
plainleaf/deploy/runner/README.md
T
2026-08-13 01:42:17 +08:00

60 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Plainleaf 专用 Gitea Actions Runner
此 Runner 只注册到 `wushenghua/plainleaf` 仓库,只提供
`plainleaf-release` 标签。它不提供 `ubuntu-latest` 标签,因此不会执行仓库继承的
SilverBullet 通用 CI。
Runner 使用固定版本 `gitea/runner:3.1.0-dind-rootless` 和独立的 Docker 数据卷:
- 不挂载 `/var/run/docker.sock`
- 看不到 NAS 上的 Gitea、MySQL 或其他容器
- 任务容器禁止 privileged 模式和任意 volume 挂载
- 同时只执行一个任务,最多使用 3 核 CPU、8 GB 内存
- 不挂载 Plainleaf 的 `/data` 或 Markdown 目录
- 只将 NAS 内网 Gitea Registry `192.168.31.68:8092` 标记为 HTTP Registry
外层 rootless DinD 需要 `privileged: true` 才能创建用户命名空间和内部 Docker
守护进程。由于极空间没有 `rootlesskit` AppArmor profile,Runner 单独使用
`apparmor=unconfined`;它只挂载 Runner 自身的目录和命名卷,不挂载任何业务数据。
镜像登录和推送直接走 NAS 内网 Registry,避免大镜像经过公网 FRP;Gitea 中的包
仍可由 NAS 更新服务通过 `gitea.aichickenfarm.cn` 的 HTTPS 地址拉取。
## 一次性注册
注册令牌从仓库 `设置 -> Actions -> Runners` 获取。令牌只通过终端标准输入传给
一次性注册容器,不写入 Compose 或 Git。注册完成后,凭据保存在 `data/.runner`。
注册标签必须严格使用:
```text
plainleaf-release:docker://docker.gitea.com/runner-images:ubuntu-latest
```
启动前应确认 `data` 目录由 Runner 的 UID/GID `1000:1000` 持有。Runner 无需开放
任何端口,只主动连接 `https://gitea.aichickenfarm.cn/` 拉取任务。
将本目录放到 NAS 的 Plainleaf Runner 专用目录后,在可见 SSH 终端运行:
```bash
sudo ./install-runner.sh
```
脚本先空载启动 Runner 并验证内部 rootless Docker,验证成功后才静默读取一次注册
令牌。令牌不会写入文件、Compose 或 Git,注册凭据只保存在 NAS 的
`data/.runner` 中。如果空载验证失败,令牌不会被使用;脚本只停止
`plainleaf_actions_runner`,不会操作其他容器。
## Actions Secrets
仓库需要两个 Secret:
- `REGISTRY_TOKEN`:`wushenghua` 用户的 `write:package` 令牌
- `NAS_DEPLOY_KEY`:Plainleaf 专用 SSH 私钥,只对应 NAS 上的 forced-command 公钥
工作流不会输出 Secret。镜像推送完成后,它使用固定 SSH host key 触发 NAS 上的
`plainleaf-update.service`;该服务只拉取并重建 Plainleaf,失败时自动回滚。
首次安装和验收完成前,发布工作流只允许在 Gitea Actions 页面手动触发。确认
Runner、Registry、NAS 更新服务和回滚流程均正常后,再启用指定分支的 `push`
触发。