Pourquoi self-héberger sa forge Git sur VPS
Une forge Git auto-hébergée garde votre 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, vous maîtrisez la localisation des données, les sauvegardes et l'intégration avec votre 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 votre 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 votre contrôle, avec vos propres runners sur le VPS
- Secrets et tokens stockés chez vous, hors d'une plateforme tierce
- Registre d'images Docker et de paquets intégré, proche de vos 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
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 : visez 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 vous faut Docker et Compose, un sous-domaine (git.votredomaine.com), un reverse proxy pour le TLS, et idéalement un second sous-domaine si vous activez le registre Docker. Prévoyez un volume dédié aux dépôts et une stratégie de sauvegarde.
Déployer Gitea (ou GitLab) sur VPS avec Docker
Créer les volumes et le réseau
Préparez 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éclarez le service gitea/gitea plus un postgres, montez les volumes, et exposez le port HTTP 3000 et le port SSH Git 2222 en local. Pour GitLab, utilisez gitlab/gitlab-ce avec la variable GITLAB_OMNIBUS_CONFIG pour fixer l'external_url.
Lancer et finaliser l'installation
Exécutez docker compose up -d. Gitea affiche un assistant d'installation à la première connexion (renseignez le type de base et le domaine) ; GitLab met plusieurs minutes à s'initialiser, récupérez le mot de passe root généré dans les logs.
Configurer le reverse proxy et le SSL
Proxifiez git.votredomaine.com vers le port HTTP de la forge avec Caddy ou Nginx pour obtenir un certificat Let's Encrypt. Veillez à transmettre le bon X-Forwarded-Proto afin que les URL de clone HTTPS soient correctes.
Activer le SSH Git
Mappez le port SSH du conteneur vers un port du VPS (ex : 2222) et configurez vos clés. Renseignez SSH_DOMAIN pour que les commandes git clone proposées par l'interface soient exactes.
Brancher la CI/CD
Enregistrez un runner : Gitea Actions (compatible syntaxe GitHub Actions) ou un GitLab Runner Docker. Limitez ses ressources et isolez-le dans son propre conteneur pour qu'un job lourd ne fasse pas tomber la forge.
| 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) |
| Facilite de sauvegarde | Dossier + dump SQL | Procédure omnibus dédiée |
| Idéal pour | VPS modeste, petite/moyenne équipe | Plateforme DevOps complète |
Sur GitLab, évitez l'OOM-kill sur un petit VPS en réduisant la concurrence : passez puma['worker_processes'] à 2 et sidekiq['max_concurrency'] à 10 dans la config omnibus. Si la RAM reste un problème, regardez 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.