[{"data":1,"prerenderedAt":183},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-jenkins-vps-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-jenkins-vps-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":120,"ctaBody":121,"ctaButton":122,"ctaUrl":123,"relatedPosts":124},515,"self-host-jenkins-vps",{"fr":10,"en":12,"ar":13,"es":14},"self-host-jenkins-ci-cd-server-vps","استضافة-jenkins-على-vps-خادم-ci-cd","autoalojar-jenkins-servidor-ci-cd-vps","Jenkins sur VPS : votre serveur CI\u002FCD open source avec Docker","Installez Jenkins LTS sur un VPS avec Docker Compose : pipelines Jenkinsfile, webhooks Git, HTTPS derrière nginx et agents de build isolés du contrôleur.",7,0,false,"2026-10-28T00:00:00+00:00","2026-10-28T05:34:10+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[28],{"id":17,"name":23,"slug":24,"color":25,"icon":26},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-jenkins-vps-poster.svg",{"categorySlug":33,"appSlug":34},"developpement","jenkins","Les minutes de build facturées par les CI hébergées finissent par peser, et les secrets de déploiement y vivent chez un tiers. Jenkins, le serveur d'automatisation open source sous licence MIT, fait le même travail sur votre propre serveur : il récupère le code à chaque push, lance la compilation et les tests, puis déploie. Ce guide installe Jenkins LTS avec Docker Compose sur un VPS, le publie en HTTPS derrière nginx, écrit un premier pipeline et pose les règles de sécurité qui comptent.",[37,41,51,82,85,101,105,108,111,114,117],{"type":38,"title":39,"body":40},"h2","Pourquoi héberger sa CI\u002FCD avec Jenkins","Une CI hébergée est pratique jusqu'au jour où les builds se multiplient : chaque minute au-delà du quota est facturée, les gros projets attendent leur tour, et les clés de déploiement de vos serveurs sont stockées chez le fournisseur. Jenkins inverse ce modèle. Il tourne sur votre VPS, exécute autant de builds que vos machines le permettent et garde vos identifiants chiffrés chez vous.\n\nC'est aussi l'outil que la plupart des équipes connaissent déjà : un Jenkinsfile se lit sans formation, la documentation est abondante, et presque chaque outil du marché dispose de son plugin Jenkins.",{"type":42,"title":43,"items":44},"ul","Ce que Jenkins apporte",[45,46,47,48,49,50],"**Pipelines en code** — un Jenkinsfile versionné avec le projet décrit chaque étape, relue en revue de code comme le reste.","**Webhooks Git** — GitHub, GitLab, Gitea ou Forgejo déclenchent le build à chaque push ou pull request.","**Multibranch** — chaque branche et chaque pull request reçoit son propre pipeline, créé automatiquement.","**Agents de build** — les builds s'exécutent sur des machines dédiées, branchées en SSH.","**Plus de 2 000 plugins** — Docker, Kubernetes, SonarQube, Slack, rapports de tests JUnit.","**Identifiants chiffrés** — clés SSH et jetons injectés dans le pipeline, masqués dans les journaux.",{"type":52,"title":53,"headers":54,"rows":58},"comparison","Jenkins face aux autres CI self-hostées",[5,55,56,57],"Jenkins","Woodpecker CI","OneDev",[59,63,68,72,77],[60,61,62,61],"Licence","MIT","Apache-2.0",[64,65,66,67],"Définition du pipeline","Jenkinsfile (Groovy)","YAML","YAML ou éditeur visuel",[69,70,70,71],"Forge Git intégrée","Non, se branche sur la vôtre","Oui",[73,74,75,76],"Écosystème de plugins","Plus de 2 000 plugins","Plugins sous forme d'images Docker","Fonctions intégrées",[78,79,80,81],"Idéal pour","Pipelines complexes, équipes existantes","Pipelines simples en conteneurs","Petite équipe voulant tout-en-un",{"type":38,"title":83,"body":84},"Prérequis","Un VPS Ubuntu 24.04 avec 2 Go de RAM et 2 vCPU suffit pour le contrôleur ; comptez 4 Go si vos builds tournent sur la même machine. Il faut Docker et le plugin Compose, un nom de domaine (ou un sous-domaine) pointant vers le VPS, et nginx avec un certificat TLS pour le publier en HTTPS. Jenkins doit répondre sur une adresse HTTPS stable : c'est elle que vos dépôts appellent pour les webhooks.",{"type":86,"title":87,"steps":88},"steps","Installer Jenkins avec Docker Compose",[89,92,95,98],{"title":90,"body":91},"Créer le fichier Compose","Ce `docker-compose.yml` démarre Jenkins LTS sur Java 21. Le port n'est publié que sur la boucle locale : seul nginx y accède. Toutes les données (jobs, plugins, identifiants, historique) vivent dans le volume `jenkins-home`. Le port 50000 des agents entrants n'est pas publié : les agents se branchent en SSH.\n```yaml\nservices:\n  jenkins:\n    image: jenkins\u002Fjenkins:2.580.1-lts-jdk21\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:8104:8080\"\n    environment:\n      JAVA_OPTS: -Djava.awt.headless=true\n    volumes:\n      - jenkins-home:\u002Fvar\u002Fjenkins_home\n    healthcheck:\n      test: [\"CMD-SHELL\", \"curl -fsS -o \u002Fdev\u002Fnull http:\u002F\u002Flocalhost:8080\u002Flogin || exit 1\"]\n      interval: 15s\n      retries: 10\n      start_period: 60s\nvolumes:\n  jenkins-home: {}\n```",{"title":93,"body":94},"Démarrer le conteneur","Placez le fichier dans `\u002Fopt\u002Fjenkins`, puis démarrez la stack. Le premier démarrage prend une trentaine de secondes ; `docker compose ps` doit afficher l'état `healthy`.\n```bash\nmkdir -p \u002Fopt\u002Fjenkins && cd \u002Fopt\u002Fjenkins\ndocker compose up -d\ndocker compose ps\n```",{"title":96,"body":97},"Publier Jenkins en HTTPS derrière nginx","Dans le bloc `server` de votre domaine, transmettez les en-têtes `X-Forwarded-*` : sans eux, Jenkins génère des liens en HTTP et signale un reverse proxy mal configuré.\n```nginx\nlocation \u002F {\n    proxy_pass http:\u002F\u002F127.0.0.1:8104;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-Port 443;\n}\n```",{"title":99,"body":100},"Déverrouiller Jenkins","Ouvrez `https:\u002F\u002Fvotre-domaine`. Jenkins demande le mot de passe initial écrit dans son volume de données :\n```bash\ndocker compose exec jenkins cat \u002Fvar\u002Fjenkins_home\u002Fsecrets\u002FinitialAdminPassword\n```\nInstallez ensuite les plugins suggérés, créez votre compte administrateur et confirmez l'URL HTTPS de l'instance.",{"type":102,"title":103,"body":104},"tip","Ne lancez pas les builds sur le contrôleur","Le contrôleur Jenkins détient tous vos identifiants. Un build qui s'y exécute peut les lire. Dans Administrer Jenkins, passez le nombre d'exécuteurs du nœud intégré à 0 et branchez au moins un agent en SSH. Pour la même raison, ne montez pas le socket Docker du VPS dans le conteneur Jenkins : il donnerait à n'importe quel build l'accès root au serveur.",{"type":38,"title":106,"body":107},"Écrire un premier pipeline","Créez un « Multibranch Pipeline » qui pointe vers votre dépôt, puis ajoutez un `Jenkinsfile` à la racine. Cet exemple construit et teste chaque branche, et ne déploie que la branche `main`, sur un agent portant le label `linux` :\n```groovy\npipeline {\n    agent { label 'linux' }\n    stages {\n        stage('Build') { steps { sh 'make build' } }\n        stage('Test')  { steps { sh 'make test' } }\n        stage('Deploy') {\n            when { branch 'main' }\n            steps { sh '.\u002Fdeploy.sh' }\n        }\n    }\n}\n```\nAjoutez enfin un webhook dans votre dépôt vers `https:\u002F\u002Fvotre-domaine\u002Fgithub-webhook\u002F` pour GitHub, ou vers l'URL donnée par le plugin de votre forge. Chaque push déclenche alors un build.",{"type":38,"title":109,"body":110},"Identifiants et agents de build","Les clés SSH, jetons d'API et mots de passe de déploiement se rangent dans Administrer Jenkins, Credentials. Jenkins les stocke chiffrés dans son volume et ne les injecte dans un build qu'au moment où une étape les demande, avec `withCredentials` ou la directive `environment` d'un Jenkinsfile ; leur valeur est masquée dans les journaux. Donnez à chaque identifiant le périmètre le plus étroit possible : une clé de déploiement par serveur cible, un jeton en lecture seule pour cloner les dépôts.\n\nPour les agents, le plus simple est un second VPS sur lequel Java et Docker sont installés. Dans Administrer Jenkins, Nodes, ajoutez un nœud permanent avec la méthode de lancement « via SSH », l'adresse du VPS et une clé SSH enregistrée comme identifiant. Donnez-lui un label, par exemple `linux`, et visez-le dans vos pipelines. Le contrôleur ne fait plus qu'orchestrer, et un build compromis n'a jamais accès à vos autres secrets.",{"type":38,"title":112,"body":113},"Sauvegarder et mettre à jour Jenkins","Tout l'état de Jenkins vit dans le volume `jenkins-home` : jobs, configuration, plugins, identifiants chiffrés et historique des builds. Une archive de ce volume suffit à tout restaurer. Arrêtez Jenkins le temps de la copie pour obtenir une archive cohérente :\n```bash\ncd \u002Fopt\u002Fjenkins\ndocker compose stop jenkins\ndocker run --rm -v jenkins_jenkins-home:\u002Fdata -v \\\"$PWD\\\":\u002Fbackup alpine tar czf \u002Fbackup\u002Fjenkins-home.tar.gz -C \u002Fdata .\ndocker compose start jenkins\n```\nPour mettre à jour, suivez la ligne LTS, publiée toutes les douze semaines environ avec des correctifs intermédiaires : remplacez le tag de l'image dans le `docker-compose.yml`, puis lancez `docker compose pull` et `docker compose up -d`. Mettez ensuite à jour les plugins depuis Administrer Jenkins, Plugins, et lisez les avis de sécurité publiés par le projet : la plupart des failles corrigées concernent des plugins, pas le cœur.",{"type":38,"title":115,"body":116},"Dépannage","**« It appears that your reverse proxy set up is broken »** : nginx ne transmet pas `X-Forwarded-Proto` ou l'URL de Jenkins n'est pas en HTTPS. Corrigez le bloc `location`, puis l'URL dans Administrer Jenkins, System.\n\n**Le conteneur redémarre en boucle** : lisez les journaux. La cause la plus fréquente est un manque de mémoire ; donnez au VPS au moins 2 Go de RAM.\n```bash\ndocker compose logs --tail=100 jenkins\n```\n**Les webhooks n'arrivent pas** : vérifiez dans le dépôt l'historique des livraisons du webhook, puis que l'adresse appelée est bien l'URL HTTPS publique de Jenkins.",{"type":38,"title":118,"body":119},"Installation en un clic depuis le Marketplace ServOrbit","Sur un VPS ServOrbit, Jenkins s'installe depuis le Marketplace : choisissez l'adresse, cliquez sur Installer, et le script déploie Jenkins LTS dans Docker, avec son volume de données et le reverse proxy nginx en HTTPS. Le mot de passe initial d'administration s'affiche dans votre espace client. Pas de domaine ? Le sous-domaine gratuit du VPS suffit, HTTPS compris.","Votre serveur CI\u002FCD Jenkins, sur votre propre VPS","Un VPS ServOrbit Ubuntu 24.04 avec 2 Go de RAM suffit pour démarrer Jenkins. Installation en un clic depuis le Marketplace, HTTPS sur votre domaine ou sur le sous-domaine gratuit du VPS, sans quota de minutes de build.","Installer Jenkins","\u002Fmarketplace\u002Fdeveloppement\u002Fjenkins",[125,143,164],{"id":126,"slug":127,"slugs":128,"title":132,"excerpt":133,"readTime":134,"views":18,"isPinned":19,"publishedAt":135,"updatedAt":136,"category":137,"categories":138,"featuredImage":29,"bgImage":30,"posterImage":140,"relatedSolution":141},74,"heberger-gitea",{"fr":127,"en":129,"ar":130,"es":131},"host-gitea-on-your-own-vps","استضافة-gitea-على-خادم-vps-الخاص-بك","alojar-gitea-en-un-vps","Héberger Gitea sur votre propre VPS en 2026","Déployez Gitea 1.25 sur VPS avec Docker et SSL. Guide : Gitea Actions CI\u002FCD, comparatif Gitea vs Forgejo v16, administration quotidienne, dépannage SSH et HTTPS.",13,"2026-04-07T00:00:00+00:00","2026-10-21T15:21:37+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[139],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-gitea-poster.svg",{"categorySlug":33,"appSlug":142},"gitea",{"id":144,"slug":145,"slugs":146,"title":150,"excerpt":151,"readTime":152,"views":153,"isPinned":19,"publishedAt":154,"updatedAt":155,"category":156,"categories":161,"featuredImage":29,"bgImage":30,"posterImage":163,"relatedSolution":29},338,"remplacer-github-actions-woodpecker-ci-self-hosted-vps",{"fr":145,"en":147,"ar":148,"es":149},"replace-github-actions-with-woodpecker-ci-on-a-vps","استبدال-github-actions-بـwoodpecker-ci-على-vps","reemplazar-github-actions-con-woodpecker-ci-en-vps","Remplacer GitHub Actions par Woodpecker CI sur VPS","GitHub a annoncé puis suspendu la facturation des runners self-hosted. Migrez vers Woodpecker CI : syntaxe propre, moins de 50 Mo RAM, coût fixe sur VPS.",8,1,"2026-09-07T00:00:00+00:00","2026-10-20T23:18:05+00:00",{"id":157,"name":158,"slug":159,"color":160,"icon":159},2,"Automatisation","automatisation","bg-brand-action\u002F10 text-brand-action",[162],{"id":157,"name":158,"slug":159,"color":160,"icon":159},"\u002Fblog\u002Fcovers\u002Fremplacer-github-actions-woodpecker-ci-self-hosted-vps-poster.svg",{"id":165,"slug":166,"slugs":167,"title":171,"excerpt":172,"readTime":173,"views":174,"isPinned":19,"publishedAt":175,"updatedAt":176,"category":177,"categories":178,"featuredImage":29,"bgImage":30,"posterImage":180,"relatedSolution":181},311,"heberger-onedev-vps",{"fr":166,"en":168,"ar":169,"es":170},"self-host-onedev-git-cicd-and-kanban-in-one-container","onedev-على-vps-git-وcicd-وkanban-في-حاوية-واحدة","onedev-en-vps-git-cicd-y-kanban-autoalojados","OneDev sur VPS : Git, CI\u002FCD et Kanban self-hostés","Hébergez OneDev sur votre VPS : forge Git privée, pipelines CI\u002FCD visuels et Kanban intégrés. Un seul conteneur, sans abonnement par développeur.",6,3,"2026-08-28T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[179],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-onedev-vps-poster.svg",{"categorySlug":33,"appSlug":182},"onedev",1793166064705]