Guide de déploiement

Migrer de GitLab vers Gitea sur VPS en 2026

Déployer sur un VPS Cloud →

Tutoriel

Migrer de GitLab vers Gitea sur VPS en 2026

Développement10 min de lecture13 étapes

Depuis le 15 août 2026, GitLab.com a basculé en lecture seule les namespaces comptant plus de cinq membres sur les abonnements gratuits. Pour de nombreuses équipes, c'est une migration forcée — et une occasion de reprendre le contrôle. Gitea, dans sa version 1.27.3 disponible en template VPS chez ServOrbit, offre une alternative légère, auto-hébergée et suffisamment complète pour couvrir la quasi-totalité des besoins d'une équipe de développement de taille intermédiaire. Ce guide couvre l'export GitLab, l'import Gitea, la CI/CD et la gestion des permissions, commandes réelles à l'appui.

Sommaire· Pourquoi GitLab.com est devenu intenable pour les équipes de 5+ personnes1/11
  1. 01Pourquoi GitLab.com est devenu intenable pour les équipes de 5+ personnes
  2. 02Ce que Gitea apporte nativement
  3. 03Prérequis avant de commencer
  4. 04GitLab vs Gitea — critères clés
  5. 05Préparer l'export GitLab
  6. 06Importer dans Gitea sur VPS
  7. 07Configurer la CI/CD dans Gitea
  8. 08Migrer les membres d'équipe et les permissions
  9. 09Dépannage — les 4 erreurs les plus fréquentes
  10. 10Conseil de sécurité post-migration
  11. 11Reprendre le contrôle de votre forge Git

Pourquoi GitLab.com est devenu intenable pour les équipes de 5+ personnes

Le 15 août 2026, GitLab a appliqué une nouvelle politique sur son offre gratuite : tout namespace regroupant plus de cinq membres passe automatiquement en lecture seule (source : support.gitlab.com/hc/en-us/articles/28301407860508). Concrètement, les développeurs supplémentaires ne peuvent plus pousser de code, ouvrir des merge requests ni déclencher des pipelines CI/CD. La seule issue proposée par GitLab est la souscription à un abonnement payant — dont le coût par siège devient rapidement significatif pour une startup ou une agence.

Cette décision intervient dans un contexte plus large de monétisation accélérée de la plateforme SaaS. Elle touche en priorité les équipes open-source à faible budget, les agences multi-projets et les développeurs indépendants qui mutualisent un namespace. Ce n'est pas la première restriction de ce type : GitLab avait déjà supprimé les pipelines CI/CD gratuits pour les nouveaux utilisateurs en 2021. Le mouvement est structurel.

Face à cette contrainte, auto-héberger sa forge Git sur un VPS reprend tout son sens. Vous contrôlez les accès, les données restent sur votre infrastructure, et le coût est fixe — celui du serveur, pas celui des sièges.

Ce que Gitea apporte nativement

  • Forge Git complète — repositories, branches, tags, pull requests, code review inline et gestion des conflits via l'interface web.
  • Gestion des organisations et des équipes — permissions granulaires par dépôt (lecture, écriture, admin) sans limite de membres.
  • Gitea Actions — moteur de CI/CD compatible avec la syntaxe YAML de GitHub Actions, ce qui facilite la portabilité des workflows existants.
  • Registre de paquets intégré — npm, PyPI, Maven, Docker, Helm : publiez et consommez vos artefacts sans dépendance externe.
  • Webhooks et API REST — surface d'API large pour intégrer vos outils de déploiement, notifications Slack ou tableaux de bord internes.
  • Authentification SSO — LDAP, OAuth2, SAML et OpenID Connect pris en charge nativement pour centraliser l'identité.
  • Empreinte mémoire réduite — 512 Mo de RAM suffisent pour une équipe de dix personnes ; 1 Go recommandé pour les Actions concurrentes.
  • Mises à jour simples — binaire unique ou image Docker officielle, migrations de base de données automatiques à chaque version.

