Các runner do GitHub host là một mặc định tốt. Bạn ngừng cần chúng khoảnh khắc một build muốn thứ chúng không có — registry gói riêng tư của bạn, một phiên bản chuỗi công cụ cụ thể bạn chán cài lại mỗi lần chạy, một cơ sở dữ liệu trên mạng của riêng bạn, hoặc chỉ nhiều kiểm soát hơn trên cỗ máy. Đó là khi một runner tự host trên một VPS xứng đáng.
Hướng dẫn này đưa một cái chạy đúng: cài đặt, đăng ký, sống dưới systemd, và — phần người ta làm sai — an toàn. Hãy bắt đầu với cái cuối, vì đó là phần cắn.
Quy tắc bảo mật duy nhất
Một workflow GitHub Actions chạy mã tùy ý — bất cứ gì trong tập tin workflow, và bất cứ gì mã đó kéo vào. Trên repo của riêng bạn đó là mã của bạn, và nó ổn. Trên một repo công khai, một pull request từ một người lạ có thể chạy mã của họ trên runner của bạn. Đó không phải một lỗi; đó là cách CI hoạt động. Tài liệu của chính GitHub nói thẳng: đừng dùng các runner tự host với các kho công khai.
Nên quy tắc đơn giản và không thể thương lượng: các runner tự host là cho các repo riêng tư. Nếu repo của bạn công khai, dùng các runner do GitHub host và tiếp tục. Mọi thứ bên dưới giả định một repo riêng tư.
Một runner cần gì từ cỗ máy
Nó tùy build, và bạn nên chọn kích cỡ cho của bạn hơn là một con số ngoài một trang:
- Một job compile-và-test điển hình — 2 lõi và 4-8 GB là thoải mái. Small ($8, 4 vCPU / 4 GB) hoặc Medium ($12, 6 vCPU / 6 GB) bao hầu hết những cái này.
- Các build nặng hơn — compile native lớn, build image Docker lớn, các bộ test đói bộ nhớ — muốn nhiều dư địa hơn. Xem một lần chạy thực (
htoptrong khi nó build) và chọn kích cỡ cho cái bạn thực sự thấy, không phải cho hy vọng.
Đĩa cũng quan trọng: các cache build, các lớp Docker, và các repo đã clone cộng dồn. Để mắt tới nó và prune.
1. Chuẩn bị cỗ máy
Tạo một người dùng không-root cho runner — trình cài đặt của GitHub dù sao từ chối chạy dưới root, và bạn muốn nó như vậy:
sudo adduser --disabled-password --gecos "" runner
sudo usermod -aG sudo runner # chỉ nếu các build của bạn thực sự cần sudo
Cài bất cứ gì các build của bạn cần — một chuỗi công cụ ngôn ngữ, Docker, các công cụ build. Ví dụ, nếu các job của bạn build container:
sudo apt update && sudo apt install -y docker.io
sudo usermod -aG docker runner
2. Tải và đăng ký runner
Trong repo (hoặc org) của bạn trên GitHub, tới Settings → Actions → Runners → New self-hosted runner. GitHub cho bạn các lệnh tải chính xác và một registration token (nó tồn tại ngắn — lấy nó mới). Với tư cách người dùng runner:
sudo -iu runner
mkdir actions-runner && cd actions-runner
# dùng đúng URL GitHub cho bạn cho OS/arch của bạn:
curl -o actions-runner-linux-x64.tar.gz -L "URL_FROM_GITHUB"
tar xzf actions-runner-linux-x64.tar.gz
./config.sh --url https://github.com/YOUR_ORG/YOUR_REPO --token YOUR_TOKEN
config.sh hỏi một tên runner, các nhãn, và một thư mục làm việc — các mặc định ổn để bắt đầu. Các nhãn là cách workflow của bạn nhắm runner này (runs-on: self-hosted).
3. Chạy nó như một dịch vụ systemd
Runner đi kèm một helper cài một dịch vụ systemd cho bạn — dùng nó, để runner sống sót qua các lần khởi động lại và khởi động lại khi thất bại. Vẫn với cài đặt của người dùng runner, nhưng các lệnh dịch vụ cần root:
sudo ./svc.sh install runner
sudo ./svc.sh start
sudo ./svc.sh status
Cái đó đăng ký actions.runner.* như một unit systemd chạy với tư cách người dùng runner, khởi động lúc boot. Log đi tới journald:
sudo journalctl -u 'actions.runner.*' -f
Trở lại trang Runners của GitHub, runner của bạn giờ hiển thị Idle — chấm xanh. Trỏ một workflow tới nó:
jobs:
build:
runs-on: self-hosted
steps:
- uses: actions/checkout@v4
- run: make test
Push, và job chạy trên cỗ máy của bạn.
4. Giữ nó sạch
Một runner tự host tái sử dụng hệ thống tập tin của nó giữa các job — đó là chiến thắng tốc độ (các cache ấm) và cái bẫy (trạng thái còn sót). Hai thói quen giữ nó khỏe:
- Prune thường xuyên. Docker đặc biệt —
docker system prunetrên một cron, hoặc đĩa lấp lặng lẽ với các lớp chết. - Đừng lưu các bí mật trên cỗ máy. Dùng GitHub Actions secrets, tiêm theo-từng-lần-chạy, không phải các tập tin ngồi trong home của runner. Nếu runner bị xâm nhập, bất cứ gì trên đĩa đi theo nó.
Nếu bạn cần một môi trường thực sự sạch mỗi job, chạy mỗi job bên trong một bước container — runner ở lại, mớ của job thì không.
Khi nào tự host, một cách trung thực
Tự host khi bạn cần chuỗi công cụ của riêng bạn được nướng vào, truy cập các tài nguyên mạng riêng tư, hoặc kiểm soát cỗ máy. Ở lại trên các runner do GitHub host khi một môi trường sạch, dùng-một-lần và số phút của họ hợp bạn — điều đó thực sự đơn giản hơn, và đơn giản hơn đáng giá. Và đừng bao giờ, trên một repo công khai, tự host. Cái đó không phải một sở thích.
Nếu một runner repo-riêng-tư là cái bạn cần: chọn một gói — Small ($8) cho các build nhẹ hơn, Medium ($12) khi chúng nặng hơn — thanh toán bằng USDC hoặc USDT (không KYC, không giấy tờ), và bạn sẽ có root trong khoảng 60 giây. Rồi làm xuống trang này và bạn sẽ có một runner nhận các job vài phút sau.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.