ITSkillsCenter
Blog

AppFlowy self-hosted : alternative Notion open-source — déploiement Docker 2026

16 min de lecture

AppFlowy self-hosted : alternative Notion open-source — déploiement Docker 2026

📍 Article principal du cluster : Productivité PME en self-hosted : la stack open-source 2026

Cet article fait partie du cluster « Productivité self-hosted ». Pour la vue d’ensemble de l’architecture complète (Penpot, Cal.com, Affine, Excalidraw, AppFlowy), commencez par lire le pilier avant de suivre ce tutoriel.

Introduction

Vous gérez une PME francophone à Dakar, Abidjan ou Cotonou et vous payez Notion en dollars chaque mois pour vos équipes. Le tarif d’entrée à 8 USD par utilisateur paraît raisonnable jusqu’à ce que vous comptiez : pour quinze collaborateurs sur le plan Business, vous brûlez 22 USD × 15 = 330 USD par mois, soit près de 200 000 FCFA. À l’échelle d’une année, cela représente près de 2,4 millions de FCFA versés à un service hébergé hors d’Afrique, dont vous ne contrôlez ni la localisation des données, ni la disponibilité, ni les conditions tarifaires futures. Pire, en cas de litige commercial avec Notion ou de blocage géographique soudain, vous perdez l’accès à toute votre base de connaissances.

AppFlowy est l’alternative open-source la plus aboutie à Notion en 2026. Construit en Rust pour le backend et Flutter pour le client desktop, le projet a passé 50 000 étoiles sur GitHub et propose désormais une version serveur stable, AppFlowy Cloud, qui synchronise les espaces de travail entre clients et autorise la collaboration multi-utilisateurs. Ce guide vous accompagne pas à pas dans le déploiement d’AppFlowy Cloud sur un VPS Hetzner avec Docker Compose, depuis la création du serveur jusqu’à la mise en production sécurisée derrière HTTPS, en passant par la configuration de l’authentification, du stockage objet et de la sauvegarde automatique. Comptez deux à trois heures pour une installation complète si c’est votre première expérience avec Docker.

Prérequis

  • VPS : Hetzner Cloud CX31 (4 vCPU, 8 Go RAM, 80 Go SSD) — environ 7,90 €/mois soit ~5 200 FCFA
  • OS : Ubuntu 24.04 LTS (image officielle Hetzner)
  • Nom de domaine : sous-domaine prêt à pointer vers l’IP du VPS (ex. appflowy.votre-pme.sn)
  • Niveau requis : intermédiaire (à l’aise avec SSH, ligne de commande, Docker basique)
  • Temps estimé : 2 à 3 heures pour une première installation complète
  • Compte Hetzner ou tout autre fournisseur VPS — Scaleway, OVH, Contabo conviennent aussi

1. AppFlowy vs Notion : pourquoi cette alternative pour une PME ouest-africaine

Avant d’investir trois heures de votre temps dans une installation, il est essentiel de comprendre ce que vous gagnez réellement et ce que vous abandonnez en quittant Notion pour AppFlowy. La décision n’est pas uniquement financière : elle touche à la souveraineté, à la résilience opérationnelle et à la capacité de votre équipe à travailler dans des conditions de connexion imparfaites — un sujet qui parle directement aux PME d’Afrique de l’Ouest.

Critère Notion (Business) AppFlowy self-hosted
Coût mensuel (15 utilisateurs) ~200 000 FCFA ~5 200 FCFA (VPS CX31)
Localisation des données États-Unis (AWS) Allemagne ou Helsinki (Hetzner)
Mode hors-ligne Limité (lecture seule) Complet sur client desktop
Contrôle du chiffrement Aucun (clés Notion) Total (vos clés, votre VPS)
Personnalisation interface Impossible Code source modifiable (Flutter)
Limite par page Pas de limite stricte Pas de limite stricte
Templates communautaires Très nombreux Croissants mais moins fournis
Intégrations tierces Très riches (Slack, Zapier…) API REST + n8n possible

Le différentiel financier sur trois ans dépasse les sept millions de FCFA pour quinze utilisateurs — soit largement de quoi payer une journée d’administration mensuelle pour maintenir l’installation. Plus important encore, en cas de coupure internationale (incident câble sous-marin ACE ou WACS, déjà arrivé en 2020 et 2024), votre VPS européen reste joignable depuis l’Afrique via les nœuds européens, et vos clients desktop continuent de fonctionner en mode hors-ligne avec synchronisation différée.

