Aller au contenu
medium

Installer authentik avec Docker Compose

16 min de lecture

logo authentik

Ce guide vous permet de déployer authentik en 15 minutes avec Docker Compose et d’accéder à l’interface d’administration. Vous repartirez avec un environnement fonctionnel, une compréhension des composants et la capacité d’ajouter vos premières applications. Prérequis : Docker et Docker Compose installés.

À la fin de ce guide, vous aurez :

  • Un serveur authentik (interface web + API)
  • Un worker authentik (tâches de fond : emails, synchronisations, etc.)
  • Une base PostgreSQL pour le stockage des données
  • Un accès à l’interface d’administration pour configurer les applications
  • Un accès au portail utilisateur où les utilisateurs voient leurs applications

L’ensemble tourne en local sur votre machine. Aucun serveur distant n’est nécessaire.

PrérequisVersion minimaleVérification
Docker20+docker --version
Docker Composev2+docker compose version
Navigateur webRécent
RAM disponible2 Gofree -h
Espace disque2 GoPour les images Docker

Le lab déploie 3 conteneurs sur un réseau Docker interne :

Architecture du lab authentik avec Docker Compose

Le serveur gère l’interface web, l’API et les flows d’authentification. Le worker exécute les tâches asynchrones : envoi d’emails, synchronisation LDAP, provisioning SCIM. Les deux partagent la même base PostgreSQL.

  1. Créez le répertoire du lab

    Fenêtre de terminal
    mkdir -p ~/Projets/authentik-lab && cd ~/Projets/authentik-lab
  2. Générez la clé secrète

    authentik a besoin d’une clé secrète (AUTHENTIK_SECRET_KEY) pour signer les tokens et chiffrer les données sensibles. Cette clé doit rester stable entre les redémarrages — sinon, toutes les sessions sont invalidées.

    Fenêtre de terminal
    echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" > .env

    Vérifiez que la clé a été générée :

    Fenêtre de terminal
    cat .env

    Résultat attendu (la valeur sera différente) :

    AUTHENTIK_SECRET_KEY=aB3dEf7hIjKlMnOpQrStUvWxYz012345678+abc=
  3. Ajoutez le mot de passe PostgreSQL

    Fenêtre de terminal
    echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" >> .env
  4. Créez le fichier Docker Compose

    docker-compose.yaml
    services:
    postgresql:
    image: docker.io/library/postgres:16-alpine
    restart: unless-stopped
    healthcheck:
    test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
    start_period: 20s
    interval: 30s
    retries: 5
    timeout: 5s
    env_file:
    - .env
    environment:
    POSTGRES_DB: ${PG_DB:-authentik}
    POSTGRES_PASSWORD: ${PG_PASS:?database password required}
    POSTGRES_USER: ${PG_USER:-authentik}
    volumes:
    - database:/var/lib/postgresql/data
    server:
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.1}
    restart: unless-stopped
    command: server
    env_file:
    - .env
    environment:
    AUTHENTIK_POSTGRESQL__HOST: postgresql
    AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
    AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
    AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
    AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required}
    volumes:
    - ./data:/data
    - ./custom-templates:/templates
    ports:
    - "${COMPOSE_PORT_HTTP:-9000}:9000"
    - "${COMPOSE_PORT_HTTPS:-9443}:9443"
    shm_size: 512mb
    depends_on:
    postgresql:
    condition: service_healthy
    worker:
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.1}
    restart: unless-stopped
    command: worker
    user: root
    env_file:
    - .env
    environment:
    AUTHENTIK_POSTGRESQL__HOST: postgresql
    AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
    AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
    AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
    AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required}
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - ./data:/data
    - ./certs:/certs
    - ./custom-templates:/templates
    shm_size: 512mb
    depends_on:
    postgresql:
    condition: service_healthy
    volumes:
    database:
    driver: local

Avant de démarrer, détaillons les éléments clés.

VariableRôle
AUTHENTIK_SECRET_KEYClé de chiffrement et de signature (tokens, sessions)
PG_PASSMot de passe de la base PostgreSQL
AUTHENTIK_POSTGRESQL__HOSTHôte PostgreSQL (nom du service Docker)
AUTHENTIK_POSTGRESQL__USERUtilisateur PostgreSQL
AUTHENTIK_POSTGRESQL__NAMENom de la base de données
AUTHENTIK_POSTGRESQL__PASSWORDMot de passe PostgreSQL

