Guide de déploiement

Centraliser l'authentification avec Authentik sur VPS

Déployer sur un VPS Cloud →

Tutoriel

Sécurité & Monitoring

Centraliser l'authentification avec Authentik sur VPS

Gérer un mot de passe par application ne tient pas à l'échelle d'une agence ou d'un homelab sérieux. Authentik est un fournisseur d'identité open source qui centralise SSO, MFA et gestion des utilisateurs. Déployé sur votre VPS, il devient le point d'authentification unique de tout votre écosystème self-hébergé.

9 min de lecture10 étapes
Sommaire· Pourquoi centraliser l'authentification sur votre VPS1/13
  1. 01Pourquoi centraliser l'authentification sur votre VPS
  2. 02Ce que vous gagnez avec Authentik
  3. 03Prérequis chiffrés avant de commencer
  4. 04Checklist avant le premier docker compose up
  5. 05Déployer Authentik en Docker Compose
  6. 06Reverse proxy et TLS
  7. 07Protéger une application par forward auth avec nginx
  8. 08Sauvegarder et restaurer Authentik
  9. 09Quoi sauvegarder
  10. 10Mettre à jour sans casser le SSO
  11. 11Redis n'est plus de la partie
  12. 12Dépannage : redémarrage en boucle avec AUTHENTIK_POSTGRESQL__USE_POOL
  13. 13Autres pannes fréquentes

Pourquoi centraliser l'authentification sur votre VPS

Quand vous accumulez les outils self-hébergés (Grafana, Nextcloud, Gitea, un dashboard interne), chacun apporte sa propre base d'utilisateurs et sa propre politique de mots de passe. C'est un cauchemar à maintenir et une surface d'attaque démultipliée. Authentik résout cela en jouant le rôle de fournisseur d'identité (IdP) : il supporte OAuth2/OIDC, SAML, LDAP et surtout le forward auth, qui permet de protéger n'importe quelle application derrière un reverse proxy, même celles sans aucune notion de login. Le self-hébergement sur VPS garantit que vos identifiants ne transitent jamais par un service tiers et que vous restez maître de l'arbre des utilisateurs et des politiques MFA.