2. Architecture technique d’AppFlowy Cloud

AppFlowy Cloud n’est pas un monolithe : c’est une stack composée de plusieurs services Docker qui communiquent entre eux. Comprendre cette architecture vous évitera des heures de diagnostic plus tard, quand un service refusera de démarrer ou qu’une fonctionnalité ne répondra plus.

  • appflowy_cloud : le serveur principal, écrit en Rust, expose l’API REST consommée par les clients Flutter et le navigateur. C’est lui qui orchestre l’authentification, le stockage de documents, et les flux temps-réel.
  • gotrue : service d’authentification dérivé de Supabase, gère les comptes utilisateurs, la confirmation par e-mail, la récupération de mot de passe et l’OAuth (Google, GitHub).
  • postgres : la base de données relationnelle centrale (PostgreSQL 16). Stocke les utilisateurs, les permissions, les métadonnées des documents et les espaces de travail.
  • minio : stockage objet S3-compatible pour les fichiers téléversés (images, PDF, pièces jointes). Vous pouvez le remplacer par un bucket S3 réel ou Backblaze B2 si vous voulez externaliser.
  • redis : cache mémoire et file de messages pour les opérations temps-réel (présence, curseurs collaboratifs).
  • nginx : reverse proxy frontal, gère le TLS et route les requêtes vers les bons services internes.

Cette architecture vous donne la flexibilité d’externaliser plus tard les composants critiques. En production avancée, beaucoup d’équipes déplacent PostgreSQL vers un service managé (Hetzner Postgres ou Neon) et MinIO vers Backblaze B2 pour ne garder sur le VPS que la couche applicative — réduisant ainsi la surface de risque en cas de panne disque.

Étape 1 — Provisionner le VPS Hetzner

Cette première étape pose les fondations. Le choix du VPS détermine la fluidité de l’expérience utilisateur : trop petit, AppFlowy souffrira dès une dizaine d’utilisateurs concurrents ; trop gros, vous payez pour de la capacité inutilisée. Pour une PME de cinq à vingt collaborateurs, le CX31 offre le meilleur compromis. Si vous démarrez seul, le CX21 (2 vCPU, 4 Go) suffit pour les premières semaines de tests, quitte à monter en gamme par la suite — Hetzner permet le redimensionnement à chaud.

# Depuis la console Hetzner Cloud, créez un serveur :
# - Localisation : Falkenstein (FSN1) ou Helsinki (HEL1)
# - Image : Ubuntu 24.04
# - Type : CX31 (4 vCPU, 8 Go RAM)
# - SSH key : votre clé publique chargée au préalable

# Une fois créé, connectez-vous :
ssh root@<IP_DU_VPS>

# Mise à jour initiale et utilisateur non-root
apt update && apt upgrade -y
adduser appflowy
usermod -aG sudo appflowy
rsync --archive --chown=appflowy:appflowy ~/.ssh /home/appflowy

Une fois ces commandes exécutées, vous pouvez vous reconnecter en tant qu’utilisateur appflowy sans passer par root, ce qui est la bonne pratique de sécurité. Vérifiez que la connexion fonctionne dans une seconde session avant de fermer la première : si vous perdez l’accès root sans avoir confirmé l’accès non-root, vous devrez passer par la console de secours Hetzner pour récupérer le serveur.

Étape 2 — Installer Docker Engine et Docker Compose v2

AppFlowy Cloud s’orchestre entièrement avec Docker Compose. Sur Ubuntu 24.04, la version disponible dans les dépôts officiels est suffisante mais reste légèrement en retard sur les dernières fonctionnalités. Pour disposer de la dernière version stable de Docker Engine et du plugin Compose v2 (la version moderne, sans tiret), nous ajoutons le dépôt officiel Docker — c’est le chemin recommandé par la documentation Docker en 2026.

# Installer les dépendances et la clé GPG officielle Docker
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Ajouter le dépôt
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu $(. /etc/os-release; echo $VERSION_CODENAME) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Installer Docker Engine et le plugin Compose
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Ajouter votre utilisateur au groupe docker (déconnexion/reconnexion ensuite)
sudo usermod -aG docker $USER

