I runner ospitati da GitHub sono comodi finché il conto o il tempo di attesa non iniziano a far male. Oltre il piano gratuito paghi al minuto, fai cold-start a ogni job, e riscarichi le dipendenze a ogni run. Un runner self-hosted sul tuo VPS ribalta tutti e tre: costo mensile fisso, una macchina calda con le tue cache già su disco, e un ambiente di build che controlli completamente — versioni specifiche di tool, più RAM, cache dei layer Docker che persiste davvero.
Un runner ha solo bisogno di raggiungere GitHub in uscita, quindi funziona sui nostri piani più economici, paga in crypto, e non necessita di KYC.
Cosa serve a un runner
- CPU e RAM per le tue build. Small ($8/mese — 4 vCPU, 4 GB RAM, 35 GB NVMe) è il default comodo per la maggior parte della CI: build Node/Go/Rust, suite di test, build di immagini Docker. Compilazione pesante o job paralleli? Sali a Medium o a un piano Pro.
- Disco NVMe per le cache. Tutto il senso del self-hosting è la persistenza — cache delle dipendenze, layer Docker, artefatti di build restano su disco tra i run. NVMe tiene veloci i ripristini.
- Nessun IP dedicato richiesto. Il runner compone verso GitHub via HTTPS; nulla deve raggiungerlo in entrata. Un piano NAT (da $3/mese) basta. Prendi un IP dedicato solo se fai anche self-hosting di qualcosa che serve traffico.
Configura un runner (Ubuntu 24.04)
Crea il runner nel tuo repo (o org): Settings → Actions → Runners → New self-hosted runner → Linux. GitHub mostra un comando di download e un token di registrazione una tantum. Sul VPS:
# come utente non-root (il runner si rifiuta di girare come 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
# registra con l'URL + token dalla UI di GitHub
./config.sh --url https://github.com/YOUR_ORG/YOUR_REPO --token YOUR_TOKEN
Tienilo in funzione come servizio
Non eseguire ./run.sh in un terminale — installalo come servizio systemd così sopravvive ai riavvii:
sudo ./svc.sh install runner
sudo ./svc.sh start
sudo ./svc.sh status
Il runner ora appare come Idle nella UI di GitHub e prende qualsiasi job che lo punta.
Usalo da un workflow
Punta un job al tuo runner con runs-on:
jobs:
build:
runs-on: self-hosted # o una label personalizzata che imposti alla registrazione
steps:
- uses: actions/checkout@v4
- run: make build && make test
Job basati su Docker
Installa Docker una volta e i tuoi workflow possono costruire immagini o far girare service container, con la cache dei layer che persiste tra i run:
sudo apt update && sudo apt install -y docker.io
sudo usermod -aG docker runner # lascia che il runner usi Docker senza sudo
Per isolamento usa-e-getta per-job, fai girare il runner stesso dentro un container e ricrealo a ogni run — uno schema comune per build non fidate o a matrice.
Perché EQVPS per la CI
- Costo fisso, minuti illimitati. Nessun contatore al minuto — una pipeline trafficata costa quanto una inattiva.
- Cache calde. Dipendenze e layer Docker restano su NVMe tra i run; le build diventano più veloci, non più lente.
- Root in ~60 secondi, immagini pulite. Ubuntu, Debian e altro via cloud-init; installa esattamente la toolchain che ti serve.
- Niente KYC, pagamento in crypto. Email per registrarti, USDC/USDT per pagare. Tira su runner extra per i picchi di release e cancellali dopo — il tempo pagato inutilizzato viene accreditato al tuo saldo.
Commenti
Ancora nessun commento. Sii il primo.