Prérequis avant de commencer

Côté serveur, Gitea v1.27.3 tourne confortablement avec 512 Mo de RAM pour un usage minimal ; prévoyez 1 Go si vous activez les Actions Gitea avec des runners concurrents. Le template VPS ServOrbit part sur une image Debian 12 avec Docker pré-installé — c'est le mode de déploiement recommandé car il isole le processus Gitea et simplifie les mises à jour.

Côté réseau, pointez un sous-domaine vers l'IP de votre VPS avant de lancer l'installation : Gitea génère les URLs des clones SSH et HTTPS au premier démarrage, et il est fastidieux de les corriger après coup. Un enregistrement A git.mondomaine.com suffit. Prévoyez également un certificat TLS — Caddy ou Traefik peuvent le générer automatiquement via Let's Encrypt en frontal de Gitea.

Sur GitLab.com, vérifiez que vous disposez des droits Owner sur le groupe ou les projets à migrer : l'export nécessite ce niveau d'accès. Générez un token d'API personnel avec les scopes api et read_repository — il servira lors de l'export via l'API REST.

GitLab vs Gitea — critères clés

Faites défiler le tableau

CritèreGitLab.com FreeGitea VPS
Limite de membres (gratuit SaaS)5 membres (lecture seule au-delà depuis août 2026)Non restreint en auto-hébergé
Empreinte mémoire minimale4 Go (GitLab CE self-hosted)512 Mo
CI/CD intégréeGitLab CI (YAML)Gitea Actions (syntaxe GitHub Actions)
Registre de conteneursOui (GitLab Container Registry)Oui (Gitea Packages — Docker inclus)
Gestion des merge/pull requestsMerge Requests avancéesPull Requests avec code review inline
Authentification SSOSAML, LDAP, OAuth2LDAP, OAuth2, SAML, OIDC
Import depuis GitLabN/AImport natif via API ou archive .tar.gz
Coût d'exploitation29 $/utilisateur/mois (Premium)Coût du VPS uniquement (99 DH/mois/mois)

Préparer l'export GitLab

  1. Connectez-vous à GitLab.com et naviguez vers le projet à exp

    Connectez-vous à GitLab.com et naviguez vers le projet à exporter : Settings > General > Advanced > Export project. Cliquez sur « Export project » et attendez l'e-mail de confirmation (quelques minutes pour les petits dépôts, jusqu'à une heure pour les grands).

  2. Pour exporter via l'API sans passer par l'interface, déclenc

    Pour exporter via l'API sans passer par l'interface, déclenchez l'export avec : curl --request POST --header "PRIVATE-TOKEN: <votre-token>" "https://gitlab.com/api/v4/projects/<project-id>/export"

  3. Vérifiez l'état de l'export avec

    Vérifiez l'état de l'export avec : curl --header "PRIVATE-TOKEN: <votre-token>" "https://gitlab.com/api/v4/projects/<project-id>/export" — attendez le statut finished.

  4. Téléchargez l'archive d'export

    Téléchargez l'archive d'export : curl --location --header "PRIVATE-TOKEN: <votre-token>" "https://gitlab.com/api/v4/projects/<project-id>/export/download" --output gitlab-export.tar.gz

  5. Pour migrer l'historique Git brut en complément, clonez le d

    Pour migrer l'historique Git brut en complément, clonez le dépôt avec toutes les références : git clone --mirror [email protected]:votre-groupe/votre-projet.git votre-projet.git

  6. Vérifiez l'intégrité du clone miroir avant de transférer

    Vérifiez l'intégrité du clone miroir avant de transférer : git -C votre-projet.git fsck --no-progress — aucune erreur ne doit apparaître.

  7. Transférez l'archive et le dépôt miroir vers votre VPS

    Transférez l'archive et le dépôt miroir vers votre VPS : rsync -avz gitlab-export.tar.gz votre-projet.git user@votre-vps:/tmp/migration/