# Vérifier que Compose v2 est bien installé
docker compose version

La dernière commande doit retourner quelque chose comme Docker Compose version v2.30.x. Notez bien la syntaxe docker compose en deux mots, sans tiret : c’est la version moderne, intégrée comme plugin Docker. L’ancienne docker-compose avec tiret (Compose v1, en Python) est dépréciée depuis 2023 et ne reçoit plus de mises à jour — évitez-la dans tout nouveau projet. Si la version retournée est inférieure à 2.20, votre dépôt n’est pas correctement configuré : reprenez les commandes du dessus.

Étape 3 — Cloner et configurer AppFlowy Cloud

Le projet AppFlowy Cloud fournit un dépôt GitHub officiel avec un docker-compose.yml prêt à l’emploi. Plutôt que d’écrire votre propre stack Compose, vous partez du fichier maintenu par l’équipe AppFlowy et vous l’adaptez à vos besoins via les variables d’environnement. C’est l’approche la plus saine : à chaque mise à jour upstream, vous bénéficiez des correctifs de sécurité et des nouvelles fonctionnalités sans réécrire votre infrastructure.

# Se placer dans /opt et cloner le dépôt officiel
cd /opt
sudo git clone https://github.com/AppFlowy-IO/AppFlowy-Cloud.git
sudo chown -R $USER:$USER AppFlowy-Cloud
cd AppFlowy-Cloud

# Copier le fichier d'environnement modèle
cp deploy.env .env

# Éditer .env avec votre éditeur préféré
nano .env

Le fichier .env contient une cinquantaine de variables. Concentrez-vous d’abord sur les essentielles : FQDN (votre nom de domaine complet, par exemple appflowy.votre-pme.sn), SCHEME (mettez https), POSTGRES_PASSWORD (générez un mot de passe fort de 32 caractères avec openssl rand -base64 32), GOTRUE_JWT_SECRET (au moins 32 caractères aléatoires), et GOTRUE_ADMIN_EMAIL / GOTRUE_ADMIN_PASSWORD pour le premier compte administrateur. Ne laissez aucun mot de passe par défaut : le fichier deploy.env contient des exemples qui sont publiquement connus et représentent un risque de compromission immédiat dès la mise en ligne.

Étape 4 — Configurer Nginx et obtenir le certificat TLS

AppFlowy Cloud n’expose pas directement HTTPS : c’est Nginx qui s’en charge en frontal. Le dépôt officiel inclut une configuration Nginx prête à l’emploi dans nginx/nginx.conf. Avant de lancer la stack, il faut obtenir un certificat TLS pour votre domaine. Nous utilisons Certbot avec Let’s Encrypt, qui est gratuit, automatisé, et parfaitement adapté aux VPS individuels.

# Installer Certbot
sudo apt install -y certbot

# Arrêter temporairement les services qui pourraient occuper le port 80
sudo systemctl stop nginx 2>/dev/null || true

# Obtenir le certificat en mode standalone (Certbot lance son propre serveur HTTP)
sudo certbot certonly --standalone \
  -d appflowy.votre-pme.sn \
  --email admin@votre-pme.sn \
  --agree-tos --no-eff-email

# Les certificats sont écrits dans /etc/letsencrypt/live/appflowy.votre-pme.sn/
# Il faut les rendre accessibles au conteneur nginx :
sudo mkdir -p /opt/AppFlowy-Cloud/nginx/ssl
sudo cp /etc/letsencrypt/live/appflowy.votre-pme.sn/fullchain.pem \
        /opt/AppFlowy-Cloud/nginx/ssl/
sudo cp /etc/letsencrypt/live/appflowy.votre-pme.sn/privkey.pem \
        /opt/AppFlowy-Cloud/nginx/ssl/

À ce stade, vous disposez d’un certificat valide quatre-vingt-dix jours. Pour automatiser le renouvellement, ajoutez une tâche cron qui exécute certbot renew chaque semaine et redémarre le conteneur nginx en cas de succès. La documentation Let’s Encrypt recommande deux tentatives par jour pour absorber un éventuel échec ponctuel : 0 3,15 * * * certbot renew --quiet --post-hook "docker compose -f /opt/AppFlowy-Cloud/docker-compose.yml restart nginx" dans la crontab root fait parfaitement l’affaire.

