Tự dựng Private GitHub Action Runner trên ARM VPS: Tiết kiệm 80% chi phí CI/CD
Đặt vấn đề: Gánh nặng chi phí CI/CD của doanh nghiệp
Trong kỷ nguyên DevOps hiện đại, Continuous Integration và Continuous Deployment (CI/CD) đã trở thành xương sống của mọi quy trình phát triển phần mềm. Tuy nhiên, khi tần suất deploy tăng lên và số lượng dự án mở rộng, các doanh nghiệp bắt đầu vấp phải một rào cản tài chính lớn: chi phí vận hành GitHub-hosted runners.
Mặc dù GitHub cung cấp hạn mức miễn phí ban đầu, lượng tài nguyên này thường cạn kiệt rất nhanh trong các môi trường doanh nghiệp. Khi vượt định mức, chi phí tính theo phút của GitHub bắt đầu tăng phi mã, đặc biệt là khi doanh nghiệp yêu cầu các cấu hình máy ảo lớn hơn để tối ưu hóa thời gian build. Để giải quyết bài toán kinh tế này, xu hướng dịch chuyển sang Self-hosted Runner trên hạ tầng ARM VPS đang trở thành một giải pháp chiến lược, giúp doanh nghiệp tiết kiệm đến 80% chi phí vận hành mà vẫn duy trì, thậm chí gia tăng hiệu năng xử lý.
---Tại sao lại là ARM VPS và Private Runner?
Khi lựa chọn tự dựng hạ tầng cho GitHub Actions, việc kết hợp giữa kiến trúc CPU ARM và mô hình Self-hosted mang lại những lợi thế vượt trội về cả chi phí lẫn hiệu năng:
- Tối ưu hóa chi phí phần cứng: Bản chất của chip ARM (như Ampere Altra trên Oracle Cloud hay AWS Graviton) là tiêu thụ ít điện năng hơn và có giá thành rẻ hơn từ 40% đến 60% so với kiến trúc x86 truyền thống có cùng cấu hình. Đặc biệt, chương trình Oracle Cloud Always Free Tier cho phép bạn sở hữu cấu hình lên tới 4 vCPU và 24 GB RAM hoàn toàn miễn phí.
- Không giới hạn thời gian build: Thay vì phải trả tiền cho từng phút chạy pipeline, bạn có thể tận dụng tối đa 100% công suất của VPS 24/7 mà không phát sinh thêm bất kỳ chi phí ẩn nào.
- Bảo mật dữ liệu nội bộ (Private Networking): Khi sử dụng Private Runner nằm trong mạng VPC nội bộ, mã nguồn và dữ liệu nhạy cảm của doanh nghiệp không bao giờ phải đi qua internet công cộng, giảm thiểu tối đa rủi ro rò rỉ thông tin.
- Kiểm soát môi trường tuyệt đối: Bạn có thể cấu hình sẵn các tầng cache cục bộ, cài đặt các công cụ đặc thù hoặc tích hợp sâu với hệ thống cơ sở dữ liệu nội bộ phục vụ cho việc Integration Testing.
Kiến trúc hệ thống và luồng xử lý (Architecture Overview)
Mô hình vận hành của Private GitHub Action Runner dựa trên cơ chế Polling. Runner nằm trên VPS sẽ liên tục gửi request (qua HTTPS Outbound công cụ kết nối an toàn) lên GitHub để kiểm tra xem có Job nào đang xếp hàng hay không. Điều này đồng nghĩa với việc bạn không cần phải mở bất kỳ cổng Ingress (Inbound) nào trên Firewall của VPS, giúp bảo vệ hệ thống khỏi các cuộc tấn công từ bên ngoài.
Khuyến cáo bảo mật quan trọng: Chỉ áp dụng Self-hosted Runner cho các Private Repository. Tuyệt đối không cấu hình cho Public Repository, vì kẻ gian có thể thông qua tính năng Pull Request để thực thi mã độc độc hại trực tiếp trên hạ tầng VPS của bạn.---
Hướng dẫn từng bước cài đặt GitHub Action Runner trên ARM VPS
Dưới đây là quy trình chuẩn hóa để triển khai một cụm Runner hoạt động ổn định trên hệ điều hành Ubuntu Server kiến trúc ARM64.
Bước 1: Khởi tạo và chuẩn bị môi trường VPS
Truy cập vào quản trị VPS của bạn (Oracle Cloud, AWS, hoặc DigitalOcean) và khởi tạo một instance chạy Ubuntu 24.04 LTS (ARM64). Tiến hành cập nhật hệ thống và cài đặt các thư viện bổ trợ cần thiết:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git jq build-essential tar
Bước 2: Tạo User chuyên dụng để đảm bảo an toàn
Để tuân thủ nguyên tắc đặc quyền tối thiểu (Least Privilege), tuyệt đối không chạy ứng dụng runner dưới quyền root.
sudo useradd -m -s /bin/bash github-runner
sudo usermod -aG sudo github-runner
sudo su - github-runner
Bước 3: Tải và cấu hình ứng dụng GitHub Runner
Di chuyển vào tài khoản GitHub của bạn, đi tới đường dẫn Settings > Actions > Runners > New self-hosted runner, chọn hệ điều hành Linux và kiến trúc là ARM64. Hệ thống sẽ cung cấp token xác thực ngắn hạn. Thực hiện các lệnh sau trên VPS:
# Tạo thư mục làm việc
mkdir actions-runner && cd actions-runner
# Tải gói cài đặt bản dành cho ARM64 (Kiểm tra số Version mới nhất từ GitHub)
curl -o actions-runner-linux-arm64.tar.gz -L [https://github.com/actions/runner/releases/download/v2.321.0/actions-runner-linux-arm64-2.321.0.tar.gz](https://github.com/actions/runner/releases/download/v2.321.0/actions-runner-linux-arm64-2.321.0.tar.gz)
# Giải nén gói tin
tar xzf ./actions-runner-linux-arm64.tar.gz
# Cấu hình liên kết với Repository hoặc Organization
./config.sh --url [https://github.com/your-organization/your-repo](https://github.com/your-organization/your-repo) --token YOUR_REGISTRATION_TOKEN
Trong quá trình cấu hình, hệ thống sẽ yêu cầu nhập tên Runner và các nhãn định danh (labels). Hãy thêm nhãn self-hosted, linux, và arm64 để dễ dàng điều hướng workflow sau này.
Bước 4: Cấu hình Service hệ thống (Systemd)
Để đảm bảo Runner tự động khởi chạy lại mỗi khi VPS bị reboot, chúng ta cần cấu hình nó dưới dạng một dịch vụ hệ thống daemon:
sudo ./svc.sh install
sudo ./svc.sh start
sudo ./svc.sh status
Lúc này, nếu bạn quay trở lại giao diện điều khiển của GitHub, trạng thái của Runner sẽ chuyển sang màu xanh hiển thị là Idle.
---Tối ưu hóa Docker cho kiến trúc ARM64
Phần lớn các tác vụ CI/CD hiện nay đều vận hành dựa trên Docker Container. Khi chuyển sang nền tảng ARM, bạn cần lưu ý hai điểm mấu chốt sau để tránh các lỗi xung đột kiến trúc phần cứng.
Cài đặt Docker Engine trên hạ tầng ARM
Cài đặt Docker chính chủ theo khuyến nghị của Docker để có hiệu năng tốt nhất:
sudo apt install -y docker.io
sudo usermod -aG docker github-runner
Lưu ý quan trọng: Sau khi cấp quyền Docker cho user, bạn cần restart lại service của GitHub Runner để nhận quyền mới: sudo ./svc.sh stop && sudo ./svc.sh start.
Xử lý lỗi lỗi kiến trúc "exec format error"
Khi build hoặc chạy một container trên ARM VPS mà Dockerfile sử dụng base image chỉ hỗ trợ x86 (AMD64), bạn sẽ gặp lỗi nghiêm trọng standard_init_linux.go: exec format error. Để khắc phục điều này, doanh nghiệp cần định hướng áp dụng Multi-architecture builds bằng công cụ Docker Buildx, cho phép biên dịch đồng thời cả bản image dành cho cả x86 và ARM.
Cấu hình Workflow file để chỉ định Runner mới
Để điều hướng các Job trong pipeline của bạn chạy trên hệ thống VPS ARM vừa thiết lập, bạn chỉ cần chỉnh sửa thuộc tính runs-on trong file cấu hình YAML (.github/workflows/ci.yml):
name: Production Build and Deploy
on:
push:
branches: [ main ]
jobs:
build-and-test:
runs-on: [self-hosted, linux, arm64]
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Run Build Script
run: |
echo "Đang chạy build trên hạ tầng ARM VPS tiết kiệm chi phí..."
npm install
npm run build
---
Kết luận và Khuyến nghị vận hành lâu dài
Việc chuyển dịch sang tự quản lý Private GitHub Action Runner trên nền tảng ARM VPS là một bước đi chiến lược mang lại giá trị kinh tế khổng lồ cho doanh nghiệp, cắt giảm đến 80% chi phí hóa đơn CI/CD hàng tháng trong khi năng lực xử lý phần cứng được mở rộng rõ rệt.
Tuy nhiên, để hệ thống vận hành bền bỉ trong môi trường sản xuất (Production), đội ngũ kỹ sư vận hành cần lưu ý triển khai thêm các giải pháp sau: thiết lập cơ chế tự động dọn dẹp phân vùng đĩa cứng định kỳ (docker system prune -f) để tránh tràn bộ nhớ do cache build để lại; cấu hình giám sát (Prometheus & Grafana) để theo dõi tài nguyên RAM/CPU; và luôn định kỳ cập nhật phiên bản mã nguồn của GitHub Runner Core nhằm vá các lỗ hổng bảo mật mới nhất.
