📍 Article principal de la série : Outline 2026 : guide pratique.
Trente minutes pour transformer un VPS vide en serveur Outline de production. Méthode validée chez plusieurs PME francophones d’Afrique de l’Ouest, avec coût total 4,51 € par mois pour 100 utilisateurs.
Prérequis
- Hetzner CX23 minimum (2 vCPU, 4 GB RAM) sous Ubuntu 22.04 / Debian 12.
- Coolify v4 installé.
- Nom de domaine DNS A :
wiki.votre-entreprise.com. - SMTP (Brevo ou Resend) pour invitations email.
- Niveau attendu : intermédiaire.
- Temps estimé : 30-45 minutes.
Pour déployer Outline (knowledge base open-source) sur Coolify et VPS Hetzner, vous avez besoin d’un VPS CX22 minimum (2 vCPU, 4 Go RAM). Coolify déjà installé et opérationnel. Un domaine avec DNS A pointant vers le VPS. Un service S3-compatible pour le stockage des fichiers (MinIO sur le même VPS, Backblaze B2, ou Cloudflare R2). Un provider OAuth (Google Workspace, Slack, Microsoft) ou OIDC (Authentik) pour l’authentification, car Outline n’a pas de login email/password local.
Étape 1 — DNS et MinIO
Créer DNS A : wiki.votre-entreprise.com → IP VPS. Vérifier dig +short wiki....
MinIO peut être déployé via Coolify aussi (Resources → MinIO). Bucket outline avec credentials notées.
Configurez le DNS A pour wiki.example.sn pointant vers l’IP du VPS Hetzner. Si vous utilisez MinIO comme stockage S3, créez aussi un sous-domaine s3.example.sn avec son propre certificat. Dans MinIO, créez un bucket outline-uploads avec accès privé. Générez une access key et secret dédiés à Outline (pas le compte admin). Documentez ces secrets dans Bitwarden ou 1Password — ils seront utilisés à l’étape 3.
Étape 2 — Service Outline dans Coolify
Resources → + New → Service → rechercher « Outline ». Coolify déploie le template officiel. Nom : outline-prod.
Dans Coolify, cliquez Add new resource puis Service puis Outline. Le template officiel est précompose et inclut Postgres et Redis nécessaires. Assignez à un projet (Knowledge ou Internal Tools). Le compose YAML est généré automatiquement avec les bonnes valeurs par défaut. Vous n’avez pas à le modifier directement — toutes les personnalisations passent par les variables d’environnement.
Étape 3 — Variables d’environnement
NODE_ENV=production
SECRET_KEY=générer-32-octets-hex (openssl rand -hex 32)
UTILS_SECRET=générer-32-octets-hex
URL=https://wiki.votre-entreprise.com
PORT=3000
DATABASE_URL=postgres://outline:password@outline-db:5432/outline
PGSSLMODE=disable
REDIS_URL=redis://outline-redis:6379
# Stockage S3-compatible
AWS_ACCESS_KEY_ID=minio-access-key
AWS_SECRET_ACCESS_KEY=minio-secret-key
AWS_REGION=us-east-1
AWS_S3_UPLOAD_BUCKET_URL=https://minio.votre-entreprise.com
AWS_S3_UPLOAD_BUCKET_NAME=outline
AWS_S3_FORCE_PATH_STYLE=true
# Email
SMTP_HOST=smtp-relay.brevo.com
SMTP_PORT=587
SMTP_USERNAME=login
SMTP_PASSWORD=clé-api
SMTP_FROM_EMAIL=wiki@votre-entreprise.com
SMTP_REPLY_EMAIL=support@votre-entreprise.com
# Authentication (start with email magic link)
EMAIL_LOGIN=true
DEPLOYMENT=production
Outline exige plusieurs variables critiques. URL avec l’URL HTTPS complète du wiki. SECRET_KEY générée via openssl rand -hex 32. UTILS_SECRET autre clé via la même commande. PGSSLMODE=disable pour la connexion Postgres locale. AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_S3_UPLOAD_BUCKET, AWS_S3_UPLOAD_BUCKET_URL pointant vers votre MinIO ou B2. SMTP_HOST, SMTP_PORT, SMTP_USERNAME, SMTP_PASSWORD pour les notifications email. Sans email valide, les invitations ne partent pas.
Étape 4 — Domaine HTTPS
Onglet Domains : https://wiki.votre-entreprise.com. Force HTTPS ON.
Dans Coolify, ouvrez l’onglet Domains du service Outline. Ajoutez wiki.example.sn et cochez Force HTTPS Redirect. Coolify utilise Traefik pour générer le certificat Let’s Encrypt automatiquement (challenge HTTP-01). Vérifiez après 1-2 minutes que https://wiki.example.sn répond. Si erreur 525 ou 502, redémarrez le service Outline qui parfois démarre avant que le certificat ne soit prêt.
Étape 5 — Lancer Deploy
Coolify pull outlinewiki/outline:latest, postgres:16, redis:7. Comptez 3-4 minutes.
Cliquez Deploy. Outline démarre en 3-5 minutes : Postgres s’initialise, Redis démarre, l’application web se lance. Suivez les logs avec l’onglet Logs Coolify. Les premiers logs montrent les migrations Postgres qui appliquent le schéma. Erreur typique : DATABASE_URL mal formée — vérifiez le pattern postgres://user:pass@postgres:5432/outline. Le service est prêt quand vous voyez ‘Server listening on port 3000’.
Étape 6 — Premier compte
Ouvrir https://wiki.votre-entreprise.com. Page de signup : saisir email admin. Outline envoie un magic link, cliquer pour valider. Premier compte = admin du workspace.
Outline n’a pas d’admin local prédéfini. Le PREMIER utilisateur qui se connecte via OAuth (Google, Slack, OIDC) devient automatiquement administrateur de l’instance. Configurez d’abord un provider OAuth (étape 9) avant de tenter la connexion. Si vous testez sans OAuth, utilisez le mode développement avec FORCE_HTTPS=false et EMAIL_DOMAINS_ALLOWED qui permet la création par email magique sans OAuth tiers.
Étape 7 — Créer la première collection
Sidebar → New Collection → nom (ex: « Engineering »), description, icône, couleur. Permissions : Members (équipe entière), Restricted (membres choisis). Créer plusieurs collections : Engineering, Marketing, Onboarding, Legal.
Une collection est l’équivalent d’un dossier ou d’un livre dans Outline. Créez-la depuis le sidebar gauche avec Add collection. Donnez un nom (Documentation produit, Onboarding, Process internes). Choisissez l’icône et la couleur. Définissez le mode d’accès : private (vous seul), team (toute l’organisation), or specific groups. Cette première collection sert de modèle — créez ensuite des sub-documents arborescents en glisser-déposer.
Étape 8 — Inviter les membres
Settings → Members → Invite people. Saisir emails (multiple OK), choisir rôle :
- Admin : full power.
- Member : créer/éditer dans collections accessibles.
- Viewer : lecture seule.
Settings → People → Invite people. Saisissez les emails séparés par des virgules. Outline envoie un email d’invitation avec un lien magique de 7 jours. L’invité clique, choisit son provider OAuth, et accède à l’organisation. Pour limiter à un domaine email (members@example.sn uniquement), configurez la variable EMAIL_DOMAINS_ALLOWED. Pour les équipes distribuées entre Dakar et Cotonou, le rôle Member donne accès lecture/écriture sur les collections autorisées, le rôle Admin gère les paramètres.
Étape 9 — Configurer SSO (optionnel mais recommandé)
Settings → Authentication → OIDC. Voir tutoriel SSO Authentik.
Outline supporte nativement Google Workspace, Slack, Microsoft, et OIDC générique (Authentik, Keycloak, Auth0). Pour une équipe qui a déjà un Authentik en place, configurez OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI, OIDC_USERINFO_URI dans Coolify. Au prochain deploy, Outline expose le bouton Sign in with Authentik en plus des providers cloud. Cette intégration unifie l’identité sur toute votre stack interne (Outline, BookStack, Mattermost partagent le même IdP).
Étape 10 — Configurer les sauvegardes
# Cron quotidien /srv/scripts/outline-backup.sh
docker exec outline-db pg_dump -U outline outline | gzip > /tmp/outline-pg.gz
mc mirror minio/outline /backup/outline-files/
restic backup /tmp/outline-pg.gz /backup/outline-files
rm -f /tmp/outline-pg.gz
Outline stocke deux types de données critiques : Postgres (documents, structures, utilisateurs, permissions) et S3/MinIO (fichiers uploadés, images). Sauvegardez quotidiennement les deux. Pour Postgres, lancez un cron qui exécute pg_dump dans un sidecar container. Pour S3, mc mirror du bucket vers un second S3 ou un Backblaze B2. Stockez les sauvegardes hors du VPS principal (en cas de panne disque ou compromission). Testez la restauration trimestriellement sur un VPS de staging.
Erreurs fréquentes
| Erreur | Cause | Solution |
|---|---|---|
| Upload images échoue | S3 endpoint mal configuré | Vérifier AWS_S3_FORCE_PATH_STYLE=true pour MinIO |
| Email magic link non reçu | SMTP non testé | Logs : docker logs outline |
| WebSocket déphasé | Caddy ne forward pas | Activer encode et reverse_proxy WS |
| Database migration loop | Pgsql v15 vs 16 | Forcer postgres:16 dans compose |
| Trop de RAM | Indexation full-text | Allouer 2 Go minimum |
| SECRET_KEY trop court | < 32 octets | Régénérer avec openssl rand -hex 32 |
Détails pratiques pour le marché sénégalais
Trois précisions. SMTP fiable : Brevo (300 emails/jour gratuit) ou Resend pour magic links instantanés. Mailgun fonctionne aussi mais plus cher. Stockage MinIO local : éviter S3 AWS pour souveraineté. MinIO sur même VPS Coolify ou Hetzner Storage Box S3-compatible. Backups : 6 heures critique car wiki = mémoire institutionnelle. Test restauration mensuel obligatoire.
Tutoriels frères
Outline forme un trio cohérent avec d’autres outils self-hosted. Mattermost pour la messagerie d’équipe (alternative Slack). Authentik pour l’auth OIDC unifiée sur tous les outils. MinIO pour le stockage S3-compatible commun. Pour les sauvegardes croisées, Restic ou Borg avec Backblaze B2 protègent l’ensemble. Cette stack maîtrisée coûte 30-60 USD/mois en VPS contre 200-500 USD/mois pour les équivalents SaaS, avec le bonus de la souveraineté des données.
FAQ
Capacité CX23 ? 100 utilisateurs + 10k docs confortablement.
Maintenance ? 30 minutes par mois : update Docker image + vérification backups.
Multi-workspace ? Pas dans CE. Une instance = un workspace.
API ? REST documentée. Token via Settings → API.
Mises à jour ? Coolify : Pull image + Redeploy. Migration auto BD.
Sur un angle proche
- 🔝 Retour au guide général : guide pratique Outline 2026
- Documentation : getoutline.com/developers
Hébergement recommandé pour les lecteurs
Si vous n’avez pas encore d’hébergeur, Hostinger est celui que nous utilisons et que nous recommandons après plusieurs années d’usage.
Lien d affiliation. Si vous achetez via ce lien, le blog reçoit une petite commission sans surcoût pour vous.
Étape 1 : Provisionner un VPS européen adapté à Outline
Outline VPN consomme peu de CPU mais beaucoup de bande passante sortante. Choisissez un VPS Hetzner CX22 à 4,51 EUR par mois, soit environ 2 957 FCFA, avec 20 To de trafic inclus. Les latences depuis Dakar vers Falkenstein restent sous 95 ms grâce au câble sous-marin 2Africa.
Évitez les VPS situés aux États-Unis : la latence dépasse 180 ms et certains services africains de streaming bloquent les IP nord-américaines. Falkenstein, Helsinki et Nuremberg offrent le meilleur compromis pour l’Afrique de l’Ouest francophone.
Étape 2 : Installer Coolify v4 sur Ubuntu 24.04 LTS
Coolify v4 simplifie le déploiement de Outline en quatre clics au lieu de la procédure manuelle Docker historique. Connectez-vous en SSH au VPS fraîchement provisionné puis lancez l’installateur officiel.
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
L’installateur télécharge environ 1,2 Go d’images Docker et configure Traefik comme reverse proxy. Comptez douze minutes sur un lien Hetzner standard. À la fin, l’interface répond sur http://votre-ip:8000.
Étape 3 : Pointer un sous-domaine vers le VPS
Avant d’installer Outline, créez un enregistrement DNS A qui pointe vpn.votre-domaine.com vers l’IPv4 du VPS. Le certificat Let’s Encrypt généré ensuite par Coolify exige un nom de domaine valide.
Patientez cinq minutes pour la propagation DNS puis vérifiez avec dig vpn.votre-domaine.com. Tant que la commande ne renvoie pas la bonne IP, ne lancez pas la suite : la génération du certificat échouerait silencieusement.
Étape 4 : Déployer Outline Server depuis le marketplace Coolify
Dans l’interface Coolify, cliquez sur Resources puis New Resource puis One-click services. Cherchez Outline dans la liste, sélectionnez Outline Shadowbox v1.10 et choisissez le sous-domaine vpn.votre-domaine.com.
Coolify provisionne deux conteneurs : shadowbox qui chiffre le trafic et watchtower qui gère les mises à jour automatiques. Le déploiement prend environ trois minutes. Vous obtenez à la fin une chaîne d’API JSON longue d’une centaine de caractères.
Étape 5 : Récupérer la clé d’accès dans Outline Manager
Téléchargez Outline Manager depuis getoutline.org sur votre poste de travail. Au premier lancement, choisissez Set up Outline anywhere puis collez la chaîne JSON obtenue à l’étape précédente. L’application valide la connexion en deux secondes.
Outline Manager affiche alors un tableau de bord avec la consommation de bande passante en temps réel et la liste des clés générées. Créez une première clé nommée test puis téléchargez Outline Client sur votre téléphone pour vérifier que la connexion fonctionne avant de distribuer aux utilisateurs.
Étape 6 : Sécuriser le port d’administration avec ufw
Outline ouvre par défaut un port aléatoire entre 1024 et 65535 pour son API d’administration. Restreignez-le à votre IP fixe pour éviter qu’un attaquant ne tente de bruteforcer la chaîne d’accès.
sudo ufw allow from 41.82.X.Y to any port 8000 proto tcp
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp
sudo ufw enable
Vérifiez ensuite avec sudo ufw status numbered que seuls les ports 80, 443 et 8000 (restreint) sont ouverts. Le port aléatoire d’Outline reste accessible publiquement car les clients utilisateurs y accèdent.
Étape 7 : Distribuer les clés d’accès aux utilisateurs
Pour chaque utilisateur, créez une clé nommée prénom-appareil dans Outline Manager. La clé prend la forme d’une URL ss:// que l’utilisateur colle dans Outline Client sur Android, iOS ou desktop. La connexion s’établit en moins de deux secondes.
Communiquez la clé via Signal ou WhatsApp avec disparition automatique. Ne stockez jamais ces clés en clair dans un Notion ou un Slack : un dump du document compromettrait tous les utilisateurs simultanément.
Étape 8 : Surveiller la consommation de bande passante
Le tableau de bord Outline Manager affiche la consommation par clé sur trente jours. Au-delà de 200 Go par clé et par mois, suspectez un partage non autorisé ou un appareil compromis qui exfiltre des données.
Sur Hetzner CX22 à 20 To inclus, vous pouvez héberger confortablement quinze utilisateurs intensifs. Au-delà, basculez vers CX32 à 7,55 EUR mensuel ou CCX13 si vous avez besoin de vCPU dédiés pour de la visioconférence intensive.
Étape 9 : Sauvegarder la configuration Outline chaque semaine
La configuration Outline tient dans un seul fichier shadowbox_server_config.json stocké sous /opt/outline/persisted-state/. Programmez une copie hebdomadaire chiffrée vers un bucket Backblaze B2.
0 3 * * 0 tar czf - /opt/outline/persisted-state/ | age -r $AGE_PUBKEY | rclone rcat b2:vpn-backup/outline-$(date +%Y%m%d).tar.gz.age
En cas de perte du VPS, vous restaurez Outline en quinze minutes sur un nouveau serveur sans avoir à redistribuer toutes les clés aux utilisateurs. C’est le scénario que vit en moyenne une PME tous les trois ans suite à une suspension d’hébergement ou une migration.
Étape 10 : Documenter le runbook pour la relève
Rédigez un document d’une page qui décrit l’URL Coolify, l’identifiant Hetzner, l’emplacement de la clé age et la procédure de restauration. Stockez ce document dans BookStack ou Outline doc, jamais dans le VPN lui-même.
Pour creuser ce sujet, parcourez les guides ITSkillsCenter ou contactez-nous via la page contact pour un audit personnalisé.
Étape 11 : Activer le monitoring uptime depuis l’Afrique de l’Ouest
Un VPN qui tombe pendant deux heures et que personne ne détecte coûte la confiance des utilisateurs. Configurez Uptime Kuma sur un second petit VPS en Afrique avec un check TCP toutes les soixante secondes vers le port Outline et une alerte Telegram en cas de cinq échecs consécutifs.
docker run -d --name uptime-kuma -p 3001:3001 \
-v uptime-kuma:/app/data \
louislam/uptime-kuma:1
Hébergez Uptime Kuma sur un VPS Contabo Abidjan ou Scaleway Paris distinct du VPS Outline. Si les deux étaient sur la même machine, une panne serveur masquerait l’incident. La règle d’or du monitoring : jamais sur la machine surveillée.
Étape 12 : Mettre à jour Outline et Coolify chaque mois
Coolify reçoit en moyenne deux mises à jour par mois et Outline Shadowbox une mise à jour trimestrielle. Watchtower s’occupe d’Outline automatiquement, mais Coolify nécessite un clic manuel depuis Settings puis Update.
Bloquez trente minutes le premier mardi de chaque mois pour vérifier les changelogs et appliquer les mises à jour. Une instance Coolify non patchée pendant six mois accumule des CVE qui finissent par compromettre tout le serveur, y compris les conteneurs Outline.
Étape 13 : Choisir entre Outline et WireGuard pour vos cas d’usage
Outline excelle pour le contournement de censure DPI grâce à son chiffrement Shadowsocks indistinguable de TLS. WireGuard offre des performances brutes supérieures de 30 % mais signe sa présence sur le réseau via des paquets UDP reconnaissables.
Pour un journaliste à Conakry ou un chercheur à Cotonou, Outline reste le choix par défaut. Pour un employé en télétravail depuis Saint-Louis qui veut accéder au SI interne sans contrainte de censure, WireGuard sur le même Coolify reste plus rapide et plus économe en bande passante.
Étape 14 : Diagnostiquer une connexion lente depuis Dakar
Si vos utilisateurs se plaignent de débits inférieurs à 5 Mbps alors que leur fibre Sonatel donne 50 Mbps, lancez un test mtr depuis le client vers le VPS Hetzner. Repérez le saut où la latence explose : c’est souvent au niveau du peering Marseille ou Francfort.
mtr -rwzc 100 vpn.votre-domaine.com
Un saut avec plus de 5 % de perte de paquets ou plus de 200 ms de latence indique une congestion. Changez de datacenter Hetzner (passez de Falkenstein à Helsinki) ou testez un VPS OVH Roubaix qui emprunte parfois un meilleur peering vers Dakar.
Étape 15 : Préparer un plan de bascule en cas de blocage du port
Certains FAI africains commencent à bloquer dynamiquement les ports Outline détectés par leurs sondes DPI. Préparez à l’avance une seconde clé écoutant sur le port 443 TCP, indistinguable d’un trafic HTTPS classique.
Documentez la procédure de bascule : un script qui modifie shadowbox_server_config.json puis redémarre le conteneur. La bascule prend quinze secondes et permet à vos utilisateurs de continuer à travailler pendant qu’une nouvelle adresse de secours est distribuée par canal sécurisé.
Étape 16 : Industrialiser le provisioning avec Terraform
Si vous gérez plusieurs déploiements Outline pour différents clients ou équipes, scriptez la création du VPS Hetzner avec Terraform. Vous reproduisez l’environnement complet en moins de quatre minutes via une simple commande terraform apply, ce qui élimine les erreurs de configuration manuelle.
resource "hcloud_server" "outline" {
name = "outline-prod"
image = "ubuntu-24.04"
server_type = "cx22"
location = "fsn1"
user_data = file("cloud-init-coolify.yml")
}
Versionnez le code Terraform dans un dépôt Gitea privé hébergé sur le même VPS Coolify. Vous obtenez un infrastructure-as-code complet, auditable et reproductible, indispensable dès que plus d’une personne intervient sur l’infrastructure VPN.
Étape 17 : Auditer trimestriellement la conformité de l’usage
Bloquez deux heures chaque trimestre pour passer en revue la liste des clés actives, désactiver celles des collaborateurs partis et vérifier que la consommation de chacun reste cohérente avec son poste. Conservez la trace de cet audit dans un journal signé daté.
Cet audit régulier vous protège juridiquement : en cas de mésusage par un tiers, vous démontrez avoir mis en place un contrôle proportionné. C’est un argument déterminant face à un régulateur ou un employeur amené à enquêter.