Étape 5 — Lancer la stack et vérifier le démarrage

Tous les morceaux sont en place : Docker installé, dépôt cloné, variables configurées, certificat TLS obtenu. Le moment du grand lancement est arrivé. La première initialisation de PostgreSQL prend une minute environ, et le téléchargement des images Docker (compter 3 Go au total) dépend de votre bande passante VPS. Sur un serveur Hetzner européen, attendez-vous à 5 à 10 minutes pour la première mise en route complète.

# Démarrer la stack en arrière-plan
docker compose up -d

# Suivre les logs pour vérifier que tout démarre proprement
docker compose logs -f --tail=50

# Une fois que les logs se stabilisent (plus d'erreurs récurrentes),
# vérifier l'état de chaque service
docker compose ps

# Tester la santé du serveur AppFlowy Cloud
curl -k https://appflowy.votre-pme.sn/api/server/info

Si la dernière commande renvoie un JSON contenant la version du serveur et un statut ok, votre installation est opérationnelle. En cas d’erreur 502 Bad Gateway, c’est généralement que le conteneur appflowy_cloud n’a pas terminé son démarrage — patientez 30 secondes supplémentaires et réessayez. Si l’erreur persiste, inspectez les logs spécifiques : docker compose logs appflowy_cloud --tail=100 révèle généralement la cause (variable d’environnement manquante, base de données inaccessible, port déjà occupé).

Étape 6 — Première connexion et création des espaces de travail

Ouvrez un navigateur et rendez-vous sur https://appflowy.votre-pme.sn. Vous arrivez sur l’interface web d’AppFlowy. Connectez-vous avec le compte administrateur défini dans .env, puis créez immédiatement un second compte avec une adresse différente : c’est votre filet de sécurité en cas de perte du mot de passe administrateur. AppFlowy permet de structurer le travail en espaces (workspaces), et chaque utilisateur peut appartenir à plusieurs espaces avec des rôles différents.

Pour les clients desktop (Windows, macOS, Linux), téléchargez la dernière version sur appflowy.io/download. À la première ouverture, l’application demande l’URL de votre serveur — entrez https://appflowy.votre-pme.sn. Le mode hors-ligne est ensuite automatique : si la connexion VPS tombe (panne fibre, déplacement en zone rurale), vous continuez de travailler localement et la synchronisation reprend dès que la connexion revient.

Adaptation au contexte ouest-africain

Trois adaptations spécifiques rendent AppFlowy particulièrement pertinent pour les PME francophones d’Afrique de l’Ouest. Premièrement, le mode hors-ligne complet du client desktop est un atout majeur dans les régions où la connexion peut être instable plusieurs heures par jour : un commercial en déplacement à l’intérieur du Sénégal ou un consultant en mission au Burkina Faso continue de prendre des notes et de mettre à jour ses documents sans interruption. La synchronisation se déclenche automatiquement au retour sur réseau stable.

Deuxièmement, le coût mensuel maîtrisé en FCFA via une facturation Hetzner en euros (et non en USD comme Notion) protège votre budget contre les fluctuations du dollar — une variation de 5% du dollar en six mois représente près de 10 000 FCFA d’écart sur une facturation Notion à 200 000 FCFA mensuels. Le paiement Hetzner peut être fait par carte Visa internationale (Wave, Ecobank, BICIS proposent des cartes prépayées internationales) ou via PayPal, ce qui reste plus simple que les flux internationaux complexes parfois imposés par certains éditeurs SaaS.

Troisièmement, l’autonomie de gestion des données répond à des contraintes réglementaires émergentes. Le règlement de l’UEMOA sur la protection des données personnelles (en cours de finalisation depuis 2023) et la loi sénégalaise n°2008-12 sur la protection des données à caractère personnel exigent une localisation et une traçabilité que Notion ne garantit pas. Avec AppFlowy sur Hetzner Helsinki, vous pouvez documenter précisément où sont stockées vos données et les exporter à tout moment au format Markdown ou JSON pour audit interne ou externe.

Erreurs fréquentes