Importer dans Gitea sur VPS

  1. Sur votre VPS, créez l'organisation cible dans Gitea via l'i

    Sur votre VPS, créez l'organisation cible dans Gitea via l'interface web ou via l'API : curl -X POST "https://git.mondomaine.com/api/v1/orgs" -H "Authorization: token <gitea-token>" -H "Content-Type: application/json" -d '{"username":"mon-organisation","visibility":"private"}'

  2. Créez le dépôt vide dans Gitea avant l'import

    Créez le dépôt vide dans Gitea avant l'import : curl -X POST "https://git.mondomaine.com/api/v1/orgs/mon-organisation/repos" -H "Authorization: token <gitea-token>" -H "Content-Type: application/json" -d '{"name":"mon-projet","private":true}'

  3. Poussez l'historique Git depuis le clone miroir

    Poussez l'historique Git depuis le clone miroir : git -C votre-projet.git remote set-url origin https://git.mondomaine.com/mon-organisation/mon-projet.git puis git -C votre-projet.git push --mirror

  4. Pour importer les issues et les merge requests depuis l'arch

    Pour importer les issues et les merge requests depuis l'archive GitLab, utilisez l'outil gitea-migrator ou l'import natif Gitea : dans l'interface, + New Migration > GitLab et fournissez l'URL du projet source avec votre token GitLab.

  5. Vérifiez que toutes les branches et tous les tags sont prése

    Vérifiez que toutes les branches et tous les tags sont présents : git ls-remote https://git.mondomaine.com/mon-organisation/mon-projet.git doit lister les mêmes références que l'original.

  6. Mettez à jour les URLs de clone dans les configurations loca

    Mettez à jour les URLs de clone dans les configurations locales de chaque développeur : git remote set-url origin https://git.mondomaine.com/mon-organisation/mon-projet.git

Configurer la CI/CD dans Gitea

Gitea v1.27.3 intègre Gitea Actions, un moteur de CI/CD dont la syntaxe YAML est volontairement compatible avec GitHub Actions. Si vos pipelines existaient sur GitLab CI, une adaptation est nécessaire — les étapes stages et script de GitLab se traduisent en jobs et steps Gitea Actions — mais la logique reste identique.

Pour activer les runners, installez act_runner sur votre VPS ou sur une machine dédiée : act_runner register --no-interactive --instance https://git.mondomaine.com --token <runner-token> --name mon-runner --labels ubuntu-latest:docker://node:20-bullseye. Le token de registration se trouve dans Site Administration > Runners.

Si vous préférez une CI/CD plus découplée, Woodpecker CI est une alternative mature qui s'intègre nativement à Gitea via OAuth2 et propose une interface de supervision des builds. Son fichier de pipeline .woodpecker.yml est également proche de la syntaxe Drone CI, ce qui simplifie les migrations depuis d'anciens stacks. Dans les deux cas, la première pipeline devrait valider le build, exécuter les tests et, si tout est vert, pousser une image vers le registre Docker de Gitea.

Migrer les membres d'équipe et les permissions

Gitea organise les accès en trois niveaux : les organisations (équivalentes aux groupes GitLab), les équipes au sein d'une organisation, et les permissions par dépôt. Commencez par créer tous les comptes utilisateurs — soit manuellement, soit en activant l'auto-enregistrement temporairement, soit via LDAP/SSO si vous en disposez déjà.

Créez ensuite les équipes dans votre organisation : Owners, Developers, Reporters correspondent aux rôles Owner, Developer et Reporter de GitLab. Gitea permet d'affiner les permissions par dépôt à l'intérieur d'une même équipe — un sous-ensemble de membres peut avoir accès en écriture uniquement à certains repos.