authentik utilise le préfixe AUTHENTIK_ pour toutes ses variables. Les doubles underscores (__) séparent les niveaux de configuration : AUTHENTIK_POSTGRESQL__HOST correspond à postgresql.host dans la configuration interne.

Volume / MountRôle
databaseDonnées PostgreSQL persistées entre redémarrages
./dataFichiers uploadés (logos, icônes d’applications, rapports CSV)
./custom-templatesTemplates personnalisés pour les pages de connexion
./certsCertificats TLS (worker uniquement, si vous en fournissez)
PortProtocoleUsage
9000HTTPInterface web et API
9443HTTPSInterface web et API (TLS auto-signé)

En lab, le port 9000 (HTTP) suffit. En production derrière un reverse proxy (Traefik, Nginx), celui-ci gère la terminaison TLS.

  1. Téléchargez les images Docker

    Fenêtre de terminal
    docker compose pull

    Résultat attendu :

    ✔ server Pulled
    ✔ worker Pulled
    ✔ postgresql Pulled
  2. Démarrez les services

    Fenêtre de terminal
    docker compose up -d

    Résultat attendu :

    ✔ Network authentik-lab_default Created
    ✔ Volume "authentik-lab_database" Created
    ✔ Container authentik-lab-postgresql-1 Started
    ✔ Container authentik-lab-server-1 Started
    ✔ Container authentik-lab-worker-1 Started
  3. Vérifiez que tous les conteneurs tournent

    Fenêtre de terminal
    docker compose ps

    Les 3 conteneurs doivent avoir le statut Up (healthy) pour PostgreSQL et Up pour server et worker :

    NAME IMAGE STATUS
    authentik-lab-postgresql-1 postgres:16-alpine Up (healthy)
    authentik-lab-server-1 ghcr.io/goauthentik/server:2026.2.1 Up
    authentik-lab-worker-1 ghcr.io/goauthentik/server:2026.2.1 Up
  4. Vérifiez les logs du serveur

    Fenêtre de terminal
    docker compose logs server | tail -20

    Vous devez voir les messages confirmant le bon démarrage :

    server-1 | Starting authentik server 2026.2.1
    server-1 | Running migrations...
    server-1 | Migrations completed
    server-1 | Starting gunicorn
  5. Vérifiez les logs du worker

    Fenêtre de terminal
    docker compose logs worker | tail -10

    Résultat attendu :

    worker-1 | Starting authentik worker 2026.2.1
    worker-1 | Worker started
  1. Ouvrez l’assistant de configuration initiale

    Rendez-vous sur : http://localhost:9000/if/flow/initial-setup/

    Ce flow n’est disponible qu’une seule fois. Si un compte administrateur existe déjà, cette URL redirige vers la page de connexion.

  2. Créez le compte administrateur

    Le flow vous demande :

    • Email : votre adresse email (elle servira d’identifiant)
    • Mot de passe : choisissez un mot de passe fort

    Validez. authentik crée l’utilisateur akadmin avec les droits d’administrateur complets.

  3. Connectez-vous à l’interface d’administration

    Après la création du compte, authentik vous redirige vers la page de connexion. Entrez l’email et le mot de passe que vous venez de définir.

    Vous arrivez sur le dashboard d’administration qui affiche :

    • Le nombre d’utilisateurs, d’applications et de providers
    • Les événements récents (connexions, modifications)
    • L’état de santé des composants
  4. Accédez au portail utilisateur

    Le portail utilisateur est accessible sur : http://localhost:9000/if/user/

    C’est la page que vos utilisateurs verront. Pour le moment, elle est vide — aucune application n’est encore configurée. Le portail se remplira au fur et à mesure que vous ajouterez des applications.

Si Docker tourne directement sur votre machine :

InterfaceURL
Setup initialhttp://localhost:9000/if/flow/initial-setup/
Administrationhttp://localhost:9000/if/admin/
Portail utilisateurhttp://localhost:9000/if/user/
APIhttp://localhost:9000/api/v3/

Quelques vérifications pour confirmer que tout est opérationnel :

Dans l’interface d’administration, cliquez sur SystemOverview. Vous devez voir :

  • Server : version 2026.2.1, statut OK
  • Worker : connecté, dernière tâche exécutée récemment
  • PostgreSQL : connecté
Fenêtre de terminal
curl -s http://localhost:9000/api/v3/root/config/ | head -20

L’API retourne la configuration publique d’authentik (version, capabilities). Si vous obtenez une réponse JSON, le serveur fonctionne correctement.

