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
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
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
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
4. Configuration d’Authentik pour Outline
-
Créer un Provider OIDC
-
Name: Outline -
Client IDetClient Secretgénérés - Endpoints :
-
Authorization:/if/authorize/ -
Token:/if/token/ -
Userinfo:/if/userinfo/
-
- Scopes :
openid email profile
-
-
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
-
- Copier le Client ID et le Client Secret dans le
.envde 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
Vérifier les logs si besoin :
docker compose logs -f outline
docker compose logs -f authentik-server
6. Connexion à Outline
- Ouvrir
https://<URL OUTLINE> - Choisir Authentik comme fournisseur de login
- Se connecter avec les identifiants configurés dans Authentik
- 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)