Pour migrer en lot les memberships, l'API Gitea accepte des appels de ce type : curl -X PUT "https://git.mondomaine.com/api/v1/orgs/mon-organisation/teams/<team-id>/members/<username>" -H "Authorization: token <gitea-token>". Un script shell bouclant sur votre liste d'utilisateurs exportée de GitLab suffit pour automatiser cette étape sur des équipes de moins de cinquante personnes. Au-delà, évaluez une intégration LDAP pour synchroniser les groupes automatiquement.

Dépannage — les 4 erreurs les plus fréquentes

remote: repository not found lors du push miroir. Le dépôt cible n'existe pas encore dans Gitea, ou le token utilisé n'a pas les droits d'écriture. Vérifiez que le dépôt a bien été créé (étape 2 de l'import) et que votre token possède le scope write:repository.

error: src refspec refs/merge-requests/... does not match any lors du push --mirror. Les références internes de GitLab (refs/merge-requests/) ne sont pas acceptées par Gitea. Filtrez-les explicitement : git -C votre-projet.git push --mirror peut être précédé d'une suppression locale des refs parasites avec git -C votre-projet.git for-each-ref --format='%(refname)' refs/merge-requests | xargs -I{} git update-ref -d {}.

Error 413: Request Entity Too Large à l'import d'une archive volumineuse. La taille maximale des uploads est configurée dans app.ini de Gitea sous la clé MAX_UPLOAD_SIZE. Augmentez-la (MAX_UPLOAD_SIZE = 2048 pour 2 Go) et rechargez le service : docker compose restart gitea.

Les issues importées n'affichent pas les bons auteurs. Gitea associe les issues aux comptes locaux par nom d'utilisateur. Si le nom GitLab diffère du nom Gitea, les issues sont attribuées à l'utilisateur qui a lancé l'import. Créez d'abord tous les comptes avec les mêmes usernames que sur GitLab avant de lancer la migration des issues.

Conseil de sécurité post-migration

Une fois la migration terminée, désactivez l'auto-enregistrement (DISABLE_REGISTRATION = true dans app.ini) si vous n'utilisez pas de SSO, et activez l'authentification à deux facteurs obligatoire pour tous les membres Owner. Configurez également des sauvegardes automatiques du volume Docker qui contient /data/gitea : un dump quotidien vers un stockage distant (S3, Backblaze B2) vous protège d'une perte de disque. Vérifiez enfin que le port SSH de Gitea (2222 par défaut dans Docker) n'est pas exposé directement sur l'IP publique si vous filtrez par clé SSH — un fail2ban ou une règle UFW limitant les connexions SSH par minute réduit significativement la surface d'attaque.

Reprendre le contrôle de votre forge Git

La restriction GitLab.com du 15 août 2026 a accéléré une tendance déjà engagée : les équipes qui avaient accepté la dépendance à une plateforme SaaS gratuite se retrouvent face à un choix tarifaire non anticipé. Gitea v1.27.3 répond à l'essentiel des besoins d'une forge Git d'équipe — repositories, pull requests, CI/CD, registre de paquets, SSO — dans une empreinte qui tient sur un VPS entrée de gamme.

La migration n'est pas instantanée, mais elle est séquentielle et réversible à chaque étape : l'historique Git est intégral dès le push --mirror, les issues et pull requests suivent via l'import natif, et la CI/CD se reconfigure en quelques heures si vos workflows étaient déjà en YAML. Le template VPS Gitea de ServOrbit vous évite la phase d'installation et de configuration initiale — Gitea est prêt, Docker est en place, il reste à coller votre domaine et à dérouler les étapes décrites ici.

Retrouvez les guides complémentaires sur la stack IA self-hosted avec Gitea et Ollama, le remplacement de GitHub Actions par Woodpecker CI, et l'installation de GitLab CE sur VPS si vous évaluez encore les deux options.

Déployez votre forge Git sur VPS ServOrbit

Template Gitea v1.27.3 prêt à l'emploi, root access, snapshots quotidiens. Votre forge privée en moins de dix minutes.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet