DEV Community

Remy Jacquand
Remy Jacquand

Posted on

Mise en place d Outline et Authentik

Dans ce tutoriel, nous allons montrer comment déployer Outline, le wiki collaboratif, avec Authentik comme fournisseur d’authentification OpenID Connect (OIDC), le tout orchestré via Docker Compose. L’objectif est d’avoir Outline accessible sur https://outline.multiplaie.work et sécurisé avec un login centralisé via Authentik.


1. Prérequis

  • Serveur Linux avec Docker et Docker Compose
  • Nom de domaine géré via Cloudflare (multiplaie.work)
  • Certificat SSL (optionnel si HTTPS est géré par un reverse proxy)
  • Connaissance de base de Docker et Authentik

2. Structure des services Docker

2.1 Outline

docker-compose.yml pour Outline :

services:
  outline:
    image: docker.getoutline.com/outlinewiki/outline:latest
    container_name: outline
    env_file: ./docker.env
    networks:
      - appflowy-proxy
    volumes:
      - storage-data:/var/lib/outline/data
    depends_on:
      - postgres
      - redis

  redis:
    image: redis:7
    container_name: outline-redis
    networks:
      - appflowy-proxy

  postgres:
    image: postgres:16
    container_name: outline-postgres
    networks:
      - appflowy-proxy
    environment:
      POSTGRES_USER: outline
      POSTGRES_PASSWORD: outline
      POSTGRES_DB: outline
    volumes:
      - database-data:/var/lib/postgresql/data

volumes:
  storage-data:
  database-data:

networks:
  appflowy-proxy:
    external: true
Enter fullscreen mode Exit fullscreen mode

2.2 Authentik

docker-compose.yml pour Authentik :

version: "3.8"

services:
  postgresql:
    image: postgres:16-alpine
    container_name: authentik-postgres
    env_file:
      - .env
    environment:
      POSTGRES_DB: ${PG_DB:-authentik}
      POSTGRES_USER: ${PG_USER:-authentik}
      POSTGRES_PASSWORD: ${PG_PASS:?database password required}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
      interval: 30s
      retries: 5
      start_period: 20s
      timeout: 5s
    restart: unless-stopped
    volumes:
      - database:/var/lib/postgresql/data
    networks:
      - authentik-proxy

  server:
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.12.3}
    container_name: authentik-server
    env_file:
      - .env
    depends_on:
      postgresql:
        condition: service_healthy
    environment:
      AUTHENTIK_POSTGRESQL__HOST: postgresql
      AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
      AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
      AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
      AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required}
    ports:
      - ${COMPOSE_PORT_HTTP:-9000}:9000
      - ${COMPOSE_PORT_HTTPS:-9443}:9443
    restart: unless-stopped
    volumes:
      - ./data:/data
      - ./custom-templates:/templates
    networks:
      - authentik-proxy

  worker:
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.12.3}
    container_name: authentik-worker
    env_file:
      - .env
    command: worker
    user: root
    depends_on:
      postgresql:
        condition: service_healthy
    environment:
      AUTHENTIK_POSTGRESQL__HOST: postgresql
      AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
      AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
      AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
      AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required}
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/data
      - ./certs:/certs
      - ./custom-templates:/templates
    networks:
      - authentik-proxy

volumes:
  database:
    driver: local

networks:
  authentik-proxy:
    external: true
Enter fullscreen mode Exit fullscreen mode

3. Configuration des fichiers .env

3.1 Outline

NODE_ENV=production
URL=<URL EXTERNE>
PORT=3000
WEB_CONCURRENCY=1
SECRET_KEY=<clé aléatoire>
UTILS_SECRET=<clé aléatoire>

DATABASE_URL=postgres://outline:outline@postgres:5432/outline
PGSSLMODE=disable

REDIS_URL=redis://outline-redis:6379

FILE_STORAGE=local
FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data

OIDC_CLIENT_ID=<Client ID Authentik>
OIDC_CLIENT_SECRET=<Client Secret Authentik>
OIDC_AUTH_URI=https://<URL vers Authentik>/application/o/authorize/
OIDC_TOKEN_URI=https://<URL vers Authentik>/application/o/token/
OIDC_USERINFO_URI=https://<URL vers Authentik>/application/o/userinfo/
OIDC_LOGOUT_URI=https://<URL vers Authentik>/application/o/outline/end-session/
OIDC_USERNAME_CLAIM=preferred_username
OIDC_DISPLAY_NAME=Authentik
OIDC_SCOPES=openid email profile
Enter fullscreen mode Exit fullscreen mode

3.2 Authentik

PG_PASS=<mot de passe PostgreSQL>
AUTHENTIK_SECRET_KEY=<clé aléatoire>

AUTHENTIK_EMAIL__HOST=smtp.gmail.com
AUTHENTIK_EMAIL__PORT=465
AUTHENTIK_EMAIL__USERNAME=<USERNAME>
AUTHENTIK_EMAIL__PASSWORD=<mot de passe Gmail>
AUTHENTIK_EMAIL__USE_SSL=true
AUTHENTIK_EMAIL__FROM="auth@URL"

AUTHENTIK_ERROR_REPORTING__ENABLED=true
Enter fullscreen mode Exit fullscreen mode

4. Configuration d’Authentik pour Outline

  1. Créer un Provider OIDC
    • Name : Outline
    • Client ID et Client Secret générés
    • Endpoints :
      • Authorization : /if/authorize/
      • Token : /if/token/
      • Userinfo : /if/userinfo/
    • Scopes : openid email profile
  2. Créer l’application OIDC
    • Redirect URI : https://<URL OUTLINE>/auth/oidc/callback
    • Post Logout Redirect URI : <URL OUTLINE>
    • Associer au Provider Outline créé précédemment
  3. Copier le Client ID et le Client Secret dans le .env de Outline.

5. Démarrage des services

# Démarrer Authentik
docker compose -f docker-compose.authentik.yml up -d

# Démarrer Outline
docker compose -f docker-compose.outline.yml up -d
Enter fullscreen mode Exit fullscreen mode

Vérifier les logs si besoin :

docker compose logs -f outline
docker compose logs -f authentik-server
Enter fullscreen mode Exit fullscreen mode

6. Connexion à Outline

  1. Ouvrir https://<URL OUTLINE>
  2. Choisir Authentik comme fournisseur de login
  3. Se connecter avec les identifiants configurés dans Authentik
  4. L’accès est maintenant sécurisé via OpenID Connect

7. Conclusion

Cette configuration permet d’avoir :

  • Un Outline fonctionnel et accessible sur un domaine public
  • Authentification centralisée via Authentik (OIDC)
  • Gestion des utilisateurs et des permissions via Authentik
  • Stockage sécurisé des données via PostgreSQL et Redis

Tout est orchestré avec Docker Compose, ce qui facilite la maintenance et les mises à jour.

Top comments (0)