GitHub 托管的 runner 很方便,直到账单或等待时间开始让人难受。超出免费额度后你按分钟付费,每个任务都从“冷”状态启动,并每次重新下载依赖。你自己 VPS 上的自托管 runner 把这三点全部反转:固定的月度成本、缓存已在磁盘上的“热”机器,以及你完全掌控的构建环境——特定的工具版本、更多 RAM、真正能持久保留的 Docker 层缓存。
runner 只需对 GitHub 出站,所以它能在我们最便宜的套餐上运行、用加密货币付款、并且无需 KYC。
runner 需要什么
- 满足你构建的 CPU 与 RAM。 Small(每月 $8——4 vCPU、4 GB RAM、35 GB NVMe) 对大多数 CI 都很舒适:Node/Go/Rust 构建、测试套件、Docker 镜像构建。繁重编译或并行任务?升级到 Medium 或 Pro 套餐。
- 用于缓存的 NVMe 磁盘。 自托管的全部意义在于持久化——依赖缓存、Docker 层、构建产物在多次运行之间留在磁盘上。NVMe 让恢复保持快速。
- 不需要专用 IP。 runner 通过 HTTPS 向 GitHub 拨出;无需任何入站访问。一个 NAT 套餐(每月 $3 起) 就够了。只有当你还自托管某些对外提供流量的服务时,才需要专用 IP。
设置 runner(Ubuntu 24.04)
在你的仓库(或组织)中创建 runner:Settings → Actions → Runners → New self-hosted runner → Linux。GitHub 会显示下载命令和一次性注册令牌。在 VPS 上:
# 以非 root 用户身份(runner 拒绝以 root 运行)
adduser --disabled-password --gecos "" runner
su - runner
mkdir actions-runner && cd actions-runner
curl -o actions-runner-linux-x64.tar.gz -L \
https://github.com/actions/runner/releases/latest/download/actions-runner-linux-x64.tar.gz
tar xzf actions-runner-linux-x64.tar.gz
# 用 GitHub 界面中的 URL + 令牌注册
./config.sh --url https://github.com/YOUR_ORG/YOUR_REPO --token YOUR_TOKEN
让它作为服务运行
不要在终端里跑 ./run.sh——把它安装为 systemd 服务,让它在重启后存活:
sudo ./svc.sh install runner
sudo ./svc.sh start
sudo ./svc.sh status
现在 runner 在 GitHub 界面中显示为 Idle,并会接手任何指向它的任务。
在 workflow 中使用
用 runs-on 把任务指向你的 runner:
jobs:
build:
runs-on: self-hosted # 或你在注册时设置的自定义标签
steps:
- uses: actions/checkout@v4
- run: make build && make test
基于 Docker 的任务
安装一次 Docker,你的 workflow 就能构建镜像或运行服务容器,层缓存在多次运行之间持久保留:
sudo apt update && sudo apt install -y docker.io
sudo usermod -aG docker runner # 让 runner 无需 sudo 即可使用 Docker
若要为每个任务做一次性隔离,可把 runner 本身放进容器中运行,并每次重新创建它——这是不受信任构建或矩阵构建的常见做法。
为什么选择 EQVPS 做 CI
- 固定费用、无限分钟。 无按分钟计量——繁忙的流水线和空闲的花费相同。
- “热”缓存。 依赖和 Docker 层在多次运行之间留在 NVMe 上;构建变快,而不是变慢。
- 约 60 秒拿到 root、干净镜像。 通过 cloud-init 提供 Ubuntu、Debian 等;安装你正需要的工具链。
- 无需 KYC、加密货币付款。 用邮箱注册、用 USDC/USDT 付款。发布高峰时多开几个 runner,之后再关掉——未使用的已付时间会退回你的余额。
评论
暂无评论。来做第一个吧。