Ce que vous gagnez avec Authentik

  • Un seul jeu d'identifiants pour toutes vos applications, avec déconnexion centralisée.
  • MFA (TOTP, WebAuthn/clés FIDO2, codes de secours) appliqué uniformément par politique.
  • Le forward auth pour protéger des apps "sans login", impossible avec un IdP classique.
  • Des flows entièrement personnalisables (inscription, récupération, captcha, conditions d'accès).
  • Connecteurs OAuth2/OIDC, SAML et LDAP pour brancher aussi bien des apps modernes que legacy.
  • Provisioning et révocation d'accès immédiats lors d'un départ collaborateur.

Prérequis chiffrés avant de commencer

La documentation officielle d'Authentik demande au minimum 2 cœurs de CPU et 2 Go de RAM, avec Docker Compose v2 (ou Podman). Sur un VPS réel, nous recommandons 2 vCPU et 4 Go de RAM : le serveur, le worker et PostgreSQL partagent la même machine, et 2 Go ne laissent aucune marge dès qu'un pic de connexions ou un outpost s'ajoute. Prévoyez aussi une vingtaine de gigaoctets de disque libre pour les images, la base et quelques sauvegardes locales (estimation indicative, pas un chiffre officiel). Authentik est un guide fourni sur un template VPS : ServOrbit ne le supporte pas, vous en gardez l'administration.

Checklist avant le premier docker compose up

  • Un VPS Linux 64 bits avec Docker Engine et le plugin Compose v2 : 2 vCPU et 4 Go de RAM recommandés, 2 cœurs et 2 Go au strict minimum officiel.
  • Un sous-domaine dédié, par exemple auth.exemple.com, avec un enregistrement A (et AAAA si vous avez de l'IPv6) vers l'IP du VPS.
  • Les ports 80 et 443 ouverts vers le reverse proxy ; les ports 9000 et 9443 du conteneur server jamais exposés publiquement.
  • Un reverse proxy (nginx, Caddy ou Traefik) capable d'obtenir un certificat Let's Encrypt.
  • Un moyen de récupérer le compte administrateur si vous perdez votre second facteur : codes de secours conservés dans un gestionnaire de mots de passe.
  • Un emplacement de sauvegarde situé hors du VPS.

Déployer Authentik en Docker Compose

  1. Créer le dossier et récupérer le compose officiel

    Créez un dossier dédié (mkdir -p /opt/authentik && cd /opt/authentik) puis téléchargez le fichier de référence avec wget https://docs.goauthentik.io/compose.yml. Le fichier actuel déclare trois services : postgresql, server et worker. Il référence la version disponible au moment du téléchargement : à chaque mise à jour, il faut le retélécharger.

  2. Générer les secrets dans le fichier .env

    Exécutez echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" >> .env puis echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" >> .env. La documentation précise que les mots de passe PostgreSQL de plus de 99 caractères ne sont pas supportés. Protégez le fichier (chmod 600 .env), ne le versionnez jamais et ne réutilisez jamais une clé d'exemple.

  3. Lier les ports au seul localhost

    Par défaut, le compose publie 9000 (HTTP) et 9443 (HTTPS) sur toutes les interfaces. Ajoutez dans .env les lignes COMPOSE_PORT_HTTP=127.0.0.1:9000 et COMPOSE_PORT_HTTPS=127.0.0.1:9443 : seul votre reverse proxy local pourra les joindre, et le trafic public passera obligatoirement par HTTPS.

  4. Démarrer la stack

    Lancez docker compose pull puis docker compose up -d. Vérifiez avec docker compose ps que les trois conteneurs sont démarrés et que postgresql est healthy, puis suivez l'initialisation avec docker compose logs -f server. Les migrations de base peuvent prendre quelques minutes au premier lancement.

  5. Finaliser l'installation via /if/flow/initial-setup/

    Au premier lancement, rendez-vous sur https://auth.exemple.com/if/flow/initial-setup/ pour définir le mot de passe du compte akadmin. C'est votre super-administrateur : protégez-le immédiatement avec du MFA, puis créez un compte administrateur nominatif pour l'usage quotidien.

  6. Créer un provider et une application

    Dans l'admin, créez un Provider (OIDC pour une app moderne, ou Proxy pour du forward auth) puis l'Application associée. Pour OIDC, récupérez le client_id / client_secret et l'URL .well-known/openid-configuration à coller dans l'app cliente.

Reverse proxy et TLS

Authentik doit impérativement être servi en HTTPS pour que les cookies de session et WebAuthn fonctionnent. Avec nginx, le vhost de auth.exemple.com fait un proxy_pass http://127.0.0.1:9000; et transmet les en-têtes Host, X-Forwarded-For et X-Forwarded-Proto, ainsi que Upgrade et Connection pour les WebSockets. Le certificat s'obtient avec certbot --nginx -d auth.exemple.com ; Caddy et Traefik le font automatiquement. Si le domaine passe par Cloudflare en mode proxifié, réglez le mode SSL/TLS de la zone sur Full (strict) : en Flexible, nginx redirige HTTP vers HTTPS et vous obtenez une boucle de redirection infinie.

Protéger une application par forward auth avec nginx

  1. Créer le Proxy Provider

    Créez un Proxy Provider en mode forward auth pour une seule application, avec comme External host l'URL publique de l'app (https://app.exemple.com). Rattachez-le à une Application, puis à l'outpost intégré dans la section Outposts.

  2. Brancher auth_request dans le vhost de l'app

    Dans location /, ajoutez auth_request /outpost.goauthentik.io/auth/nginx;, puis error_page 401 = @goauthentik_proxy_signin;. Recopiez aussi les cookies de l'outpost avec auth_request_set $auth_cookie $upstream_http_set_cookie; et add_header Set-Cookie $auth_cookie;. Copiez le bloc complet depuis la page nginx de la documentation correspondant à votre version.

  3. Exposer le chemin de l'outpost sans authentification

    Ajoutez location /outpost.goauthentik.io qui fait un proxy_pass vers http://127.0.0.1:9000, avec Host positionné sur l'hôte d'origine, X-Original-URL sur l'URL complète, proxy_pass_request_body off; et un Content-Length vide. Ce chemin doit rester accessible sans login, sinon la redirection ne fonctionne jamais.

  4. Gérer la redirection et les gros en-têtes

    Déclarez une location @goauthentik_proxy_signin marquée internal qui renvoie un 302 vers /outpost.goauthentik.io/start?rd= suivi de l'URL d'origine. Si vous voyez l'erreur "upstream sent too big header", ajoutez proxy_buffers 8 16k; et proxy_buffer_size 32k;. Les identités arrivent ensuite à l'app dans les en-têtes X-authentik-username, X-authentik-groups et X-authentik-email.

Sauvegarder et restaurer Authentik

La base PostgreSQL est la partie la plus importante d'une sauvegarde : elle contient utilisateurs, politiques, flows et configuration. Avec les noms par défaut du compose (utilisateur et base authentik), un dump se fait par docker compose exec -T postgresql pg_dump -U authentik -d authentik -Fc > /var/backups/authentik-$(date +%F).dump. Pour restaurer, arrêtez d'abord les applicatifs avec docker compose stop server worker, puis docker compose exec -T postgresql pg_restore -U authentik -d authentik --clean --if-exists < fichier.dump, et redémarrez. L'ordre recommandé par la documentation est : base d'abord, vérification, répertoires statiques, puis démarrage. Une sauvegarde jamais restaurée n'est qu'une hypothèse : testez sur une machine jetable.

Quoi sauvegarder

  • La base PostgreSQL : indispensable, sans elle Authentik ne peut pas être remis en état.
  • Le répertoire ./data (icônes, fonds de flows, fichiers téléversés, rapports CSV), sauf si vous utilisez un stockage S3.
  • Le répertoire ./certs si vous vous appuyez sur des certificats du système de fichiers ; les certificats déjà importés sont dans la base.
  • Le répertoire ./custom-templates si vous avez modifié l'apparence, et les blueprints personnalisés le cas échéant.
  • Le fichier .env (clé secrète et mot de passe PostgreSQL), chiffré et rangé hors du VPS.
  • Une copie des dumps sur un stockage distant, jamais seulement sur la machine qui héberge la base.

Mettre à jour sans casser le SSO

Authentik ne supporte pas le retour en arrière : sauvegardez la base avant chaque mise à jour et lisez les notes de version de la cible. Mettez à jour séquentiellement, en passant par le dernier correctif de chaque version majeure.mineure, sans en sauter. Retéléchargez le compose (wget -O compose.yml https://docs.goauthentik.io/compose.yml), puis docker compose pull et docker compose up -d. Mettez à jour tous les outposts en même temps : leur version doit correspondre à celle du serveur. Vérifiez ensuite la version dans Dashboards > Overview ; si elle n'a pas changé et que les logs contiennent migration inconsistency, restaurez la sauvegarde et montez version par version.

Redis n'est plus de la partie

Beaucoup de tutoriels anciens, dont la première version de cet article, décrivent une stack à quatre conteneurs avec Redis. La note de version 2025.10 indique qu'Authentik n'utilise plus Redis du tout : cache, outpost embarqué et WebSockets sont passés sur PostgreSQL, les tâches l'étant déjà depuis la 2025.8. Le compose actuel ne contient donc que postgresql, server et worker. Deux conséquences : comptez environ 50 % de connexions PostgreSQL en plus, et si votre PostgreSQL impose TLS, Authentik exige TLS 1.3 ou l'extension Extended Master Secret. Supprimez les réglages Redis restés dans votre configuration.

Dépannage : redémarrage en boucle avec AUTHENTIK_POSTGRESQL__USE_POOL

Symptôme rapporté dans l'issue goauthentik/authentik n°14320, ouverte en mai 2025 sur la version 2025.4.0 : avec AUTHENTIK_POSTGRESQL__USE_POOL=true, le serveur redémarre en boucle, avec des erreurs SSL du type "decryption failed or bad record mac" ou "SSL SYSCALL error: EOF detected", puis un worker gunicorn qui sort en code 3 ("Worker failed to boot"). La 2025.4.1, publiée en mai 2025, a désactivé l'option par précaution, faute d'avoir trouvé la cause. État réel de l'issue lue le 30 octobre 2026 : toujours ouverte, étiquetée bug confirmé, sans PR de correction liée, avec un jalon 2026.11.0 marqué Required depuis le 23 octobre 2026. Hypothèse d'un mainteneur : le contexte SSL de l'asynchrone partagé entre threads, alors qu'il n'est pas thread-safe. Piste rapportée, non officielle : un utilisateur a indiqué en septembre 2026 que AUTHENTIK_WEB__WORKERS=1 et AUTHENTIK_WEB__THREADS=1 éliminaient le problème ; selon les tests d'un mainteneur, 1 worker et 1 thread passent, 2 workers ou plus le reproduisent. Ce n'est ni un correctif ni une garantie, et cela limite la capacité de l'interface. Le plus sûr reste de ne pas activer le pool (supprimez la variable de .env) et de relire l'issue avant toute mise à jour.

Autres pannes fréquentes

  • Boucle de redirection derrière Cloudflare : le mode SSL/TLS de la zone est en Flexible ; passez en Full (strict) et vérifiez que X-Forwarded-Proto est transmis.
  • WebAuthn ou cookies refusés : l'interface est servie en HTTP ou sous un autre nom d'hôte ; imposez HTTPS sur le domaine exact d'Authentik.
  • Erreur 502 sur l'app protégée : cherchez "upstream sent too big header" dans les logs nginx et augmentez proxy_buffer_size.
  • server et worker ne démarrent pas : postgresql n'est pas healthy ; lisez docker compose logs postgresql, et rappelez-vous que PG_PASS et AUTHENTIK_SECRET_KEY sont obligatoires.
  • Outpost injoignable après une mise à jour : sa version ne correspond plus à celle du serveur ; mettez-le à niveau.
  • Conteneurs tués sans message : sur 2 Go de RAM, l'OOM killer frappe ; vérifiez avec dmesg | grep -i oom et passez à 4 Go.

Activez un Outpost intégré et exploitez les "property mappings" pour injecter des en-têtes (X-authentik-username, X-authentik-groups) vers vos applications en forward auth : nombre d'apps (Grafana, par exemple) savent lire ces en-têtes pour faire de l'auto-provisioning d'utilisateur et d'attribution de rôles. Vous obtenez ainsi non seulement du SSO, mais aussi un mapping de groupes vers rôles entièrement automatisé, sans configuration manuelle dans chaque outil.

Centralisez vos accès sur votre propre VPS

Le VPS Cloud ServOrbit avec template Docker préconfiguré offre la RAM et le stockage nécessaires à la stack Authentik (serveur, worker, PostgreSQL, Redis) prête à recevoir vos applications.