Pourquoi self-héberger sa forge Git sur VPS
Une forge Git auto-hébergée garde ta propriété intellectuelle hors des plateformes publiques et supprime toute limite arbitraire sur le nombre de dépôts privés, de collaborateurs ou de minutes de CI. Sur un VPS, tu maîtrises la localisation des données, les sauvegardes et l'intégration avec ton pipeline interne. Gitea (et son fork Forgejo) est écrit en Go : un binaire unique, démarrage instantané, empreinte mémoire minime, idéal pour un VPS modeste. GitLab CE est une suite intégrée (issues, CI/CD, registre Docker, registre de paquets, wiki, environnements) mais consomme bien plus de RAM. Le choix dépend de ton besoin : un Git propre et rapide, ou une plateforme DevOps complète en un seul produit.
Les bénéfices d'une forge auto-hébergée
- Dépôts privés sans plafond ni abonnement par siège
- CI/CD sous ton contrôle, avec tes propres runners sur le VPS
- Secrets et tokens stockés chez toi, hors d'une plateforme tierce
- Registre d'images Docker et de paquets intégré, proche de tes déploiements
- Conformité et localisation des données au Maroc maîtrisées
- Avec Gitea : un seul binaire, sauvegarde en copiant un dossier et une base
Gitea vs GitLab : différences de licence en 2026
Gitea est publié sous licence MIT : tu peux lire le code, le modifier, le redistribuer et l'héberger sans contrainte commerciale. Forgejo, son fork communautaire né en 2022, applique la même licence. GitLab CE est lui aussi MIT — mais uniquement la couche Community Edition. GitLab EE (Enterprise Edition) est propriétaire : les fonctionnalités premium (SAML SSO avancé, approbations de MR multiples, SAST/DAST intégrés, epics, roadmaps) sont verrouillées derrière un abonnement payant qui commence à plusieurs centaines d'euros par utilisateur et par an. Pour une équipe qui self-host GitLab CE, le risque principal n'est pas la licence mais l'effet d'aspiration : les fonctionnalités manquantes du CE poussent progressivement vers l'EE payant. Avec Gitea ou Forgejo, l'intégralité des fonctionnalités disponibles est incluse dans la version libre, sans tier payant. Si la compliance ou les audits de licence comptent dans ton contexte — administration, sous-traitance publique ou grands comptes — cette différence est structurante.
Performance et ressources serveur
Gitea consomme environ 100 à 150 Mo de RAM au repos pour un déploiement Docker standard avec PostgreSQL. Avec une dizaine de runners actifs et quelques pipelines simultanés, tu restes sous 400 Mo pour la forge elle-même. C'est dimensionnable sur un VPS à 2 Go de RAM en laissant de la place pour le système et la base. GitLab CE en omnibus est dans une catégorie différente : PostgreSQL, Redis, Sidekiq, Gitaly, Puma et NGINX tournent en parallèle. Au repos, l'ensemble dépasse couramment 3 à 4 Go de RAM sur un déploiement neuf et peut grimper à 6 à 8 Go sous charge CI. GitLab recommande officiellement 8 Go de RAM pour un usage en production avec CI activé. Sur le CPU, Gitea est quasi invisible au repos ; GitLab déclenche des processus Sidekiq en arrière-plan (indexation, webhooks, nettoyages) qui consomment du CPU de manière intermittente même sans activité visible.
Gitea vs GitLab CE : tableau de bord comparatif
Faites défiler le tableau
| Critère | Gitea / Forgejo | GitLab CE |
|---|---|---|
| RAM au repos | ~128 Mo (forge seule) | 3 à 4 Go (omnibus complet) |
| RAM recommandée production | 1 à 2 Go | 8 Go |
| Architecture | Binaire Go unique | Suite multi-services (omnibus) |
| Temps de démarrage | Quasi instantané | Plusieurs minutes |
| Licence | MIT (Gitea) / MIT (Forgejo) | MIT (CE) / propriétaire (EE) |
| CI/CD intégrée | Gitea Actions (style GitHub) | GitLab CI/CD, très complète |
| Runners distribués | Basique (act runner) | Avancé (distributed runners, k8s executor) |
| SAST / DAST intégré | Non (via plugins CI) | EE uniquement |
| Approbations de MR multiples | Simple | Avancé (EE) |
| Registre Docker / paquets | Inclus et léger | Inclus, riche |
| Gestion de projet (issues, boards) | Essentielle | Avancée (epics selon édition) |
| Facilité de sauvegarde | Dossier + dump SQL | Procédure omnibus dédiée |
| Idéal pour | VPS modeste, équipe 1 à 30 devs | Plateforme DevOps enterprise |
Fonctionnalités CI/CD comparées
Gitea Actions est apparu dans Gitea 1.19 (2023) et reprend exactement la syntaxe des workflows GitHub Actions : les fichiers .github/workflows/*.yml existants sont réutilisables sans modification dans la plupart des cas. L'exécuteur sous-jacent est act (le moteur open source qui simule GitHub Actions localement), encapsulé dans un runner Docker. C'est suffisant pour la majorité des pipelines : build, test, lint, push d'image, déploiement SSH. Les limites apparaissent sur les cas avancés : pas de caches partagés entre runners à l'échelle, pas d'environnements de review nativement, gestion des artefacts plus limitée. GitLab CI est plus mature sur ces points : runners distribués sur plusieurs machines, exécuteurs Kubernetes, caches partagés, environnements dynamiques, review apps, pages de rapports de test inline, règles rules: et include: puissantes. Si ton pipeline dépasse la dizaine de jobs parallèles, gère des environnements de review par MR ou requiert un SAST/DAST intégré au rapport de merge, GitLab CI est irremplaçable dans sa version CE (pour la CI/CD elle-même — les SAST restent EE). La règle pratique : Gitea Actions suffit pour les équipes de 1 à 20 développeurs avec des pipelines standards ; GitLab CI s'impose dès que la maturité du pipeline devient un critère de choix en soi.
Migration GitLab → Gitea : ce que couvre la CVE-2026-85706
La CVE-2026-85706 est une vulnérabilité de type Server-Side Request Forgery (SSRF) découverte dans GitLab CE et EE affectant les versions antérieures au correctif de mars 2026. Elle permet à un attaquant authentifié de forcer GitLab à effectuer des requêtes HTTP vers des ressources internes du réseau via la fonctionnalité d'import de dépôt distant. Sur un VPS où GitLab partage le réseau interne avec d'autres services (bases de données, registres, APIs), l'exposition est réelle. Gitea n'est pas affecté par cette CVE spécifique — son code d'import distant est distinct. La migration GitLab → Gitea est documentée et couverte par l'outil gitea-migration-tool : il importe les dépôts, les issues, les labels, les milestones, les pull requests et les commentaires depuis l'API GitLab. Les pipelines CI/CD ne migrent pas automatiquement (syntaxe GitLab CI ≠ Gitea Actions), mais pour les équipes utilisant une syntaxe proche de GitHub Actions dans leur CI GitLab, la conversion est légère. Si tu utilises une version de GitLab CE non patchée sur un VPS exposé, la migration vers Gitea ou la mise à jour urgente sont les deux seules options raisonnables.
Quand choisir GitLab CE malgré le coût en ressources
- Équipe de plus de 50 développeurs actifs : la gestion fine des permissions et les groupes imbriqués de GitLab justifient la complexité
- Compliance enterprise ou certification ISO 27001 : les journaux d'audit, les approbations de MR avec quorum et les politiques de push protégées sont plus matures
- SAST / DAST intégrés au pipeline (nécessite GitLab EE, mais certaines équipes préfèrent tout consolider sur un seul outil payant)
- Review apps et environnements dynamiques par MR : GitLab CI gère cela nativement, Gitea Actions requiert un outillage externe
- Besoin de runners Kubernetes avec autoscaling : GitLab dispose d'un opérateur K8s dédié et d'un executor natif
- Wiki lié au dépôt avec historique Git et rendus Mermaid / PlantUML intégrés dans l'interface
Prérequis selon la forge choisie
Gitea est frugal : 1 vCPU et 1 Go de RAM suffisent pour une petite équipe, 2 Go avec la base de données et quelques runners. GitLab CE est bien plus gourmand : vise au minimum 4 Go de RAM (8 Go recommandés en usage réel avec CI), 4 vCPU et un disque rapide, car la suite embarque PostgreSQL, Redis, Sidekiq et Gitaly. Dans les deux cas il te faut Docker et Compose, un sous-domaine (git.tondomaine.com), un reverse proxy pour le TLS, et idéalement un second sous-domaine si tu actives le registre Docker. Prévois un volume dédié aux dépôts et une stratégie de sauvegarde.
Installer Gitea sur VPS ServOrbit en 4 étapes
Préparer le volume et le réseau Docker
Sur ton VPS ServOrbit, crée les répertoires de données et un réseau Docker isolé :
mkdir -p /srv/gitea/{data,db} && docker network create forge. Ce réseau permettra à Gitea et à PostgreSQL de communiquer sans exposer la base à l'interface publique.Écrire le docker-compose.yml
Déclare deux services :
gitea/gitea:latestmonté sur/srv/gitea/dataetpostgres:16-alpinemonté sur/srv/gitea/db. Expose le port3000en interne (ton reverse proxy l'atteindra) et le port SSH Git2222vers l'extérieur. PasseGITEA__database__DB_TYPE=postgres,GITEA__server__DOMAINetGITEA__server__ROOT_URLen variables d'environnement.Configurer le domaine et le SSL
Dans ton espace client ServOrbit, crée un enregistrement DNS
git.tondomaine.compointant vers l'IP de ton VPS. Proxifie ce sous-domaine avec Caddy ou Nginx vers le port3000de Gitea. Caddy gère Let's Encrypt automatiquement ; avec Nginx, ajoute un bloccertbot. Vérifie queX-Forwarded-Proto: httpsest transmis pour que les URL de clone soient correctes.Créer le premier dépôt et brancher un runner CI
Lance
docker compose up -d, puis accède àhttps://git.tondomaine.com. L'assistant d'installation s'ouvre pour la première connexion : renseigne le type de base (PostgreSQL), confirme le domaine et crée le compte admin. Pour la CI, installeact_runnersur le même VPS ou sur un second VPS léger, enregistre-le dans les paramètres de l'instance Gitea (Administration → Runners), et place ton premier fichier.gitea/workflows/ci.ymldans un dépôt.
Déployer Gitea (ou GitLab) sur VPS avec Docker
Créer les volumes et le réseau
Prépare
mkdir -p /srv/gitea/{data,db}et un réseau Docker dédiédocker network create forge. La séparation data/db facilite les sauvegardes différenciées du code et de la base.Définir le docker-compose.yml
Pour Gitea, déclare le service
gitea/giteaplus unpostgres, monte les volumes, et expose le port HTTP3000et le port SSH Git2222en local. Pour GitLab, utilisegitlab/gitlab-ceavec la variableGITLAB_OMNIBUS_CONFIGpour fixer l'external_url.Lancer et finaliser l'installation
Exécute
docker compose up -d. Gitea affiche un assistant d'installation à la première connexion (renseigne le type de base et le domaine) ; GitLab met plusieurs minutes à s'initialiser, récupère le mot de passe root généré dans les logs.Configurer le reverse proxy et le SSL
Proxifie git.tondomaine.com vers le port HTTP de la forge avec Caddy ou Nginx pour obtenir un certificat Let's Encrypt. Veille à transmettre le bon
X-Forwarded-Protoafin que les URL de clone HTTPS soient correctes.Activer le SSH Git
Mappe le port SSH du conteneur vers un port du VPS (ex : 2222) et configure tes clés. Renseigne
SSH_DOMAINpour que les commandesgit cloneproposées par l'interface soient exactes.Brancher la CI/CD
Enregistre un runner : Gitea Actions (compatible syntaxe GitHub Actions) ou un GitLab Runner Docker. Limite ses ressources et isole-le dans son propre conteneur pour qu'un job lourd ne fasse pas tomber la forge.
Gitea vs GitLab CE : comparaison rapide
Faites défiler le tableau
| Critère | Gitea | GitLab CE |
|---|---|---|
| RAM minimale conseillée | 1 à 2 Go | 4 à 8 Go |
| Architecture | Binaire Go unique | Suite multi-services (omnibus) |
| Temps de démarrage | Quasi instantané | Plusieurs minutes |
| CI/CD intégrée | Gitea Actions (style GitHub) | GitLab CI/CD, très complète |
| Registre Docker / paquets | Inclus et léger | Inclus, riche |
| Gestion de projet (issues, boards) | Essentielle | Avancée (epics selon édition) |
| Facilité de sauvegarde | Dossier + dump SQL | Procédure omnibus dédiée |
| Idéal pour | VPS modeste, petite/moyenne équipe | Plateforme DevOps complète |
Gitea + Woodpecker CI : la stack légère pour équipes de 1 à 15
Si Gitea Actions te semble trop proche de l'écosystème GitHub et que tu veux une CI strictement self-hosted sans dépendance à act, regarde Woodpecker CI (fork de Drone CI, licence Apache 2.0). Il s'intègre nativement à Gitea via OAuth, tourne en Docker, et sa syntaxe YAML est plus explicite que GitHub Actions. La stack Gitea + Woodpecker CI consomme moins de 300 Mo de RAM au repos sur un VPS à 2 Go — contre 4 Go minimum pour GitLab CE avec CI. Pour les équipes de 1 à 15 développeurs avec des pipelines classiques (build, test, push Docker, déploiement SSH), c'est la combinaison la plus frugale disponible en self-hosted.
Sur GitLab, évite l'OOM-kill sur un petit VPS en réduisant la concurrence : passe puma['worker_processes'] à 2 et sidekiq['max_concurrency'] à 10 dans la config omnibus. Si la RAM reste un problème, regarde du côté de Forgejo (fork communautaire de Gitea) qui conserve la légèreté tout en couvrant 90% des besoins d'une équipe, registre et Actions inclus.