[{"data":1,"prerenderedAt":204},["ShallowReactive",2],{"seo-verification":3,"blog-heberger-forgejo-ma-fr":6,"promo-bar-likely":203},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-heberger-forgejo-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":30,"intro":33,"sections":34,"ctaTitle":143,"ctaBody":144,"ctaButton":145,"ctaUrl":146,"relatedPosts":147},75,"heberger-forgejo",{"fr":10,"en":12,"ar":13,"es":14},"host-forgejo-on-your-own-vps","استضافة-forgejo-على-خادم-vps-الخاص-بك","alojar-forgejo-en-un-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,9,false,"2026-04-06T00:00:00+00:00","2026-11-08T01:13:14+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-forgejo-poster.svg","Forgejo est la forge Git libre et auto-hébergeable qui a émergé comme alternative communautaire à Gitea. Légère, compatible GitHub Actions et respectueuse de vos données, elle s'installe en moins d'une heure sur un VPS. Ce guide couvre l'intégralité du chemin : dimensionnement du serveur, déploiement Docker, configuration SSL, runners CI\u002FCD, durcissement post-installation et mise à jour sans coupure.",[35,39,51,54,76,79,82,85,89,92,95],{"type":36,"title":37,"body":38},"h2","Pourquoi choisir Forgejo pour votre forge Git auto-hébergée","Forgejo est né en 2022 d'un fork de Gitea, motivé par des inquiétudes sur la gouvernance du projet. Son développement est entièrement communautaire, sous licence GPLv3+ depuis la v9.0 (août 2024 ; MIT auparavant), sans dépendance à une société commerciale. Pour les équipes qui veulent contrôler leur code source, leur pipeline CI\u002FCD et leurs artefacts sans passer par GitHub, GitLab ou Bitbucket, Forgejo est l'une des solutions les plus légères. L'interface est familière pour tout développeur ayant utilisé GitHub, la migration depuis Gitea est transparente et la compatibilité avec les GitHub Actions simplifie l'adoption.",{"type":40,"title":41,"items":42},"ul","Bénéfices concrets d'un Forgejo auto-hébergé",[43,44,45,46,47,48,49,50],"Souveraineté totale : votre code ne quitte jamais votre infrastructure","Compatible GitHub Actions via Forgejo Actions — réutilisez vos workflows existants","Empreinte mémoire faible : un petit VPS suffit à une petite équipe","Registre de paquets intégré : npm, PyPI, Maven, Helm, container OCI","Pas de limite sur le nombre de dépôts privés ni de collaborateurs","Fédération ActivityPub en cours de standardisation — interopérabilité future avec d'autres forges","Licences OSS, auditable, sans surprise de tarification","Mises à jour maîtrisées : vous choisissez quand migrer",{"type":36,"title":52,"body":53},"Prérequis matériels et logiciels chiffrés","Avant de lancer Forgejo, dimensionnez votre VPS selon la taille réelle de votre équipe. Pour 1 à 5 développeurs avec quelques dizaines de dépôts, 1 vCPU et 1 Go de RAM suffisent. Pour 5 à 20 développeurs avec CI\u002FCD active, prévoyez 2 vCPU et 2 Go de RAM. Au-delà de 20 développeurs ou pour des dépôts de grande taille (monorepos, binaires), 4 vCPU et 4 Go de RAM garantissent une expérience fluide. Côté stockage, comptez le volume de vos dépôts Git plus 20 % de marge pour les artefacts et les sauvegardes.\n\nSur le plan réseau, trois ports doivent être ouverts dans votre pare-feu : le port 80 (HTTP, pour la validation Let's Encrypt), le port 443 (HTTPS, trafic web) et le port 2222 (SSH Git, pour éviter le conflit avec le SSH d'administration sur 22). Côté logiciel, vous avez besoin de Docker Engine ≥ 24, Docker Compose v2 et d'un nom de domaine pointant vers votre VPS.",{"type":55,"title":56,"steps":57},"steps","Déployer Forgejo avec Docker et SSL",[58,61,64,67,70,73],{"title":59,"body":60},"Préparer l'environnement","Créez les répertoires qui persisteront les données hors du conteneur :\n\n```bash\nmkdir -p \u002Fopt\u002Fforgejo\u002F{data,config,db}\nchown -R 1000:1000 \u002Fopt\u002Fforgejo\n```\n\nCréez le fichier `\u002Fopt\u002Fforgejo\u002F.env` avec vos valeurs :\n\n```env\nFORGEJO_DOMAIN=git.mondomaine.com\nFORGEJO_SSH_PORT=2222\n```\n\nAjoutez-y un mot de passe de base de données généré, jamais un mot de passe d'exemple, puis protégez le fichier :\n\n```bash\necho \"POSTGRES_PASSWORD=$(openssl rand -hex 32)\" >> \u002Fopt\u002Fforgejo\u002F.env\nchmod 600 \u002Fopt\u002Fforgejo\u002F.env\n```",{"title":62,"body":63},"Créer le docker-compose.yml","```yaml\nservices:\n  forgejo:\n    image: codeberg.org\u002Fforgejo\u002Fforgejo:17\n    restart: unless-stopped\n    environment:\n      - USER_UID=1000\n      - USER_GID=1000\n      - FORGEJO__database__DB_TYPE=postgres\n      - FORGEJO__database__HOST=db:5432\n      - FORGEJO__database__NAME=forgejo\n      - FORGEJO__database__USER=forgejo\n      - FORGEJO__database__PASSWD=${POSTGRES_PASSWORD}\n    volumes:\n      - \u002Fopt\u002Fforgejo\u002Fdata:\u002Fdata\n    ports:\n      - \"127.0.0.1:3000:3000\"\n      - \"${FORGEJO_SSH_PORT:-2222}:22\"\n    depends_on:\n      - db\n\n  db:\n    image: postgres:16-alpine\n    restart: unless-stopped\n    environment:\n      - POSTGRES_DB=forgejo\n      - POSTGRES_USER=forgejo\n      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}\n    volumes:\n      - \u002Fopt\u002Fforgejo\u002Fdb:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n```",{"title":65,"body":66},"Démarrer les services","```bash\ncd \u002Fopt\u002Fforgejo\ndocker compose up -d\ndocker compose logs -f forgejo\n```\n\nAttendez que les logs indiquent que le serveur web écoute sur le port 3000. Forgejo effectue ses migrations de schéma automatiquement au premier démarrage.",{"title":68,"body":69},"Configurer le reverse proxy et SSL avec Caddy","Caddy est le choix le plus simple pour obtenir un certificat Let's Encrypt automatique. Installez-le puis créez `\u002Fetc\u002Fcaddy\u002FCaddyfile` :\n\n```\ngit.mondomaine.com {\n  reverse_proxy localhost:3000\n}\n```\n\nDémarrez Caddy : `systemctl enable --now caddy`. Le certificat TLS est émis et renouvelé automatiquement. Si vous préférez nginx, configurez un bloc `proxy_pass http:\u002F\u002F127.0.0.1:3000;` classique avec Certbot.",{"title":71,"body":72},"Finaliser la configuration de l'instance","Ouvrez `https:\u002F\u002Fgit.mondomaine.com` dans votre navigateur. L'assistant de configuration s'affiche une seule fois. Renseignez le domaine, l'URL SSH (`ssh:\u002F\u002Fgit.mondomaine.com:2222`), l'adresse e-mail de l'administrateur et désactivez l'inscription publique dès cet écran si votre forge est à usage privé. Une fois l'assistant validé, la configuration est verrouillée dans `\u002Fopt\u002Fforgejo\u002Fdata\u002Fgitea\u002Fconf\u002Fapp.ini`.",{"title":74,"body":75},"Installer un runner Forgejo Actions","Le runner exécute le code de vos workflows : installez-le de préférence sur une machine dédiée. Dans *Administration du site → Actions → Runners* (`\u002Fadmin\u002Factions\u002Frunners`), cliquez sur *Créer un nouveau runner* : Forgejo affiche un UUID et un jeton. Générez le fichier de configuration (`docker run --rm data.forgejo.org\u002Fforgejo\u002Frunner:13 forgejo-runner generate-config > data\u002Frunner-config.yml`), recopiez l'URL de l'instance, l'UUID et le jeton dans la section `server.connections`, et déclarez vos labels (par exemple `ubuntu-latest:docker:\u002F\u002Fnode:20`) dans la section `runner`. Déployez ensuite le runner avec un démon Docker dédié (docker-in-docker) plutôt qu'en montant `\u002Fvar\u002Frun\u002Fdocker.sock` de l'hôte, qui donnerait à chaque job un accès root au serveur :\n\n```yaml\nservices:\n  docker-in-docker:\n    image: docker:dind\n    privileged: true\n    command: [\"dockerd\", \"-H\", \"tcp:\u002F\u002F0.0.0.0:2375\", \"--tls=false\"]\n    restart: unless-stopped\n\n  runner:\n    image: data.forgejo.org\u002Fforgejo\u002Frunner:13\n    depends_on:\n      - docker-in-docker\n    environment:\n      DOCKER_HOST: tcp:\u002F\u002Fdocker-in-docker:2375\n    user: \"1001:1001\"\n    volumes:\n      - .\u002Fdata:\u002Fdata\n    command: forgejo-runner daemon --config runner-config.yml\n    restart: unless-stopped\n```\n\nLe port 2375 du démon docker-in-docker reste sur le réseau interne de Compose : ne le publiez jamais. Le runner apparaît dans l'interface dès qu'il se connecte. Chaque label choisit le mode d'exécution : **docker:\u002F\u002F** (conteneur, recommandé), **lxc:\u002F\u002F** (conteneur LXC) ou **host** (directement sur la machine, sans aucune isolation : à réserver à des tâches de confiance).",{"type":36,"title":77,"body":78},"Écrire vos premiers workflows Forgejo Actions","La compatibilité avec la syntaxe GitHub Actions est très large. Créez le fichier `.forgejo\u002Fworkflows\u002Fci.yml` à la racine de votre dépôt :\n\n```yaml\non:\n  push:\n    branches: [main]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - name: Run tests\n        run: |\n          npm ci\n          npm test\n```\n\nLes labels `runs-on` correspondent aux labels déclarés lors de l'enregistrement du runner. Vous pouvez définir plusieurs runners avec des labels différents (ex. `arm64`, `gpu`, `high-memory`) et cibler le bon environnement par job. Les artefacts et le cache fonctionnent avec les mêmes actions officielles que sur GitHub.",{"type":36,"title":80,"body":81},"Sécurité post-installation : les réglages essentiels","Un Forgejo fraîchement installé est fonctionnel mais pas durci. Voici les six points à traiter impérativement avant d'ouvrir la forge à votre équipe.\n\n**Désactiver l'inscription publique.** Si vous ne l'avez pas fait dans l'assistant, ajoutez `FORGEJO__service__DISABLE_REGISTRATION=true` aux variables d'environnement du conteneur (ou `DISABLE_REGISTRATION = true` dans la section `[service]` de `app.ini`) : seul un administrateur peut alors créer des comptes. Sur une forge interne, personne ne doit pouvoir créer un compte sans invitation.\n\n**Activer la 2FA pour les administrateurs.** Chaque compte admin doit activer l'authentification à deux facteurs dans *Paramètres → Sécurité*. Pour l'imposer, réglez `GLOBAL_TWO_FACTOR_REQUIREMENT` dans la section `[security]` de `app.ini` (`admin` pour les administrateurs, `all` pour tous les utilisateurs). Le paramètre `REQUIRE_SIGNIN_VIEW`, lui, oblige seulement à se connecter pour consulter la forge.\n\n**SSH par clé uniquement.** Désactivez l'authentification par mot de passe dans `\u002Fetc\u002Fssh\u002Fsshd_config` du serveur hôte (`PasswordAuthentication no`). Pour le SSH Git (port 2222), Forgejo n'accepte que les clés publiques enregistrées dans les profils utilisateurs — c'est son comportement par défaut.\n\n**Secrets de webhooks.** Lors de la création de chaque webhook (vers votre CI externe, Slack, etc.), renseignez toujours le champ *Secret*. Forgejo signe la charge utile avec HMAC-SHA256 ; votre récepteur doit vérifier cette signature avant de traiter l'événement.\n\n**Packages privés.** Si vous utilisez le registre de paquets intégré, rappelez-vous qu'un paquet hérite de la visibilité de son propriétaire : publiez-le sous une organisation ou un compte privé pour le réserver à ses membres. Les tokens d'accès pour publier doivent avoir une portée minimale (`write:package` uniquement, jamais un token admin global).\n\n**Pare-feu.** Fermez tous les ports sauf 80, 443 et 2222. Le port 3000 (Forgejo interne) ne doit jamais être exposé directement ; il est consommé uniquement par le reverse proxy en loopback, d'où sa publication sur `127.0.0.1:3000` dans le compose. Un port publié par Docker contourne les règles ufw : seule cette liaison à 127.0.0.1 le garde hors d'Internet.",{"type":36,"title":83,"body":84},"Mettre à jour Forgejo sans interruption","La procédure de mise à jour Docker est simple et ne nécessite que quelques secondes d'indisponibilité.\n\n```bash\ncd \u002Fopt\u002Fforgejo\n# 1. Tirer la nouvelle image\ndocker compose pull forgejo\n\n# 2. Sauvegarder la base avant toute migration\ndocker compose exec db pg_dump -U forgejo forgejo > backup-$(date +%Y%m%d).sql\n\n# 3. Redémarrer le service\ndocker compose up -d forgejo\n\n# 4. Vérifier les migrations de schéma\ndocker compose logs forgejo | grep -i migrat\n```\n\nForgejo exécute ses migrations automatiquement au démarrage. Vérifiez que les logs ne signalent aucune erreur de migration. En cas d'erreur de migration, restaurez la sauvegarde SQL et signalez le problème sur le tracker Forgejo. Le tag `17` ne suit que les versions 17.x : pour passer à la version majeure suivante, changez le tag dans le compose après une sauvegarde complète, et consultez les notes de version avant chaque saut de version majeure. Forgejo refuse de démarrer sur une base plus récente que lui : le retour arrière passe par la restauration de la sauvegarde.",{"type":86,"title":87,"body":88},"tip","Migrer depuis Gitea en cinq minutes","Forgejo est un fork direct de Gitea : la mise à niveau depuis Gitea est prise en charge jusqu'à la version 1.22 incluse, en passant d'abord par Forgejo v10.0.x. Pour migrer, arrêtez Gitea, copiez son répertoire de données (`\u002Fdata` ou `\u002Fopt\u002Fgitea`) vers `\u002Fopt\u002Fforgejo\u002Fdata`, remplacez l'image par `codeberg.org\u002Fforgejo\u002Fforgejo:10` dans votre docker-compose et redémarrez, puis montez vers la version actuelle. Forgejo détecte automatiquement le schéma Gitea et applique ses propres migrations. Vos dépôts, utilisateurs, clés SSH, webhooks et issues sont intégralement conservés. Les versions de Gitea postérieures à 1.22 ne sont pas couvertes par le guide de mise à niveau officiel de Forgejo : ne tentez pas la bascule directe.",{"type":36,"title":90,"body":91},"Dépannage : les erreurs les plus fréquentes","**Connexion SSH refusée sur le port 2222.** Vérifiez d'abord que le port est bien publié par Docker (`docker compose ps` → colonne Ports). Ensuite, testez depuis le client : `ssh -p 2222 git@git.mondomaine.com`. Si la réponse est `PTY allocation request failed`, la connexion fonctionne — Forgejo répond `Hi \u003Cutilisateur>! You've successfully authenticated`. Si vous obtenez `Connection refused`, le pare-feu bloque le port : `ufw allow 2222\u002Ftcp`.\n\n**Runner affiché offline dans l'interface.** Le runner contacte Forgejo en HTTPS sortant. Vérifiez que le conteneur runner peut résoudre et atteindre `git.mondomaine.com`. Un certificat auto-signé nécessite de monter votre CA dans le conteneur. Redémarrez le runner après avoir corrigé la connectivité : `docker compose restart runner`.\n\n**Push rejeté par un hook pre-receive.** Forgejo peut rejeter un push si un hook de protection de branche est actif (revue de code requise, tests CI obligatoires) ou si une règle de taille de fichier est dépassée. Le message d'erreur git contient le détail. Pour les gros binaires (> 100 Mo), utilisez Git LFS : Forgejo supporte le protocole LFS nativement.\n\n**Interface lente après plusieurs mois.** Lancez le garbage collector Git sur les dépôts actifs depuis l'administration : *Administration du site → Tableau de bord → Opérations de maintenance*, tâche de nettoyage (garbage collection) des dépôts. Pour automatiser, activez la tâche planifiée `[cron.git_gc_repos]` dans `app.ini` (`ENABLED = true` ; elle tourne toutes les 72 h par défaut).",{"type":86,"title":93,"body":94},"Fédération ActivityPub : ce que Forgejo prépare","Forgejo développe la fédération entre forges avec ForgeFed, une extension du protocole ActivityPub (le même que Mastodon). Elle reste expérimentale et désactivée par défaut (`[federation] ENABLED = false`) : la modération et le contrôle d'accès ne sont pas encore développés, et le projet prévient qu'un changement incompatible peut « brûler » le domaine de l'instance pour toute fédération future. Ne l'activez pas sur une forge de production. La fédération complète — fork cross-instance, pull request inter-forge — est en cours de standardisation au sein du groupe ForgeFed. Si vos collaborateurs sont sur des forges différentes, cette évolution permettra à terme de contribuer sans créer de compte sur chaque instance.",{"type":96,"title":97,"headers":98,"rows":103},"comparison","Forgejo vs Gitea vs GitLab CE : choisir sa forge",[99,100,101,102],"Critère","Forgejo","Gitea","GitLab CE",[104,109,113,118,122,126,129,133,138],[105,106,107,108],"Gouvernance","Communauté (Codeberg e.V.)","Société commerciale (CommitGo)","Société commerciale (GitLab Inc)",[110,111,111,112],"RAM minimale","Faible (petit VPS)","8 Go (16 Go conseillés)",[114,115,116,117],"Compatibilité GitHub Actions","Oui (Forgejo Actions)","Oui (Gitea Actions)","Non (GitLab CI, syntaxe propre)",[119,120,121,121],"Registre de paquets","Oui (multi-format)","Oui",[123,124,125,125],"Fédération ActivityPub","En cours (ForgeFed)","Non",[127,128,121,121],"Migration depuis GitHub","Oui (miroir + import)",[130,131,131,132],"Interface d'administration","Simple, intégrée","Complète mais lourde",[134,135,136,137],"Licence","GPLv3+ (depuis v9.0)","MIT","MIT (CE) \u002F EE (payant)",[139,140,141,142],"Fréquence des releases","Trimestrielle (+ LTS)","Plusieurs par an","Mensuelle","Votre forge Git souveraine sur un VPS ServOrbit","Avec un VPS Cloud équipé de Debian et Docker, déployez Forgejo, son service Actions et son registre de paquets en quelques minutes. Ressources dédiées, IPv4 incluse, aucun partage de ressources.","Voir les offres VPS Cloud","\u002Fvps-cloud",[148,164,185],{"id":149,"slug":150,"slugs":151,"title":155,"excerpt":156,"readTime":18,"views":157,"isPinned":19,"noindex":19,"publishedAt":158,"updatedAt":159,"category":160,"categories":161,"featuredImage":30,"bgImage":31,"posterImage":163,"relatedSolution":30},261,"migrer-saas-self-hosting-bundling-ia",{"fr":150,"en":152,"ar":153,"es":154},"when-saas-vendors-bundle-ai-migrating-to-self-hosting","ارتفاع-تكاليف-saas-46-متى-تستضيف-بنفسك","migrar-de-saas-al-self-hosting-por-la-ia","Quand le SaaS facture l'IA : migrer vers le self-hosting","PricePulse H1 2026 : +46 % de coûts SaaS pour 50 personnes. Mattermost, Nextcloud, Plane et Forgejo s'auto-hébergent sur un VPS. Guide de migration.",0,"2026-08-14T00:00:00+00:00","2026-10-20T23:18:07+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[162],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fmigrer-saas-self-hosting-bundling-ia-poster.svg",{"id":165,"slug":166,"slugs":167,"title":171,"excerpt":172,"readTime":173,"views":174,"isPinned":19,"noindex":19,"publishedAt":175,"updatedAt":176,"category":177,"categories":182,"featuredImage":30,"bgImage":31,"posterImage":184,"relatedSolution":30},229,"docker-compose-production-checklist",{"fr":166,"en":168,"ar":169,"es":170},"docker-compose-in-production-10-point-checklist","docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط","checklist-docker-compose-en-produccion","Docker Compose en production : checklist des 10 points","Docker Compose en production : 10 réglages, health checks, secrets, rollback, dépannage et passage de docker-compose v1 à docker compose sur Ubuntu 26.04.",12,1,"2026-08-06T00:00:00+00:00","2026-10-23T13:27:09+00:00",{"id":178,"name":179,"slug":180,"color":181,"icon":180},3,"Déploiement","deploiement","bg-success\u002F10 text-success",[183],{"id":178,"name":179,"slug":180,"color":181,"icon":180},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",{"id":186,"slug":187,"slugs":188,"title":192,"excerpt":193,"readTime":194,"views":174,"isPinned":19,"noindex":19,"publishedAt":175,"updatedAt":159,"category":195,"categories":200,"featuredImage":30,"bgImage":31,"posterImage":202,"relatedSolution":30},228,"durcissement-serveur-linux-initial",{"fr":187,"en":189,"ar":190,"es":191},"initial-linux-server-hardening","تصليب-الخادم-linux-الأولي","hardening-inicial-servidor-linux","Durcissement initial d'un serveur Linux","Créez un utilisateur sudo, configurez SSH avec clés, activez UFW et fail2ban sur Ubuntu ou Debian en moins d'une heure.",8,{"id":194,"name":196,"slug":197,"color":198,"icon":199},"Sécurité & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[201],{"id":194,"name":196,"slug":197,"color":198,"icon":199},"\u002Fblog\u002Fcovers\u002Fdurcissement-serveur-linux-initial-poster.svg",true,1794270716347]