Erreur Cause Solution
502 Bad Gateway au premier accès Le conteneur appflowy_cloud n’est pas encore prêt Attendre 60 secondes après docker compose up, puis vérifier docker compose logs appflowy_cloud
Erreur « GOTRUE_JWT_SECRET too short » Secret JWT inférieur à 32 caractères dans .env Régénérer avec openssl rand -base64 32 puis redémarrer la stack
Impossible de téléverser des fichiers MinIO mal configuré ou URL S3 incorrecte Vérifier S3_HOST et S3_PORT dans .env, redémarrer le service appflowy_cloud
Synchronisation desktop bloquée URL serveur mal saisie ou certificat TLS invalide Tester curl -v https://appflowy.votre-pme.sn depuis la machine cliente, vérifier la chaîne de certificats
RAM saturée à 8 Go Trop d’utilisateurs concurrents ou base de données massive Migrer PostgreSQL vers un service managé ou passer au CX41 (8 vCPU, 16 Go)

Sauvegarde automatique

Une installation sans sauvegarde est une installation jetable. AppFlowy stocke l’essentiel dans PostgreSQL et MinIO ; sauvegarder les deux suffit à pouvoir tout reconstruire. Ajoutez un script /opt/backup-appflowy.sh qui exporte la base et synchronise les fichiers MinIO vers un stockage distant — Hetzner Storage Box (10 €/mois pour 1 To) est l’option la plus économique en complément du VPS.

#!/bin/bash
DATE=$(date +%Y%m%d-%H%M)
BACKUP_DIR=/var/backups/appflowy
mkdir -p $BACKUP_DIR

# Dump PostgreSQL
docker compose -f /opt/AppFlowy-Cloud/docker-compose.yml exec -T postgres \
  pg_dumpall -U postgres | gzip > $BACKUP_DIR/postgres-$DATE.sql.gz

# Snapshot MinIO (rsync vers Storage Box via SSH)
rsync -az /opt/AppFlowy-Cloud/minio/ \
  u123456@u123456.your-storagebox.de:/appflowy-minio/

# Conserver 30 jours, supprimer le reste
find $BACKUP_DIR -name "postgres-*.sql.gz" -mtime +30 -delete

Programmez ce script en crontab pour qu’il s’exécute chaque nuit à 2 heures, lorsque l’usage est minimal. Testez la restauration au moins une fois par trimestre sur un VPS jetable : une sauvegarde non testée n’est qu’une illusion de sécurité. Les équipes les plus rigoureuses ajoutent une vérification automatique qui restaure le dernier dump dans un conteneur PostgreSQL temporaire et compte le nombre de lignes attendues — si le compte chute soudainement, une alerte est envoyée.

Tutoriels frères du cluster

FAQ

AppFlowy peut-il remplacer Notion à 100% ?
Non, pas encore en 2026. Les fonctionnalités essentielles sont là (pages, bases de données, kanban, calendrier, formules), mais certaines fonctions avancées de Notion comme les Notion AI, les intégrations Slack natives ou les widgets riches manquent encore. Pour 90% des usages PME, AppFlowy est suffisant.

Mes données sont-elles vraiment privées si je suis chez Hetzner ?
Hetzner ne lit pas le contenu de vos volumes Docker. En revanche, ils ont accès au matériel sous-jacent. Pour une confidentialité maximale, activez le chiffrement disque LUKS au niveau de l’OS lors de la création du serveur, et stockez les sauvegardes chiffrées sur un autre fournisseur.

Combien d’utilisateurs un CX31 supporte-t-il ?
En usage typique (15 à 30 documents éditésimultanément, pas de gros fichiers media), un CX31 absorbe confortablement 30 à 50 utilisateurs. Au-delà, basculez sur un CX41 ou externalisez PostgreSQL vers un service managé.

Comment migrer mes données depuis Notion ?
Notion permet l’export en Markdown + CSV via les paramètres workspace. AppFlowy importe directement les fichiers Markdown dans une nouvelle page. Pour les bases de données complexes, prévoyez une étape manuelle de remappage des champs.

Que se passe-t-il si AppFlowy le projet s’arrête ?
Le code source est sous licence AGPL-3, donc utilisable et forkable par n’importe qui. Vos données sont stockées dans PostgreSQL standard et MinIO standard — vous pouvez les exporter et migrer vers une autre solution à tout moment, contrairement aux données enfermées dans un SaaS propriétaire.

Pour aller plus loin

Mots-clés : appflowy self-hosted, alternative notion open-source, docker compose hetzner, productivité pme afrique, vps francophone, base de connaissances entreprise.

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité