[{"data":1,"prerenderedAt":243},["ShallowReactive",2],{"seo-verification":3,"blog-keycloak-sso-vps-ma-fr":6,"promo-bar-likely":242},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-keycloak-sso-vps-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":33,"intro":36,"sections":37,"ctaTitle":182,"ctaBody":183,"ctaButton":184,"ctaUrl":185,"relatedPosts":186},112,"keycloak-sso-vps",{"fr":10,"en":12,"ar":13,"es":14},"deploy-keycloak-for-sso-on-your-vps","نشر-keycloak-لتسجيل-الدخول-الموحد-sso-على-خادمك-vps","desplegar-keycloak-sso-en-un-vps","Déployer Keycloak pour le SSO sur votre VPS","Déployez Keycloak sur votre VPS pour un SSO de niveau entreprise : OIDC, SAML, realms et fédération. Guide Docker complet et comparatif.",10,0,false,"2026-02-28T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},8,"Sécurité & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fkeycloak-sso-vps-poster.svg",{"categorySlug":34,"appSlug":35},"cybersecurity","keycloak","Keycloak est la référence open source du SSO d'entreprise, soutenue par Red Hat et utilisée jusque dans des contextes hautement réglementés. Avec ses realms, sa fédération LDAP et son support complet d'OIDC et SAML, il couvre des besoins que peu d'IdP atteignent. Auto-hébergé sur VPS, il vous donne ce niveau d'industrialisation sans licence ni dépendance cloud.",[38,42,52,55,77,80,95,135,138,147,150,158,176,180],{"type":39,"title":40,"body":41},"h2","Pourquoi déployer Keycloak sur votre VPS","Là où certains IdP visent la simplicité, Keycloak vise l'exhaustivité : isolation multi-tenant via les realms, fédération d'annuaires LDAP\u002FActive Directory, brokering vers des fournisseurs externes (Google, GitHub, un autre OIDC), théming complet des pages de login et fine-grained authorization. Pour une agence qui gère plusieurs clients ou un SI avec des exigences de conformité, ce niveau de contrôle est décisif. Le self-hébergement sur VPS vous évite les coûts par utilisateur des offres IdP managées et garde l'intégralité de la base d'identités sous votre juridiction, un point critique pour des données sensibles que vous ne souhaitez pas confier à un tiers.",{"type":43,"title":44,"items":45},"ul","Les atouts d'un Keycloak auto-hébergé",[46,47,48,49,50,51],"Réalms multiples pour isoler totalement plusieurs clients ou environnements sur une même instance.","Support natif et complet d'OpenID Connect, OAuth2 et SAML 2.0.","Fédération LDAP \u002F Active Directory pour réutiliser un annuaire existant sans migration.","Identity brokering : connexion via Google, GitHub ou tout IdP externe en quelques clics.","Pages de login entièrement personnalisables (thèmes, langues, branding par realm).","Politiques d'authentification fines : MFA conditionnel, durée de session, contraintes par rôle.",{"type":39,"title":53,"body":54},"Prérequis pour ce déploiement","Keycloak tourne sur la JVM (Quarkus depuis la v17+) et reste plus gourmand qu'un IdP léger. Prévoyez un VPS avec 2 vCPU et 4 Go de RAM au minimum, idéalement 6 Go si vous attendez de la charge ou plusieurs realms actifs. Une base PostgreSQL externe est fortement recommandée en production (n'utilisez jamais la base H2 embarquée au-delà des tests). Docker et Docker Compose, un domaine dédié (`sso.mondomaine.com`) et un reverse proxy gérant le SSL complètent les prérequis, car Keycloak attend d'être informé qu'il est servi derrière un proxy HTTPS.",{"type":56,"title":57,"steps":58},"steps","Déployer Keycloak avec PostgreSQL",[59,62,65,68,71,74],{"title":60,"body":61},"Définir Keycloak et PostgreSQL dans Compose","Dans votre `docker-compose.yml`, déclarez le service `postgres` (image `postgres:16`) et le service `keycloak` (image `quay.io\u002Fkeycloak\u002Fkeycloak`). Reliez Keycloak à la base via `KC_DB=postgres`, `KC_DB_URL`, `KC_DB_USERNAME` et `KC_DB_PASSWORD`.",{"title":63,"body":64},"Configurer le mode production et le proxy","Lancez avec la commande `start` (et non `start-dev`). Renseignez `KC_HOSTNAME=sso.mondomaine.com` et `KC_PROXY_HEADERS=xforwarded` pour que Keycloak génère des URL correctes derrière le reverse proxy. Définissez l'admin initial via `KC_BOOTSTRAP_ADMIN_USERNAME` \u002F `KC_BOOTSTRAP_ADMIN_PASSWORD`.",{"title":66,"body":67},"Démarrer et terminer le build","Exécutez `docker compose up -d`. Au premier démarrage, Keycloak réalise un build Quarkus optimisé puis migre le schéma PostgreSQL. Suivez `docker compose logs -f keycloak` jusqu'au message indiquant que le serveur écoute.",{"title":69,"body":70},"Mettre en place le reverse proxy SSL","Routez `sso.mondomaine.com` vers le port `8080` du conteneur Keycloak via Caddy, Traefik ou Nginx, avec un certificat Let's Encrypt. Veillez à transmettre les en-têtes `X-Forwarded-*` faute de quoi les redirections de login casseront.",{"title":72,"body":73},"Créer un realm et un client","Connectez-vous à la console d'admin, créez un realm dédié (jamais le realm `master` pour vos apps), puis un client OIDC. Réglez le `Valid redirect URIs` de votre application et récupérez le `Client ID` et le secret dans l'onglet Credentials.",{"title":75,"body":76},"Brancher une application et tester le flow","Configurez votre app avec l'URL de découverte `https:\u002F\u002Fsso.mondomaine.com\u002Frealms\u002Fmon-realm\u002F.well-known\u002Fopenid-configuration`. Créez un utilisateur de test dans le realm, lancez un login et vérifiez l'émission du token dans les Sessions de la console.",{"type":39,"title":78,"body":79},"Image préoptimisée : séparer le build du démarrage","Par défaut, la commande `start` vérifie au démarrage si une phase de build Quarkus est nécessaire et la déroule au besoin : c'est ce qui allonge le premier démarrage, et c'est ce qui écrit dans l'arborescence de l'installation. La documentation de l'éditeur recommande l'inverse pour un conteneur : exécuter `kc.sh build` pendant la construction de l'image, puis démarrer avec `start --optimized`. Le paramètre `--optimized` indique à Keycloak qu'il tourne dans une image déjà optimisée et qu'il peut sauter cette vérification. Les options de build, comme le type de base de données (`db`) ou l'activation des sondes (`health-enabled`), sont figées dans l'image : repassées au démarrage avec la même valeur, elles sont ignorées ; avec une valeur différente, elles provoquent une erreur et exigent un nouveau build. Les secrets, mot de passe de la base compris, relèvent des options de configuration et restent fournis à l'exécution.",{"type":56,"title":81,"steps":82},"Construire et lancer une image préoptimisée",[83,86,89,92],{"title":84,"body":85},"Écrire un Dockerfile en deux étapes","La première étape part de `quay.io\u002Fkeycloak\u002Fkeycloak` nommée `builder`, pose `ENV KC_DB=postgres` et `ENV KC_HEALTH_ENABLED=true`, puis exécute `RUN \u002Fopt\u002Fkeycloak\u002Fbin\u002Fkc.sh build`. Épinglez un numéro de version précis plutôt que `latest`, afin que chaque reconstruction reste reproductible.",{"title":87,"body":88},"Copier le résultat dans l'image finale","La seconde étape repart de la même image et exécute `COPY --from=builder \u002Fopt\u002Fkeycloak\u002F \u002Fopt\u002Fkeycloak\u002F`. Déposez vos thèmes et fournisseurs personnalisés avant le build : ils sont alors pris en compte par l'optimisation. Si vous ajoutez des fichiers avec `COPY`, ajoutez `--chown=keycloak:keycloak` pour que Keycloak puisse écrire dans les dossiers concernés.",{"title":90,"body":91},"Démarrer avec l'option optimisée","Dans Compose, remplacez la commande par `start --optimized`. Derrière un reverse proxy qui termine le TLS, ajoutez `KC_HTTP_ENABLED=true`. Les variables `KC_HOSTNAME`, `KC_PROXY_HEADERS` et les accès à la base restent de la configuration d'exécution.",{"title":93,"body":94},"Brancher les sondes de santé","Avec `KC_HEALTH_ENABLED=true` posé au build, les points `\u002Fhealth\u002Fstarted`, `\u002Fhealth\u002Flive` et `\u002Fhealth\u002Fready` sont servis sur le port de gestion `9000`, distinct du `8080` applicatif. Ne publiez pas ce port sur Internet : utilisez-le seulement pour le `healthcheck` de Compose ou votre supervision.",{"type":96,"title":97,"headers":98,"rows":102},"comparison","Keycloak ou Authentik : que choisir ?",[99,100,101],"Critère","Keycloak","Authentik",[103,107,111,115,119,123,127,131],[104,105,106],"Cas d'usage cible","SSO d'entreprise, multi-tenant, conformité","Self-hosting, homelab, agences",[108,109,110],"Protocoles","OIDC, OAuth2, SAML, LDAP","OIDC, OAuth2, SAML, LDAP, forward auth",[112,113,114],"Forward auth (proxy)","Non natif (via extensions)","Natif et central à l'outil",[116,117,118],"Empreinte ressources","Élevée (JVM, 4 Go+ RAM)","Modérée (2-4 Go RAM)",[120,121,122],"Multi-realm \u002F tenants","Excellent (realms isolés)","Tenants supportés, moins poussés",[124,125,126],"Personnalisation des flows","Thèmes et SPI Java","Flows visuels par étapes",[128,129,130],"Courbe d'apprentissage","Raide, très complet","Plus accessible",[132,133,134],"Fédération d'annuaires","Mature (LDAP\u002FAD)","Bonne (LDAP)",{"type":39,"title":136,"body":137},"Sauvegarder et migrer sans perdre un realm","L'état de Keycloak tient en deux endroits : la base PostgreSQL, et vos fichiers de configuration (thèmes, fournisseurs, fichiers d'import). La sauvegarde de référence est un `pg_dump` planifié, copié hors du VPS ; testez la restauration sur une instance jetable, car une sauvegarde jamais restaurée reste une hypothèse. L'export de realm complète ce dispositif sans le remplacer : `kc.sh export --dir \u003Cdossier>`, ou `--realm mon-realm` pour un seul realm, avec l'option `--users` pour choisir la stratégie d'export des utilisateurs. La documentation précise que le serveur ne doit pas être démarré pendant l'export, que la cohérence n'est garantie qu'avec tous les nœuds arrêtés, et que les événements, les sessions persistées et les jetons révoqués ne sont pas exportés. Au-delà de 50 000 utilisateurs, exportez vers un répertoire plutôt que vers un fichier unique. À l'import, `start --import-realm` lit les fichiers `.json` du dossier `\u002Fopt\u002Fkeycloak\u002Fdata\u002Fimport` et ignore un realm qui existe déjà.",{"type":43,"title":139,"items":140},"Checklist d'exploitation",[141,142,143,144,145,146],"**Version épinglée** — fixez le numéro de version de l'image, lisez les notes de version avant de changer de branche majeure et reconstruisez l'image optimisée à chaque montée de version.","**Base sauvegardée** — `pg_dump` planifié, copie hors du VPS, restauration éprouvée sur une instance jetable.","**Mémoire bornée** — fixez toujours une limite de mémoire au conteneur : la JVM calcule son tas à partir d'elle, avec par défaut 70 % au maximum et 50 % au départ.","**Sondes surveillées** — suivez `\u002Fhealth\u002Fready` sur le port `9000`, non publié, depuis votre supervision.","**En-têtes de proxy maîtrisés** — le reverse proxy doit écraser les en-têtes `X-Forwarded-*` reçus du client, pas s'y ajouter, et ne jamais être contourné.","**Événements activés** — journalisez les connexions et les actions d'administration dans chaque realm, pour savoir qui s'est connecté et qui a modifié quoi.",{"type":39,"title":148,"body":149},"Dépannage : démarrage en échec avec un système de fichiers en lecture seule","Durcir un conteneur passe souvent par `read_only: true` dans Compose ou `readOnlyRootFilesystem: true` dans Kubernetes. Avec Keycloak, le sujet est ouvert depuis avril 2022 dans l'issue keycloak\u002Fkeycloak n° 11286 (« Keycloak does not work with Docker read_only: true »), et elle était encore active fin octobre 2026. Ce qui est établi côté projet : un contributeur de Keycloak a reproduit l'échec sur la version 19.0.2 en septembre 2022, l'issue est classée en amélioration avec l'étiquette « help wanted », et elle a été ajoutée à un tableau de projet du dépôt en septembre 2026. Ce qui ne l'est pas : la documentation officielle ne décrit à ce jour aucun mode lecture seule (la page consacrée aux conteneurs n'en parle pas), et aucun mainteneur n'a validé de contournement. Les solutions ci-dessous viennent de participants à la discussion ; elles ont fonctionné chez eux, sur leurs versions, sans garantie après une montée de version. Le 26 octobre 2026, un contributeur a proposé d'écrire la documentation manquante après avoir vérifié lui-même ces contournements.",{"type":43,"title":151,"items":152},"Les messages d'erreur à reconnaître",[153,154,155,156,157],"**`sed: couldn't open temporary file \u002Fopt\u002Fjboss\u002Fkeycloak\u002Fbin\u002FseduHoQM0: Read-only file system`** — message du rapport initial, sur l'ancienne image WildFly (version 16.1.1 dans l'issue) : un `sed -i` du script de démarrage ne peut pas créer son fichier temporaire. Sur la distribution Quarkus, les symptômes sont différents, voir les lignes suivantes.","**`KC-SERVICES0075: Failed to get theme request: java.lang.RuntimeException: Temporary directory \u002Fopt\u002Fkeycloak\u002Fbin\u002F..\u002Fdata\u002Ftmp does not exist and it was not possible to create it.`** — rapporté lors d'une montée vers la 20.0.1 : le serveur démarre, puis échoue sur la première page qui sert un thème. Un participant a signalé qu'un volume inscriptible monté sur `\u002Fopt\u002Fkeycloak\u002Fdata\u002Ftmp` règle ce cas.","**Démarrage lent ou échec d'écriture dans `\u002Fopt\u002Fkeycloak\u002Flib\u002Fquarkus`** — un participant a comparé le conteneur avant et après démarrage avec `docker diff` : trois dossiers changent, `\u002Ftmp`, `\u002Fopt\u002Fkeycloak\u002Fdata` et `\u002Fopt\u002Fkeycloak\u002Flib\u002Fquarkus`. Le dernier contient le produit du build, que `start` régénère sauf si l'image est préoptimisée.","**Dossier `data` en lecture seule après un `COPY`** — un participant signale qu'oublier `--chown=keycloak:keycloak` sur la copie d'un fichier de realm laisse `\u002Fopt\u002Fkeycloak\u002Fdata` détenu par root, donc non inscriptible par Keycloak.","**Copie de `\u002Fopt\u002Fkeycloak` dans un volume au démarrage** — contournement par conteneur d'initialisation, rapporté sous Kubernetes : il fonctionne, mais plusieurs participants redoutent de devoir le retester à chaque montée de version.",{"type":56,"title":159,"steps":160},"Contournement rapporté dans Docker Compose",[161,164,167,170,173],{"title":162,"body":163},"Partir de l'image préoptimisée","Reprenez l'image construite plus haut. Le `kc.sh build` s'exécute à la construction : `\u002Fopt\u002Fkeycloak\u002Flib\u002Fquarkus` n'est plus réécrit au démarrage, qui se fait avec `start --optimized`.",{"title":165,"body":166},"Déclarer le système de fichiers en lecture seule","Ajoutez `read_only: true` au service `keycloak` du fichier Compose. Sans autre changement, le conteneur échoue : c'est le comportement décrit par l'issue.",{"title":168,"body":169},"Fournir les répertoires inscriptibles","Montez un `tmpfs` sur `\u002Ftmp` et un volume temporaire sur `\u002Fopt\u002Fkeycloak\u002Fdata`. Dans le retour qui s'appuie sur une image préoptimisée, ces deux répertoires ont suffi ; sur une image non optimisée, d'autres participants ont ajouté `\u002Fopt\u002Fkeycloak\u002Flib\u002Fquarkus`.",{"title":171,"body":172},"Replacer ce qui se trouvait dans data","Un volume temporaire démarre vide : ce que l'image plaçait dans ce dossier, dont `data\u002Fimport`, n'y est plus visible. Si vous importez des realms avec `--import-realm`, montez leur dossier séparément, en lecture seule.",{"title":174,"body":175},"Vérifier en ouvrant une page de login","Lancez `docker compose up -d` puis `docker compose logs -f keycloak`, ouvrez ensuite la page de connexion : c'est la première requête de thème qui a fait échouer certains montages. Terminez par `docker diff` pour lister ce que le conteneur a réellement écrit.",{"type":177,"title":178,"body":179},"tip","Lecture seule : un durcissement que l'éditeur ne documente pas","Gardez ce mode pour les environnements où une politique l'exige, comme un audit de sécurité ou une règle de cluster, et acceptez le coût : une configuration non documentée, à retester à chaque montée de version, ce que plusieurs participants de l'issue redoutent. Sur un VPS unique, d'autres mesures donnent un gain plus net pour moins d'entretien : capacités Linux retirées (`cap_drop: [ALL]`), option `no-new-privileges`, ports de gestion non publiés et base PostgreSQL sur un réseau Docker interne.",{"type":177,"body":181},"En production, ne servez jamais Keycloak avec la base H2 embarquée et n'exposez pas le realm `master` au public : créez un realm dédié par application ou par client, et réservez `master` à l'administration. Pour durcir l'instance, désactivez l'enregistrement libre, activez le `brute force detection` dans Realm Settings > Security Defenses, et provisionnez tout via des fichiers d'import realm (`--import-realm`) afin de versionner votre configuration plutôt que de cliquer dans l'UI.","Installez Keycloak sur votre VPS","Keycloak est disponible au Marketplace ServOrbit : image officielle, base PostgreSQL, HTTPS et compte administrateur prêts à l'installation.","Voir Keycloak au Marketplace","\u002Fapplications\u002Fcybersecurity\u002Fkeycloak",[187,205,224],{"id":188,"slug":189,"slugs":190,"title":194,"excerpt":195,"readTime":23,"views":18,"isPinned":19,"noindex":19,"publishedAt":196,"updatedAt":197,"category":198,"categories":199,"featuredImage":30,"bgImage":31,"posterImage":201,"relatedSolution":202},105,"superviser-vps-uptime-kuma",{"fr":189,"en":191,"ar":192,"es":193},"monitoring-your-vps-with-uptime-kuma","مراقبة-خادمك-الافتراضي-vps-باستخدام-uptime-kuma","supervisar-vps-con-uptime-kuma","Superviser votre VPS avec Uptime Kuma","Déployez Uptime Kuma sur votre VPS pour surveiller vos sites et services en self-hosted, avec alertes et page de statut publique.","2026-03-07T00:00:00+00:00","2026-11-09T20:55:19+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[200],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fsuperviser-vps-uptime-kuma-poster.svg",{"categorySlug":203,"appSlug":204},"monitoring","uptime-kuma",{"id":206,"slug":207,"slugs":208,"title":212,"excerpt":213,"readTime":214,"views":215,"isPinned":19,"noindex":19,"publishedAt":216,"updatedAt":217,"category":218,"categories":219,"featuredImage":30,"bgImage":31,"posterImage":221,"relatedSolution":222},106,"monitoring-vps-grafana-prometheus",{"fr":207,"en":209,"ar":210,"es":211},"vps-monitoring-with-grafana-and-prometheus","مراقبة-الخادم-الافتراضي-vps-باستخدام-grafana-و-prometheus","monitorizacion-vps-grafana-prometheus","Monitoring VPS avec Grafana et Prometheus","Déployez Prometheus 3.x, Grafana 13.x, Node Exporter et Alertmanager sur votre VPS avec Docker Compose. Dashboards, alertes et durcissement.",11,1,"2026-03-06T00:00:00+00:00","2026-10-05T14:05:27+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[220],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fmonitoring-vps-grafana-prometheus-poster.svg",{"categorySlug":203,"appSlug":223},"grafana",{"id":225,"slug":226,"slugs":227,"title":231,"excerpt":232,"readTime":233,"views":215,"isPinned":19,"noindex":19,"publishedAt":234,"updatedAt":235,"category":236,"categories":237,"featuredImage":30,"bgImage":31,"posterImage":239,"relatedSolution":240},107,"monitorer-vps-netdata",{"fr":226,"en":228,"ar":229,"es":230},"monitor-your-vps-in-real-time-with-netdata","راقب-خادمك-الافتراضي-vps-في-الوقت-الفعلي-باستخدام-netdata","monitorizar-vps-en-tiempo-real-con-netdata","Monitorer votre VPS en temps réel avec Netdata","Installez Netdata sur votre VPS pour un monitoring temps réel par seconde : milliers de métriques, zéro configuration, alertes incluses.",3,"2026-03-05T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[238],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fmonitorer-vps-netdata-poster.svg",{"categorySlug":203,"appSlug":241},"netdata",true,1794270742689]