Fenêtre de terminal
docker compose logs server --since 5m | grep -i error

En fonctionnement normal, cette commande ne retourne rien. Si vous voyez des erreurs CSRF ou connection refused, vérifiez que tous les conteneurs sont démarrés.

Pour valider le flux d’authentification complet, créez un utilisateur non administrateur :

  1. Accédez à l’administration

    Dans l’interface admin (/if/admin/), allez dans DirectoryUsersCreate.

  2. Remplissez le formulaire

    • Username : testuser
    • Name : Utilisateur Test
    • Email : test@example.com
    • Is active : activé

    Cliquez Create.

  3. Définissez un mot de passe

    Sélectionnez l’utilisateur créé, cliquez sur la ligne, puis allez dans l’onglet Overview. Cliquez Set password et choisissez un mot de passe.

  4. Testez la connexion

    Ouvrez une fenêtre de navigation privée et allez sur http://localhost:9000/if/user/. Connectez-vous avec testuser et le mot de passe. Vous arrivez sur le portail utilisateur (vide pour le moment).

Si le port 9000 est déjà utilisé sur votre machine, modifiez le mapping dans docker-compose.yaml :

ports:
- "8080:9000"
- "8443:9443"

Puis redémarrez :

Fenêtre de terminal
docker compose down && docker compose up -d

Pour les flows de récupération de mot de passe et les invitations, authentik a besoin d’un serveur SMTP. Ajoutez les variables dans .env :

.env
AUTHENTIK_EMAIL__HOST=smtp.example.com
AUTHENTIK_EMAIL__PORT=587
AUTHENTIK_EMAIL__USERNAME=authentik@example.com
AUTHENTIK_EMAIL__PASSWORD=votre-mot-de-passe-smtp
AUTHENTIK_EMAIL__USE_TLS=true
AUTHENTIK_EMAIL__FROM=authentik@example.com

Puis redémarrez les conteneurs pour appliquer :

Fenêtre de terminal
docker compose down && docker compose up -d

Toutes les options d’authentik sont configurables via des variables d’environnement préfixées AUTHENTIK_. Les doubles underscores correspondent aux niveaux de la configuration YAML :

Variable d’environnementÉquivalent YAML
AUTHENTIK_LOG_LEVELlog_level
AUTHENTIK_COOKIE_DOMAINcookie_domain
AUTHENTIK_DISABLE_UPDATE_CHECKdisable_update_check
SymptômeCause probableSolution
Erreur 500 au premier accèsMigrations en coursAttendre 30-60s et rafraîchir
connection refused sur :9000Serveur pas encore prêtdocker compose ps — vérifier les statuts
postgresql: unhealthyMot de passe incorrectVérifier PG_PASS dans .env
Worker en restart loopAUTHENTIK_SECRET_KEY manquanteVérifier .env et docker-compose.yaml
Page de login sans compteSetup initial non faitAller sur /if/flow/initial-setup/
CSRF verification failedRequête depuis un domaine non reconnuAjouter AUTHENTIK_COOKIE_DOMAIN
ERR_CONNECTION_REFUSED en SSH RemotePort non forwardéForwarder le port 9000 dans VS Code

Pour diagnostiquer un problème, les logs sont votre premier réflexe :

Fenêtre de terminal
# Logs du serveur (interface + API)
docker compose logs server --since 10m
# Logs du worker (tâches de fond)
docker compose logs worker --since 10m
# Tous les logs en temps réel
docker compose logs -f

Si l’environnement est dans un état incohérent et que vous voulez repartir de zéro :

Fenêtre de terminal
docker compose down -v
docker compose up -d

Pour arrêter et supprimer l’environnement de lab :

Fenêtre de terminal
# Arrêter les conteneurs (données conservées)
docker compose down
# Supprimer aussi les volumes (données perdues)
docker compose down -v
  • authentik se déploie en 3 conteneurs : serveur, worker et PostgreSQL
  • La AUTHENTIK_SECRET_KEY est la clé maître — elle doit être stable et secrète
  • Le setup initial (/if/flow/initial-setup/) crée le compte admin — il n’est disponible qu’une seule fois
  • Le serveur et le worker utilisent la même image avec des commandes différentes
  • Le port 9000 (HTTP) suffit en lab — en production, utilisez un reverse proxy avec TLS
  • Les migrations s’exécutent automatiquement au premier démarrage — patience nécessaire
  • Toute la configuration passe par des variables d’environnement préfixées AUTHENTIK_

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn