EQVPS

Chạy một GitHub Actions Runner Tự host trên một VPS

27 thg 7, 2026 · 5 phút đọc · EQVPS Team

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:

Đĩ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:

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óiSmall ($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.

Xem gói & đặt một VPS →

FAQ

Vì sao chạy runner của riêng tôi thay vì do GitHub host?

Ba lý do thật: các phụ thuộc và chuỗi công cụ của riêng bạn được nướng vào (không cài lại chúng mỗi lần chạy), truy cập các tài nguyên riêng như một registry hoặc cơ sở dữ liệu nội bộ, và kiểm soát cỗ máy — kích cỡ, các cache, mạng của nó. Nếu số phút do GitHub host và một môi trường sạch hợp bạn, ở lại trên chúng. Tự host khi bạn cụ thể cần một trong ba cái đó.

Dùng một runner tự host có an toàn không?

Trên một repo riêng tư, có. Trên một repo công khai, không — không bao giờ. Một workflow chạy mã tùy ý từ bất kỳ ai kích hoạt nó, và trên một repo công khai một pull request của một người lạ có thể chạy mã của họ trên runner của bạn. Tài liệu của chính GitHub nói vậy. Giữ các runner tự host cho các repo riêng tư, hoặc chấp nhận rằng bạn đang giao cỗ máy của mình cho internet.

Một runner cần bao nhiêu CPU và RAM?

Tùy hoàn toàn vào build của bạn. Một job compile-và-test điển hình thoải mái với 2 lõi và 4-8 GB — Small hoặc Medium ở đây. Các build nặng (compile native lớn, các image Docker lớn, các bộ test đói bộ nhớ) muốn nhiều hơn, và bạn nên chọn kích cỡ cho job thực của bạn, không phải một đoán. Xem một lần chạy thực và bạn sẽ biết.

Một runner có thể xử lý nhiều repo không?

Một runner có thể được đăng ký cho một tổ chức và được nhận bởi vài repo, một job tại một thời điểm mặc định. Cho nhiều song song hơn, chạy nhiều runner — mỗi cái là dịch vụ systemd riêng của nó. Chỉ giữ tất cả chúng trên các repo riêng tư.

Tôi có cần cung cấp giấy tờ cho bạn không?

Không. Email để đăng ký, USDC hoặc USDT để thanh toán. Không giấy tờ, root trong khoảng một phút.

← Quay lại blogXem gói & giá →

Bình luận

Chưa có bình luận nào. Hãy là người đầu tiên.

Để lại bình luận

Bình luận được kiểm duyệt trước khi hiển thị.