[{"data":1,"prerenderedAt":153},["ShallowReactive",2],{"seo-verification":3,"blog-migrer-depots-github-vers-gitea-vps-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"slugs":9,"title":12,"excerpt":13,"readTime":14,"views":15,"isPinned":16,"publishedAt":17,"category":18,"categories":23,"featuredImage":25,"bgImage":26,"posterImage":27,"relatedSolution":28,"intro":31,"sections":32,"ctaTitle":95,"ctaBody":96,"ctaButton":97,"ctaUrl":98,"relatedPosts":99},279,"migrer-depots-github-vers-gitea-vps",{"fr":8,"en":10,"ar":11},"migrate-your-github-repos-to-self-hosted-gitea-on-a-vps","نقل-مستودعات-github-إلى-gitea-على-خادم-vps-خاص","Migrer ses dépôts GitHub vers Gitea sur VPS","Exportez vos dépôts, issues et labels via l'API GitHub, importez-les dans Gitea en moins d'une heure, redirigez vos remotes — sans perte d'historique.",9,0,false,"2026-08-18T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":21},3,"Déploiement","deploiement","bg-success\u002F10 text-success",[24],{"id":19,"name":20,"slug":21,"color":22,"icon":21},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fmigrer-depots-github-vers-gitea-vps-poster.svg",{"categorySlug":29,"appSlug":30},"developpement","gitea","Les pannes répétées de GitHub en août 2026 et la montée des coûts de GitHub Actions ont poussé des milliers d'équipes à chercher une sortie concrète. Gitea, installé sur un VPS avec un seul binaire, offre une API compatible et un runner CI natif. Ce guide vous mène de l'export GitHub à la première mise à jour `git push` sur votre propre forge, en moins d'une heure.",[33,37,47,50,72,75,78,81,92],{"type":34,"title":35,"body":36},"h2","Pourquoi quitter GitHub pour une forge self-hosted","GitHub reste la référence, mais trois tendances ont convergé en 2026 pour rendre le départ concret plutôt que théorique.\n\nPremière tendance : les pannes. Plusieurs incidents documentés sur \u003Ca href=\"https:\u002F\u002Fwww.githubstatus.com\">githubstatus.com\u003C\u002Fa> ont affecté Git Operations et Actions en août 2026, bloquant des pipelines en production au pire moment. Le fil Hacker News « Alternatives to GitHub » a atteint 472 points et 299 commentaires le 2026-08-17 — signe que la question n'est plus académique.\n\nDeuxième tendance : le coût des minutes CI. GitHub Actions est gratuit jusqu'à un certain quota mensuel sur les dépôts publics, mais toute équipe qui dépasse ce quota sur des dépôts privés paie à la minute — avec un multiplicateur selon l'OS du runner. Un runner Linux facture les minutes au tarif standard ; un runner macOS les facture au tarif le plus élevé. Ces détails sont consultables sur \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpricing\">github.com\u002Fpricing\u003C\u002Fa>.\n\nTroisième tendance : la souveraineté du code. Certaines équipes préfèrent que le seul accès à leur dépôt soit root sur leur propre VM, pas un token SaaS révocable unilatéralement.",{"type":38,"title":39,"items":40},"ul","Ce que Gitea self-hosted apporte concrètement",[41,42,43,44,45,46],"**Historique complet préservé** : l'import via l'API Gitea consomme une archive tar.gz GitHub — commits, branches et tags intacts.","**Issues et labels migrés** : l'endpoint `POST \u002Fapi\u002Fv1\u002Frepos\u002Fmigrate` transfère issues, milestones et labels en une passe.","**Runner CI natif** : gitea-runner (basé sur act) comprend la syntaxe des workflows GitHub Actions — la plupart des pipelines fonctionnent sans réécriture.","**Coût prévisible** : un VPS avec 1 vCPU et 1 Go de RAM suffit pour une petite équipe ; le logiciel est open source, sans licence ni quota de minutes.","**Webhooks compatibles** : Gitea expose les mêmes événements (`push`, `pull_request`, `release`) que GitHub — les intégrations tierces (Slack, Woodpecker CI) restent câblées sans modification.","**API token local** : les accès se gèrent dans votre interface, jamais chez un tiers.",{"type":34,"title":48,"body":49},"Prérequis","Avant de commencer, réunissez les éléments suivants.\n\n**Côté GitHub** : un token d'accès personnel (`Settings → Developer settings → Personal access tokens`) avec les scopes `repo` et `read:org`. Gardez-le sous la main — vous l'utiliserez dans chaque appel `curl`.\n\n**Côté Gitea** : une instance Gitea déjà installée (voir notre guide « Héberger Gitea sur votre propre VPS ») et un token admin (`gitea-admin → Settings → Applications → Generate Token`). Adresse de base notée `https:\u002F\u002Fgit.votre-domaine.com`.\n\n**Côté poste local** : `git` 2.x, `curl` et `jq` installés. Comptez **1 Go de RAM** minimum sur le VPS pour l'import de dépôts de taille courante.",{"type":51,"title":52,"steps":53},"steps","Migration pas à pas",[54,57,60,63,66,69],{"title":55,"body":56},"Créer l'organisation Gitea cible","Dans l'interface Gitea, allez dans **`+` → New Organization**, choisissez un nom identique à votre organisation GitHub (cela simplifiera la mise à jour des remotes).\n\nOu via l'API :\n```bash\ncurl -s -X POST https:\u002F\u002Fgit.votre-domaine.com\u002Fapi\u002Fv1\u002Forgs \\\n  -H \"Authorization: token VOTRE_TOKEN_GITEA\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"username\":\"mon-org\",\"visibility\":\"private\"}'\n```",{"title":58,"body":59},"Lister et exporter les dépôts GitHub","Récupérez la liste de vos dépôts (paginée à 100 par page) :\n```bash\ncurl -s -H \"Authorization: token VOTRE_TOKEN_GITHUB\" \\\n  \"https:\u002F\u002Fapi.github.com\u002Forgs\u002FMON_ORG\u002Frepos?per_page=100&page=1\" \\\n  | jq -r '.[].name' > repos.txt\n```\nL'endpoint GitHub utilisé ici est `GET \u002Frepos\u002F{owner}\u002F{repo}\u002Ftarball\u002F{ref}` pour l'archive complète, et `GET \u002Forgs\u002F{org}\u002Frepos` pour l'inventaire. Vérifiez la documentation officielle à \u003Ca href=\"https:\u002F\u002Fdocs.github.com\u002Fen\u002Frest\u002Frepos\u002Fcontents\">docs.github.com\u003C\u002Fa>.",{"title":61,"body":62},"Importer chaque dépôt via l'API Gitea","L'endpoint `POST \u002Fapi\u002Fv1\u002Frepos\u002Fmigrate` de l'API Gitea v1 accepte une URL de source GitHub (documentation officielle : \u003Ca href=\"https:\u002F\u002Fgitea.io\u002Fapi\u002Fswagger\">gitea.io\u003C\u002Fa>). Pour chaque dépôt :\n```bash\nwhile IFS= read -r REPO; do\n  curl -s -X POST https:\u002F\u002Fgit.votre-domaine.com\u002Fapi\u002Fv1\u002Frepos\u002Fmigrate \\\n    -H \"Authorization: token VOTRE_TOKEN_GITEA\" \\\n    -H \"Content-Type: application\u002Fjson\" \\\n    -d \"{\\n      \\\\\\\"clone_addr\\\\\\\": \\\\\\\"https:\u002F\u002Fgithub.com\u002FMON_ORG\u002F$REPO\\\\\\\",\\n      \\\\\\\"auth_token\\\\\\\": \\\\\\\"VOTRE_TOKEN_GITHUB\\\\\\\",\\n      \\\\\\\"uid\\\\\\\": 2,\\n      \\\\\\\"repo_name\\\\\\\": \\\\\\\"$REPO\\\\\\\",\\n      \\\\\\\"issues\\\\\\\": true,\\n      \\\\\\\"labels\\\\\\\": true,\\n      \\\\\\\"milestones\\\\\\\": true,\\n      \\\\\\\"mirror\\\\\\\": false\\n    }\"\ndone \u003C repos.txt\n```\n`uid` est l'identifiant numérique de votre organisation Gitea (visible dans l'API `GET \u002Fapi\u002Fv1\u002Forgs\u002Fmon-org`). Le champ `mirror: false` indique un import ponctuel — passez à `true` si vous voulez une synchronisation continue pendant la phase de transition.",{"title":64,"body":65},"Rediriger les remotes locaux","Pour chaque dépôt cloné sur votre poste :\n```bash\ngit remote set-url origin https:\u002F\u002Fgit.votre-domaine.com\u002Fmon-org\u002Fmon-repo.git\n```\nOu en SSH si vous avez ajouté votre clé publique dans Gitea (`Settings → SSH \u002F GPG Keys`) :\n```bash\ngit remote set-url origin git@git.votre-domaine.com:mon-org\u002Fmon-repo.git\n```\nVérifiez avec `git remote -v` puis testez un `git fetch` pour confirmer que le remote répond.",{"title":67,"body":68},"Mettre à jour les webhooks","Dans Gitea, pour chaque dépôt : **Settings → Webhooks → Add Webhook**. Collez l'URL de votre CI ou de votre service tiers (Slack, Woodpecker CI, etc.) en remplaçant `github.com` par `git.votre-domaine.com`.\n\nLes événements disponibles (`push`, `pull_request`, `issues`, `release`) sont identiques à ceux de GitHub — les payloads ont la même structure de base pour la majorité des intégrations.",{"title":70,"body":71},"Migrer le pipeline CI vers gitea-runner","Installez le runner officiel sur votre VPS :\n```bash\nwget -O gitea-runner https:\u002F\u002Fdl.gitea.com\u002Fact_runner\u002Flatest\u002Fact_runner-latest-linux-amd64\nchmod +x gitea-runner\n.\u002Fgitea-runner register --no-interactive \\\n  --instance https:\u002F\u002Fgit.votre-domaine.com \\\n  --token VOTRE_TOKEN_RUNNER \\\n  --name vps-runner \\\n  --labels ubuntu-latest:docker:\u002F\u002Fnode:20-bullseye\n.\u002Fgitea-runner daemon &\n```\nLe token de runner se génère dans Gitea : **Site Administration → Runners → Create new Runner Token**.\n\nVos fichiers `.github\u002Fworkflows\u002F*.yml` existants sont compris par gitea-runner sans modification pour les actions courantes (`actions\u002Fcheckout`, `actions\u002Fsetup-node`, etc.). Renommez le dossier `.github\u002Fworkflows\u002F` en `.gitea\u002Fworkflows\u002F` pour activer le runner Gitea de façon propre (les deux chemins sont supportés, mais `.gitea\u002F` est le chemin natif).",{"type":34,"title":73,"body":74},"Vérifications post-migration","Une fois la migration terminée, validez ces trois points avant de couper l'accès GitHub.\n\n**Clones SSH** : depuis un poste fraîchement cloné, `git clone git@git.votre-domaine.com:mon-org\u002Fmon-repo.git` doit aboutir sans prompt de mot de passe si votre clé publique est enregistrée dans Gitea.\n\n**Webhooks actifs** : dans chaque dépôt, ouvrez **Settings → Webhooks** et cliquez **Test Delivery**. Un code `200` dans les logs de livraison confirme que votre CI reçoit les événements.\n\n**Historique intact** : `git log --oneline -10` sur le dépôt migré doit afficher les mêmes dix derniers commits que sur GitHub, dans le même ordre.",{"type":76,"body":77},"tip","Si vous migrez plusieurs dizaines de dépôts, lancez les appels `curl` de migration en parallèle avec `xargs -P 4` pour diviser le temps d'attente par quatre. Gitea gère les imports concurrents sans perte — la seule limite est la bande passante sortante de GitHub et entrante de votre VPS.",{"type":34,"title":79,"body":80},"Dépannage — erreurs courantes","Voici les trois situations les plus fréquentes lors d'une migration.",{"type":51,"title":25,"steps":82},[83,86,89],{"title":84,"body":85},"SSH : `Permission denied (publickey)`","Symptôme : `git clone git@git.votre-domaine.com:…` échoue avec `Permission denied (publickey)`.\n\nVérification : dans Gitea, **Settings → SSH \u002F GPG Keys** — la clé publique que vous utilisez doit y figurer. Ajoutez-la si elle est absente (`cat ~\u002F.ssh\u002Fid_ed25519.pub | pbcopy` ou `xclip`).\n\nSi la clé est présente mais l'erreur persiste, vérifiez que le port SSH de Gitea est bien `22` (ou le port configuré) : `ssh -vT git@git.votre-domaine.com -p 22` affichera la négociation et le message d'acceptation de Gitea si la clé est reconnue.",{"title":87,"body":88},"Remote : `fatal: repository not found`","Symptôme : `git fetch` renvoie `fatal: repository 'https:\u002F\u002Fgit.votre-domaine.com\u002F…' not found`.\n\nDiagnostic : `git remote -v` — vérifiez que l'URL pointe bien vers votre instance Gitea et non vers `github.com`. Si l'URL est correcte, connectez-vous à l'interface Gitea et confirmez que le dépôt existe sous le bon nom d'organisation. Un `POST \u002Fapi\u002Fv1\u002Frepos\u002Fmigrate` qui a échoué en silence laisse le dépôt absent sans message d'erreur dans le remote local.",{"title":90,"body":91},"Webhooks silencieux après migration","Symptôme : un `git push` ne déclenche pas de build dans votre CI.\n\nDiagnostic : dans Gitea, **Site Administration → System Settings → Git Hooks** — activez la journalisation des hooks. Puis, dans le dépôt, **Settings → Webhooks → dernière livraison** : le champ « Response » affiche le code HTTP renvoyé par votre CI. Un `404` signifie que l'URL du webhook pointe vers une route inexistante ; un `401` signifie un secret HMAC mal configuré.\n\nActivez le mode debug du runner : dans le fichier de configuration de gitea-runner, passez `log_level` à `debug` et relancez le daemon. Les logs afficheront la réception de chaque événement et le code d'activation du job.",{"type":34,"title":93,"body":94},"Héberger Gitea sur un VPS ServOrbit","Gitea tourne confortablement sur un VPS avec **1 vCPU et 1 Go de RAM** pour une petite équipe. Pour une organisation de dix développeurs avec une CI active, 2 vCPU et 2 Go sont un point de départ raisonnable — le runner et Gitea peuvent cohabiter sur la même VM à ce gabarit.\n\nSi l'administration du serveur n'est pas votre priorité, l'option **administration VPS** de ServOrbit couvre exactement ce cas : mises à jour de sécurité, supervision et intervention en cas d'incident — vous gardez l'accès root, nous tenons la VM en état. Votre forge reste la vôtre, sans partager l'infrastructure avec d'autres équipes.\n\nDéployez le template Gitea depuis la Marketplace, sélectionnez votre OS (Ubuntu ou Debian) et votre taille de VPS, et vous disposez d'une instance configurée en quelques minutes. Plans VPS à partir de `{{vps.start.price}}`.","Votre propre forge Git, sur votre VPS","Un VPS avec accès root, IPv4 dédiée et choix d'OS (Ubuntu, Debian, AlmaLinux) : la base pour héberger Gitea sans dépendance à un SaaS. Template Gitea disponible dans la Marketplace.","Activer Gitea sur un VPS","\u002Fmarketplace\u002Fdeveloppement\u002Fgitea",[100,120,138],{"id":101,"slug":102,"slugs":103,"title":106,"excerpt":107,"readTime":108,"views":109,"isPinned":16,"publishedAt":110,"category":111,"categories":117,"featuredImage":25,"bgImage":26,"posterImage":119,"relatedSolution":25},75,"heberger-forgejo",{"fr":102,"en":104,"ar":105},"host-forgejo-on-your-own-vps","استضافة-forgejo-على-خادم-vps-الخاص-بك","Héberger Forgejo sur votre VPS : guide complet 2025","Installez Forgejo sur votre VPS avec Docker, SSL, runners Actions et sécurité renforcée. Guide pas-à-pas de 1900 mots pour une forge Git souveraine.",10,1,"2026-04-06T00:00:00+00:00",{"id":112,"name":113,"slug":114,"color":115,"icon":116},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[118],{"id":112,"name":113,"slug":114,"color":115,"icon":116},"\u002Fblog\u002Fcovers\u002Fheberger-forgejo-poster.svg",{"id":121,"slug":122,"slugs":123,"title":126,"excerpt":127,"readTime":128,"views":109,"isPinned":16,"publishedAt":129,"category":130,"categories":135,"featuredImage":25,"bgImage":26,"posterImage":137,"relatedSolution":25},212,"woodpecker-ci-pipeline-vps-forgejo",{"fr":122,"en":124,"ar":125},"woodpecker-ci-and-forgejo-cicd-pipeline-on-a-vps","woodpecker-ci-وforgejo-خط-أنابيب-cicd-على-خادم-vps","Woodpecker CI et Forgejo : pipeline CI\u002FCD sur VPS","Déployez Woodpecker CI avec Forgejo sur votre VPS pour un pipeline CI\u002FCD open source auto-hébergé, léger et souverain. Guide Docker pas à pas.",4,"2026-08-02T00:00:00+00:00",{"id":131,"name":132,"slug":133,"color":134,"icon":133},2,"Automatisation","automatisation","bg-brand-action\u002F10 text-brand-action",[136],{"id":131,"name":132,"slug":133,"color":134,"icon":133},"\u002Fblog\u002Fcovers\u002Fwoodpecker-ci-pipeline-vps-forgejo-poster.svg",{"id":139,"slug":140,"slugs":141,"title":144,"excerpt":145,"readTime":146,"views":15,"isPinned":16,"publishedAt":147,"category":148,"categories":149,"featuredImage":25,"bgImage":26,"posterImage":151,"relatedSolution":152},273,"github-actions-payant-migrer-ci-cd-gitea-forgejo-vps",{"fr":140,"en":142,"ar":143},"migrate-cicd-to-gitea-or-forgejo-leave-github-actions","gitea-وforgejo-بديل-github-actions-المدفوع-على-vps","Migrer sa CI\u002FCD vers Gitea ou Forgejo : hors GitHub Actions","Depuis mars 2026, GitHub facture les minutes CI sur les dépôts privés. Migrez vers Gitea Actions ou Forgejo sur VPS : mêmes fichiers YAML, coût fixe.",11,"2026-08-16T00:00:00+00:00",{"id":131,"name":132,"slug":133,"color":134,"icon":133},[150],{"id":131,"name":132,"slug":133,"color":134,"icon":133},"\u002Fblog\u002Fcovers\u002Fgithub-actions-payant-migrer-ci-cd-gitea-forgejo-vps-poster.svg",{"categorySlug":29,"appSlug":30},1787580982144]