Le CI auto-hébergé sur un VPS est un de ces investissements infra qui se rentabilise discrètement. Les runners GitHub Actions coûtent de l'argent réel à l'échelle (0,008 $/minute sur repos privés), et la même charge tourne plus vite sur un VPS correctement dimensionné.
Quand auto-héberger CI
Le CI auto-hébergé a du sens quand :
- Vous dépensez 50 $+/mois en minutes CI hébergées
- Vos builds doivent accéder à des ressources privées
- Vous avez des besoins hardware spécifiques (GPU pour tests ML, ARM64)
- Vous voulez que les artifacts restent dans votre infra (conformité/souveraineté)
- Vous voulez que les builds soient plus rapides — runners VPS-hosted typiquement 1,5-3× plus rapides
Approche 1 : Runners auto-hébergés GitHub Actions
Si vous êtes déjà sur GitHub, c'est l'option à friction la plus basse. Provisionnez un Cloud VPS Advanced (7,48 €/mois) ou Professional (14,48 €/mois). SSH :
sudo adduser --system --group --home /opt/github-runner github-runner
sudo mkdir -p /opt/github-runner
cd /opt/github-runner
sudo -u github-runner curl -o actions-runner-linux-x64-2.319.1.tar.gz -L https://github.com/actions/runner/releases/download/v2.319.1/actions-runner-linux-x64-2.319.1.tar.gz
sudo -u github-runner tar xzf actions-runner-linux-x64-2.319.1.tar.gz
Obtenez un token d'enregistrement depuis GitHub, puis sur le VPS :
sudo -u github-runner ./config.sh --url https://github.com/votre-org/votre-repo --token YOUR_TOKEN
sudo ./svc.sh install github-runner
sudo ./svc.sh start
Considérations sécurité
Les runners auto-hébergés exécutent du code de tout contributeur dont la PR déclenche un workflow. Pour les repos publics, c'est un problème sérieux — restreignez les runners à des événements spécifiques.
Optimisations
- Caches persistants : npm, pip, cargo entre builds économisent du temps significatif
- Plusieurs runners sur un VPS
- Isolation Docker-based
Approche 2 : GitLab auto-hébergé + GitLab Runner
Si vous préférez ne pas dépendre de GitHub du tout, GitLab CE est open-source et auto-hébergeable.
Sizing : GitLab CE veut 4 Go RAM minimum, 8 Go recommandé. Plan pour Cloud VPS Professional (14,48 €/mois) ou plus.
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ce
sudo cat /etc/gitlab/initial_root_password
Installez GitLab Runner séparément :
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
sudo apt install gitlab-runner
sudo gitlab-runner register
Un .gitlab-ci.yml typique
stages:
- test
- build
- deploy
test:
stage: test
image: node:20
cache:
paths:
- node_modules/
script:
- npm ci
- npm test
build:
stage: build
image: docker:24
services:
- docker:24-dind
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
only:
- main
La comparaison de coûts
Pour une équipe à ~3000 minutes CI/mois :
- Runners GitHub-hosted (Linux) : 24 $/mois
- FranceVPS Professional self-hosted : 14,48 €/mois, minutes illimitées
Le break-even est ~1 800 minutes/mois. En dessous, GitHub-hosted convient. Au-dessus, auto-hébergé est moins cher.
Où le CI auto-hébergé pèche
- Scaling up : si vous avez besoin de 50 jobs concurrents, un VPS unique ne peut pas livrer
- Isolation des jobs : Docker-based aide, mais un job malicieux peut échapper
- Hétérogénéité OS : si vous testez aussi Windows ou macOS, retour aux runners hosted
Pour la plupart des charges CI internes, aucun de ces points n'est bloquant.