别再用 rsync 了!试试 GitHub 自托管 Runner 让云服务器自己干活

新手程序员阿牛最近在负责公司一个静态网站开发和部署,一开始每次更新他都是手动通过 SSH、rsync 方式手动操作,有时候一天更新好几次,让他忙得不可开交。后来他了解到 GitHub Actions 有一个 self-hosted runner 功能,从此之后,他每天都能多睡2小时。
阿牛的“人肉部署”噩梦
在改造前,阿牛的日常是这样的:
# 每次更新必经之路
npm run build
rsync -avz build/ user@server:/var/www/html/
ssh user@server "sudo systemctl reload nginx"
⚠️ 手动部署带来了一些痛点:
- 凌晨 2 点被领导打电话叫醒:“网站更新后样式没了!”
- 本地环境和服务器环境不一致,构建产物上传后报错。
- 同事问:“上次部署是什么时候?”,只能翻聊天记录。
直到有一次他在 GitHub 开源社区发现了 self-hosted runner 这个神器,阿牛的苦日子终于要结束了 💡
Self-hosted Runner 到底是什么?
Self-hosted runner 即“自托管运行器”,它是 GitHub Actions 的一种运行器类型,用于在你自己提供的服务器上执行 GitHub Actions 工作流。
与 GitHub-hosted runners(GitHub 托管的运行器)相比,Self-hosted runners 运行在你自己的服务器上,而不是由 GitHub 提供和维护,因此可以访问你的私有网络、数据库、Docker 环境等,适合需要访问服务器资源的部署场景。同时,Self-hosted runners 不占用 GitHub 的免费额度。
和传统 rsync 操作相比,Self-hosted runner 相当于一个会主动干活的机器人:
| 操作方式 | 你的角色 | 服务器角色 | 风险点 |
|---|---|---|---|
| rsync + SSH | 你当“快递员” | 被动接收文件 | 漏步骤、权限错误、误删文件 |
| Self-hosted Runner | 你当“指挥官 ” | 主动干活的机器人 | 一次配置,永久省心 |
为什么说 Self-hosted runner 方式更安全?
- 🔒 不开放 SSH 端口:Runner 通过 HTTPS 出站连接 GitHub,无需暴露 22 端口。
- 🔒 权限精准控制:Runner 用专用账号运行,只能执行预定义命令。
- 🔒 操作全留痕:所有命令在 GitHub UI 可追溯,告别
~/.bash_history丢失。
Self-hosted runner 实践
假如你有一个 Docusaurus 构建的静态网站,源代码仓库放在 GitHub 上,你需要将该网站部署到一台 Ubuntu 24.04 云服务器。一起来看看怎么做吧!
① 在 GitHub 创建 Runner
首先,进入 GitHub 仓库,依次选择 Settings → Actions → Runners → New self-hosted runner,创建一个新的运行器。

选择 Linux + x64,复制配置命令(含临时 token)

② 在云服务器执行(用非 root 用户!)
# 1. 创建专用目录
sudo -iu ubuntu # 切换到普通用户
mkdir actions-runner && cd actions-runner
# 2. 下载最新版(替换为 GitHub 提供的链接)
curl -o actions-runner-linux-x64-2.320.0.tar.gz -L \
https://github.com/actions/runner/releases/download/v2.320.0/actions-runner-linux-x64-2.320.0.tar.gz
# 3. 解压
tar xzf ./actions-runner-linux-x64-2.320.0.tar.gz
# 4. 配置 Runner(粘贴 GitHub 生成的命令)
./config.sh --url https://github.com/yourname/repo --token YOUR_TOKEN
# 按提示操作:
# Runner name: xxx-prod-server # 建议命名体现用途
# Additional labels: production # 可以增加标签
# Work folder: [_work] # 默认即可