[{"data":1,"prerenderedAt":208},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-logto-vps-ma-fr":6,"promo-bar-likely":207},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-logto-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":137,"ctaBody":138,"ctaButton":139,"ctaUrl":140,"relatedPosts":141},226,"self-host-logto-vps",{"fr":10,"en":12,"ar":13,"es":14},"self-host-logto-on-a-vps-your-own-authentication-layer","استضافة-logto-على-خادم-افتراضي-طبقة-المصادقة-عندك","autoalojar-logto-en-un-vps","Héberger Logto sur un VPS : l'authentification chez vous","Déployez Logto sur votre VPS ServOrbit : authentification OIDC, connexion sociale, MFA et SDK — sans coût par utilisateur ni données confiées à un tiers.",10,1,false,"2026-08-05T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},4,"Développement","developpement","bg-warning\u002F10 text-warning","dev",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-logto-vps-poster.svg",{"categorySlug":34,"appSlug":35},"cybersecurity","logto","Les services d'authentification hébergés facturent à l'utilisateur actif mensuel, et gardent les données de connexion de vos utilisateurs sur leurs serveurs. Logto est l'alternative open source : une plateforme d'authentification OIDC\u002FOAuth 2.0 complète que vous déployez sur votre propre VPS et que vous maîtrisez de bout en bout. Un fichier Docker Compose, deux conteneurs (Logto et PostgreSQL 17), et vos applications disposent d'une authentification de production — inscription, connexion sociale, MFA, contrôle d'accès par rôles — sans coût par utilisateur.",[38,42,45,48,58,80,95,98,101,131,134],{"type":39,"title":40,"body":41},"h2","Ce qu'est Logto — et ce qu'il n'est pas","Logto est une **plateforme d'authentification livrée comme un SDK** : vous l'intégrez au code de votre application en une quinzaine de lignes, et elle prend en charge tout le cycle de vie des comptes, sur votre propre serveur. C'est différent des deux autres outils d'authentification du catalogue ServOrbit :\n\n- **Authelia** ajoute MFA et authentification unique *devant* des applications existantes, par délégation, sans toucher à leur code — il protège des applications qui n'ont pas d'écran de connexion du tout.\n- **Authentik** est un fournisseur d'identité complet, pour centraliser l'authentification unique de vos outils auto-hébergés (Grafana, Gitea, Nextcloud).\n- **Logto** remplace un service d'authentification hébergé : vous appelez son SDK depuis votre application React, Python ou Go, et il gère comptes, sessions, connecteurs sociaux et jetons.\n\nSi vous construisez un produit où les utilisateurs créent un compte, Logto est l'outil adapté.",{"type":39,"title":43,"body":44},"Prérequis","Avant de déployer Logto 1.19+, vérifiez les points suivants sur votre VPS ServOrbit :\n\n- **RAM** : au moins **2 Go** (4 Go recommandés si vous attendez plus de 5 000 utilisateurs actifs). Logto s'exécute sur Node.js 20 LTS et partage la même instance que PostgreSQL 17.\n- **CPU** : 1 vCPU suffit pour un démarrage, mais 2 vCPU évitent les latences à la connexion sous charge.\n- **Disque** : comptez au minimum **10 Go** libres : PostgreSQL alloue des journaux WAL et les sessions actives s'accumulent rapidement avec la journalisation d'audit activée par défaut.\n- **Docker** ≥ 24.0 et **Docker Compose** ≥ 2.20 — préinstallés sur toutes les offres VPS ServOrbit.\n- **PostgreSQL 17 minimum** (inclus dans l'image officielle Logto) — les versions antérieures ne supportent pas les extensions requises.\n- **Un nom de domaine ou sous-domaine** pointé vers votre VPS et résolu publiquement : Logto inscrit ce domaine dans chaque jeton OIDC qu'il émet. Il doit être défini **avant** le premier démarrage et ne peut plus être modifié sans réinitialiser toutes les données utilisateur.",{"type":39,"title":46,"body":47},"Comment Logto fonctionne en production","Logto démarre deux conteneurs : `db` (PostgreSQL 17 pour les utilisateurs, les applications, les sessions et le journal d'audit) et `logto` (Node.js, qui sert le point d'accès OIDC sur le port 3001 et la console d'administration sur le port 3002). Le proxy inverse nginx de votre VPS transmet le trafic HTTPS de votre domaine vers le port 3001 — c'est le point d'accès auprès duquel vos applications s'authentifient. Le port 3002 n'est lié qu'à la boucle locale et n'est joignable que par un tunnel SSH, ce qui garde l'administration de votre base d'utilisateurs hors de l'internet public.",{"type":49,"title":50,"items":51},"ul","Ce que Logto apporte dès l'installation",[52,53,54,55,56,57],"**Des jetons conformes OIDC\u002FOAuth 2.0** — des JWT signés que n'importe quelle bibliothèque standard (passport.js, python-jose, go-oidc) vérifie sans code spécifique.","**Des connecteurs de connexion sociale** — activez Google, GitHub, Apple, Microsoft, Discord et une trentaine d'autres fournisseurs depuis la console, en un clic ; chacun demande une déclaration OAuth de quelques minutes côté fournisseur.","**L'authentification sans mot de passe** — liens magiques par courriel ou codes à usage unique par SMS (Twilio, SendGrid, Mailgun), sans maintenir un service de notification séparé.","**La double authentification** — TOTP (Google Authenticator, Authy), clés matérielles WebAuthn\u002FFIDO2 et codes de secours, imposés par politique depuis la console.","**Le contrôle d'accès par rôles** — définissez rôles et permissions dans la console, recevez-les comme revendications `scope` du JWT, et appliquez-les dans votre API en une ligne d'intergiciel.","**Des SDK pour plus de 20 cadres** — React, Next.js, Vue, Angular, React Native, Flutter, Python, FastAPI, Go, PHP, Laravel, .NET, Java, Spring Boot et d'autres.",{"type":59,"title":60,"steps":61},"steps","Déploiement Docker Compose pas à pas",[62,65,68,71,74,77],{"title":63,"body":64},"Créer le répertoire et le fichier Compose","Connectez-vous en SSH à votre VPS, puis créez le répertoire de travail :\n\n```\nmkdir -p \u002Fopt\u002Flogto && cd \u002Fopt\u002Flogto\n```\n\nCréez le fichier `docker-compose.yml` avec le contenu suivant. Remplacez `auth.votre-domaine.com` par votre propre domaine :\n\n```yaml\nversion: '3.9'\nservices:\n  db:\n    image: postgres:17-alpine\n    restart: unless-stopped\n    environment:\n      POSTGRES_DB: logto\n      POSTGRES_USER: logto\n      POSTGRES_PASSWORD: ${DB_PASSWORD}\n    volumes:\n      - logto_db:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n  logto:\n    image: svhd\u002Flogto:latest\n    restart: unless-stopped\n    depends_on:\n      - db\n    ports:\n      - '127.0.0.1:3001:3001'\n      - '127.0.0.1:3002:3002'\n    environment:\n      DB_URL: postgresql:\u002F\u002Flogto:${DB_PASSWORD}@db:5432\u002Flogto\n      ENDPOINT: https:\u002F\u002Fauth.votre-domaine.com\n      ADMIN_ENDPOINT: https:\u002F\u002Fauth.votre-domaine.com:3002\n      SECRET_VAULT_KEK: ${SECRET_VAULT_KEK}\nvolumes:\n  logto_db:\n```",{"title":66,"body":67},"Générer les secrets et créer le fichier .env","Générez un mot de passe de base de données et une clé AES-256 solides :\n\n```bash\nDB_PASSWORD=$(openssl rand -hex 32)\nSECRET_VAULT_KEK=$(openssl rand -hex 32)\nprintf \"DB_PASSWORD=%s\\nSECRET_VAULT_KEK=%s\\n\" \"$DB_PASSWORD\" \"$SECRET_VAULT_KEK\" > .env\nchmod 600 .env\n```\n\nVérifiez que `.env` contient bien deux lignes non vides avant de continuer.",{"title":69,"body":70},"Configurer nginx en proxy inverse","Créez le vhost `\u002Fetc\u002Fnginx\u002Fsites-available\u002Flogto` :\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name auth.votre-domaine.com;\n    ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fauth.votre-domaine.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fauth.votre-domaine.com\u002Fprivkey.pem;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3001;\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 https;\n    }\n}\n```\n\nActivez le site et rechargez nginx :\n\n```bash\nln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Flogto \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F\nnginx -t && systemctl reload nginx\n```",{"title":72,"body":73},"Démarrer la pile et vérifier","Lancez les deux conteneurs :\n\n```bash\ndocker compose up -d\n```\n\nSuivez les logs pendant 60 secondes pour confirmer que PostgreSQL est prêt et que Logto a terminé ses migrations :\n\n```bash\ndocker compose logs -f --tail=50\n```\n\nVous devez voir la ligne `App is running at https:\u002F\u002Fauth.votre-domaine.com` — c'est le signal que le service est opérationnel.",{"title":75,"body":76},"Vérifier le document de découverte OIDC","Depuis votre poste local, vérifiez que le point d'accès OIDC répond :\n\n```bash\ncurl -s https:\u002F\u002Fauth.votre-domaine.com\u002F.well-known\u002Fopenid-configuration | python3 -m json.tool | head -10\n```\n\nLa réponse doit contenir `issuer`, `authorization_endpoint` et `jwks_uri`. Si la commande renvoie une erreur 502, Logto n'a pas encore terminé ses migrations — attendez 30 secondes et réessayez.",{"title":78,"body":79},"Configurer les sauvegardes automatiques","Ajoutez une tâche cron pour exporter la base de données quotidiennement :\n\n```bash\ncrontab -e\n# Ajouter la ligne suivante :\n0 3 * * * docker exec $(docker compose -f \u002Fopt\u002Flogto\u002Fdocker-compose.yml ps -q db) pg_dump -U logto logto | gzip > \u002Fvar\u002Fbackups\u002Flogto_$(date +\\%Y\\%m\\%d).sql.gz\n```\n\nPour des sauvegardes automatisées, dédupliquées et chiffrées vers S3 ou Backblaze B2, montez le volume `logto_db` dans une instance Backrest disponible dans le catalogue ServOrbit.",{"type":59,"title":81,"steps":82},"Se connecter la première fois",[83,86,89,92],{"title":84,"body":85},"Ouvrir le tunnel SSH vers la console d'administration","La console d'administration écoute sur le port 3002, lié à la boucle locale pour des raisons de sécurité. Depuis votre poste, ouvrez un tunnel :\n\n```bash\nssh -L 3002:127.0.0.1:3002 root@ip-de-votre-vps\n```\n\nGardez ce terminal ouvert pendant toute votre session d'administration.",{"title":87,"body":88},"Créer le compte administrateur","Ouvrez `http:\u002F\u002Flocalhost:3002` dans votre navigateur. L'assistant de première connexion s'affiche — il n'existe aucun identifiant par défaut. Saisissez une adresse courriel et un mot de passe robuste, puis cliquez sur **Create account**. Ces identifiants seront les vôtres pour administrer Logto ; conservez-les dans un gestionnaire de mots de passe.",{"title":90,"body":91},"Explorer le tableau de bord","Après la création du compte, vous accédez au tableau de bord Logto. Depuis ici vous pouvez : consulter le journal d'audit, gérer les utilisateurs, configurer les connecteurs sociaux et créer des **Applications** — c'est l'entité Logto qui représente un de vos projets.",{"title":93,"body":94},"Créer votre première Application","Dans la console : **Applications → Create application**. Choisissez le type correspondant à votre projet (Traditional Web, Single Page App, Native, ou Machine-to-machine). Donnez-lui un nom, puis renseignez l'**Redirect URI** — c'est l'URL vers laquelle Logto redirige après une connexion réussie (par exemple `https:\u002F\u002Fmon-app.com\u002Fapi\u002Flogto\u002Fsign-in-callback` pour une application Next.js). Logto génère alors un `App ID` et un `App Secret` que vous utiliserez dans votre SDK.",{"type":39,"title":96,"body":97},"Intégrer Logto dans une application Next.js","Installez le SDK avec `npm install @logto\u002Fnext`, puis créez un `logto.ts` qui exporte un `new LogtoClient({ … })` configuré avec `endpoint` (l'URL de votre instance Logto), `appId` et `appSecret` (relevés dans la console Logto), `baseUrl` (l'URL de votre application), `cookieSecret` et `cookieSecure`.\n\nPour protéger une route, appelez `getLogtoContext({ getAccessToken: true })` importé de `@logto\u002Fnext\u002Fserver-component` : il rend `isAuthenticated` et les `claims` de l'utilisateur. Si `isAuthenticated` est faux, redirigez vers `\u002Fapi\u002Flogto\u002Fsign-in` ; sinon, servez la page en vous appuyant sur les revendications reçues.\n\nC'est toute l'intégration : une quinzaine de lignes de configuration, un import, une garde.",{"type":39,"title":99,"body":100},"Activer la connexion Google","Dans la console Google Cloud, créez un identifiant client OAuth 2.0 de type application web. Renseignez l'URI de redirection autorisée `https:\u002F\u002Fauth.votre-domaine.com\u002Fcallback\u002Fgoogle`, puis copiez l'identifiant et le secret client.\n\nDans la console Logto → Connecteurs → Connecteurs sociaux → Google → Activer. Collez l'identifiant et le secret, puis enregistrez. Google apparaît dès lors comme une option de connexion sur votre page Logto, sans aucune modification de code dans votre application.",{"type":102,"title":103,"intro":104,"columns":105,"rows":110,"note":130},"comparison","Logto, Authentik, Authelia, Keycloak — lequel choisir ?","Quatre solutions open source pour l'authentification auto-hébergée, avec des cas d'usage distincts. Le tableau ci-dessous compare les trois critères qui font la différence à l'installation.",[106,107,108,109],"Solution","Cas d'usage principal","RAM minimale","Complexité d'intégration SDK",[111,116,120,125],[112,113,114,115],"**Logto**","Authentification pour un produit que vous développez (inscription, JWT, connecteurs sociaux)","2 Go","Faible — SDK officiel en 15 lignes pour React, Next.js, Python, Go, Flutter et 15+ autres",[117,118,114,119],"**Authentik**","SSO centralisé pour vos outils auto-hébergés (Grafana, Gitea, Nextcloud, Proxmox)","Moyenne — configuration via des *Providers* dans la console, pas de SDK applicatif",[121,122,123,124],"**Authelia**","MFA et portail de connexion *devant* des applications existantes, sans modifier leur code","256 Mo","Nulle — délégation d'authentification par en-tête nginx, aucune intégration SDK",[126,127,128,129],"**Keycloak**","SSO d'entreprise, fédération LDAP\u002FAD, scénarios multi-tenant avancés","4 Go minimum","Élevée — configuration OIDC manuelle, librairies client à configurer par framework","Pour un produit SaaS en construction, Logto est le point de départ naturel. Keycloak convient aux organisations qui ont déjà un annuaire d'entreprise à intégrer. Authelia et Authentik répondent à des besoins d'infrastructure plutôt qu'applicatifs.",{"type":39,"title":132,"body":133},"Dépannage fréquent","Voici les quatre problèmes les plus courants lors d'une première installation de Logto sur VPS, et comment les résoudre.\n\n**La console d'administration est inaccessible (port 3002)**\n\nLe port 3002 est intentionnellement lié à `127.0.0.1` — il n'est pas accessible directement depuis internet. Si `http:\u002F\u002Flocalhost:3002` ne répond pas, vérifiez d'abord que votre tunnel SSH est bien ouvert (`ssh -L 3002:127.0.0.1:3002 root@\u003CIP>`). Vérifiez ensuite que le conteneur Logto tourne : `docker compose ps`. Si le conteneur est à l'état `Exit`, consultez les logs : `docker compose logs logto --tail=50`.\n\n**L'endpoint OIDC renvoie une erreur 502 (OIDC discovery 502)**\n\nLogto exécute ses migrations de base de données au premier démarrage — cela prend entre 30 et 90 secondes selon le VPS. Si le document de découverte `\u002F.well-known\u002Fopenid-configuration` renvoie 502, c'est que nginx transmet les requêtes avant que Logto ne soit prêt. Attendez 90 secondes, puis réessayez. Si l'erreur persiste, vérifiez que PostgreSQL est sain : `docker compose logs db --tail=20` — cherchez la ligne `database system is ready to accept connections`.\n\n**Redirect URI mismatch**\n\nLogto valide strictement l'URI de redirection : si l'URI envoyée par votre application ne correspond pas exactement à celle déclarée dans la console Logto (Application → Redirect URIs), la connexion échoue avec l'erreur `redirect_uri_mismatch`. Vérifiez que vous avez enregistré l'URL complète, y compris le schéma (`https:\u002F\u002F`), le chemin exact et l'absence de barre oblique finale si votre SDK n'en envoie pas. Les URIs de développement (`http:\u002F\u002Flocalhost:3000\u002F…`) doivent être ajoutées séparément dans la console.\n\n**Fatal: cannot connect to db**\n\nSi les logs Logto affichent `Fatal: cannot connect to db`, PostgreSQL n'était pas encore prêt quand Logto a tenté de s'y connecter. La déclaration `depends_on` de Docker Compose garantit l'ordre de démarrage des conteneurs, mais pas que PostgreSQL accepte des connexions. Relancez simplement le conteneur Logto : `docker compose restart logto`. Il se reconnectera dès que PostgreSQL sera prêt.",{"type":39,"title":135,"body":136},"Stratégie de sauvegarde","Logto conserve tout son état dans le volume PostgreSQL `logto_db`. Sauvegardez-le par une tâche planifiée `pg_dump`, ou montez le volume dans une instance Backrest (également au catalogue ServOrbit) pour des sauvegardes automatisées, dédupliquées et chiffrées vers S3, Backblaze B2 ou SFTP. Perdre le volume `logto_db`, c'est perdre tous les comptes utilisateur, la configuration des applications et le journal d'audit — sauvegardez-le avant toute migration de VPS.","Votre couche d'authentification, sur votre VPS","Déployez Logto sur un VPS ServOrbit : gardez les données d'authentification de vos utilisateurs, sortez de la facturation par utilisateur, et intégrez les SDK React, Next.js, Python, Go, Flutter et bien d'autres.","Déployer Logto","\u002Fapplications\u002Fcybersecurity\u002Flogto",[142,166,188],{"id":143,"slug":144,"slugs":145,"title":149,"excerpt":150,"readTime":151,"views":151,"isPinned":19,"noindex":19,"publishedAt":152,"updatedAt":153,"category":154,"categories":160,"featuredImage":30,"bgImage":31,"posterImage":162,"relatedSolution":163},111,"sso-authentik-vps",{"fr":144,"en":146,"ar":147,"es":148},"centralizing-authentication-with-authentik-on-vps","مركزة-المصادقة-باستخدام-authentik-على-خادم-vps","centralizar-autenticacion-con-authentik-en-vps","Centraliser l'authentification avec Authentik sur VPS","Centralisez l'authentification de toutes vos apps avec Authentik auto-hébergé sur VPS : SSO, MFA et forward auth en Docker Compose.",9,"2026-03-01T00:00:00+00:00","2026-10-31T01:54:10+00:00",{"id":155,"name":156,"slug":157,"color":158,"icon":159},8,"Sécurité & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[161],{"id":155,"name":156,"slug":157,"color":158,"icon":159},"\u002Fblog\u002Fcovers\u002Fsso-authentik-vps-poster.svg",{"categorySlug":164,"appSlug":165},"securite","authentik",{"id":167,"slug":168,"slugs":169,"title":173,"excerpt":174,"readTime":151,"views":18,"isPinned":19,"noindex":19,"publishedAt":175,"updatedAt":176,"category":177,"categories":183,"featuredImage":30,"bgImage":31,"posterImage":185,"relatedSolution":186},160,"self-host-infisical-vps",{"fr":168,"en":170,"ar":171,"es":172},"how-to-self-host-infisical-on-a-vps","كيفية-استضافة-infisical-ذاتيا-على-خادم-vps","como-autoalojar-infisical-en-un-vps","Comment auto-héberger Infisical sur un VPS","Déployez Infisical sur votre VPS en moins de 20 min : RBAC, rotation automatique, intégration GitHub Actions et GitLab CI, dépannage Redis et TLS inclus.","2026-07-02T00:00:00+00:00","2026-10-16T01:57:38+00:00",{"id":178,"name":179,"slug":180,"color":181,"icon":182},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[184],{"id":178,"name":179,"slug":180,"color":181,"icon":182},"\u002Fblog\u002Fcovers\u002Fself-host-infisical-vps-poster.svg",{"categorySlug":34,"appSlug":187},"infisical",{"id":189,"slug":190,"slugs":191,"title":195,"excerpt":196,"readTime":197,"views":198,"isPinned":19,"noindex":19,"publishedAt":199,"updatedAt":200,"category":201,"categories":202,"featuredImage":30,"bgImage":31,"posterImage":204,"relatedSolution":205},131,"deploy-vaultwarden-vps",{"fr":190,"en":192,"ar":193,"es":194},"self-host-your-password-manager-deploy-vaultwarden-on-vps","استضف-مدير-كلمات-المرور-بنفسك-انشر-vaultwarden-على-vps","desplegar-vaultwarden-en-un-vps","Déployer Vaultwarden sur un VPS : mots de passe auto-hébergés","Auto-hébergez Vaultwarden sur un VPS : gestion de mots de passe, compatibilité Bitwarden, coffres d'équipe et TOTP, à coût mensuel fixe et moins de 50 Mo de RAM.",15,3,"2026-06-24T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":155,"name":156,"slug":157,"color":158,"icon":159},[203],{"id":155,"name":156,"slug":157,"color":158,"icon":159},"\u002Fblog\u002Fcovers\u002Fdeploy-vaultwarden-vps-poster.svg",{"categorySlug":159,"appSlug":206},"vaultwarden",true,1794270793189]