[{"data":1,"prerenderedAt":191},["ShallowReactive",2],{"seo-verification":3,"blog-heberger-hedgedoc-vps-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"slugs":9,"title":12,"excerpt":13,"readTime":14,"views":15,"isPinned":16,"publishedAt":17,"category":18,"categories":24,"featuredImage":26,"bgImage":27,"posterImage":28,"relatedSolution":26,"intro":29,"sections":30,"ctaTitle":133,"ctaBody":134,"ctaButton":135,"ctaUrl":136,"relatedPosts":137},268,"heberger-hedgedoc-vps",{"fr":8,"en":10,"ar":11},"self-host-hedgedoc-on-vps-the-collaborative-markdown-editor","استضافة-hedgedoc-على-vps-محرر-markdown-التعاوني","Héberger HedgeDoc sur VPS : l'éditeur Markdown collaboratif","Déployez HedgeDoc 1.11.x sur votre VPS en 15 minutes avec Docker et Nginx. Édition Markdown collaborative en temps réel, sans Google Docs.",10,0,false,"2026-08-15T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},4,"Développement","developpement","bg-warning\u002F10 text-warning","dev",[25],{"id":19,"name":20,"slug":21,"color":22,"icon":23},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-hedgedoc-vps-poster.svg","Google Docs est pratique jusqu'au jour où votre équipe préfère écrire de la documentation technique en Markdown, intégrer des blocs de code avec coloration syntaxique, ou simplement éviter d'héberger ses notes de réunion et spécifications chez Google. HedgeDoc (anciennement CodiMD) est un éditeur Markdown collaboratif en temps réel, open source (AGPL-3.0), qui se déploie en moins de quinze minutes sur un VPS avec Docker Compose. Chaque note a une URL partageable, l'édition est simultanée à plusieurs curseurs, et vos données restent sur votre infrastructure.",[31,35,44,63,66,70,73,124,127,130],{"type":32,"title":33,"body":34},"h2","Pourquoi HedgeDoc plutôt que Notion ou Google Docs ?","Notion et Google Docs ont chacun leurs avantages — mais tous deux hébergent vos données sur leurs serveurs, imposent leurs formats propriétaires et peuvent modifier leurs tarifs ou conditions sans préavis. Pour une équipe technique qui documente des architectures, rédige des API docs, prépare des RFCs ou gère des notes de réunion, HedgeDoc offre une alternative radicalement différente :\n\n- **Markdown natif** avec rendu temps réel côté éditeur et aperçu split-screen.\n- **Édition collaborative** avec plusieurs curseurs visibles simultanément.\n- **Blocs de code** avec coloration syntaxique pour 200+ langages.\n- **Diagrammes intégrés** : Mermaid, PlantUML, Vega-lite, flowcharts directement dans la note.\n- **Formules mathématiques** : LaTeX via MathJax.\n- **Export** : PDF, Markdown, HTML en un clic depuis l'interface.\n- **Hébergement sur votre VPS** : vos données ne quittent pas votre infrastructure.",{"type":36,"title":37,"items":38},"ul","Prérequis avant de commencer",[39,40,41,42,43],"Un VPS sous Ubuntu 22.04 ou Debian 12 avec **au minimum 1 Go de RAM** (512 Mo peut fonctionner en test, mais 1 Go est recommandé pour la collaboration simultanée).","**Docker Engine ≥ 24** et Docker Compose V2 installés.","Un **nom de domaine** pointant vers votre VPS pour configurer TLS (obligatoire en production : HedgeDoc utilise des WebSockets qui nécessitent une connexion sécurisée).","Le port **3000** disponible (HedgeDoc écoute sur ce port par défaut).","**Nginx** installé pour le reverse proxy (avec support WebSocket — indispensable).",{"type":45,"title":46,"steps":47},"steps","Installation de HedgeDoc avec Docker Compose",[48,51,54,57,60],{"title":49,"body":50},"Étape 1 — Créer la structure du projet","```bash\nmkdir -p \u002Fopt\u002Fhedgedoc && cd \u002Fopt\u002Fhedgedoc\n```\n\nCréez le fichier `docker-compose.yml` :\n\n```yaml\nversion: '3.8'\nservices:\n  database:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_USER: hedgedoc\n      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}\n      POSTGRES_DB: hedgedoc\n    volumes:\n      - db-data:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n    restart: unless-stopped\n    healthcheck:\n      test: ['CMD-SHELL', 'pg_isready -U hedgedoc']\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  app:\n    image: quay.io\u002Fhedgedoc\u002Fhedgedoc:1.11.1\n    environment:\n      CMD_DB_URL: postgres:\u002F\u002Fhedgedoc:${POSTGRES_PASSWORD}@database\u002Fhedgedoc\n      CMD_DOMAIN: ${CMD_DOMAIN}\n      CMD_PROTOCOL_USESSL: 'true'\n      CMD_SESSION_SECRET: ${CMD_SESSION_SECRET}\n      CMD_ALLOW_ANONYMOUS: 'false'\n      CMD_ALLOW_REGISTRATION: 'true'\n      CMD_ALLOW_FREEURL: 'true'\n    volumes:\n      - uploads:\u002Fhedgedoc\u002Fpublic\u002Fuploads\n    ports:\n      - '127.0.0.1:3000:3000'\n    depends_on:\n      database:\n        condition: service_healthy\n    restart: unless-stopped\n\nvolumes:\n  db-data:\n  uploads:\n```",{"title":52,"body":53},"Étape 2 — Créer le fichier d'environnement","```bash\ncat > \u002Fopt\u002Fhedgedoc\u002F.env \u003C\u003C 'EOF'\nPOSTGRES_PASSWORD=MOT_DE_PASSE_FORT_ICI\nCMD_DOMAIN=hedgedoc.votredomaine.com\nCMD_SESSION_SECRET=UNE_CHAINE_ALEATOIRE_LONGUE_ET_FIXE\nEOF\n```\n\n⚠️ **`CMD_SESSION_SECRET` doit être une valeur fixe** générée une seule fois et ne jamais changer. Si vous la changez après le premier démarrage, toutes les sessions existantes seront invalidées. Générez-la avec :\n\n```bash\nopenssl rand -base64 32\n```",{"title":55,"body":56},"Étape 3 — Lancer les conteneurs","```bash\ndocker compose up -d\n```\n\nVérifiez que les deux conteneurs sont opérationnels :\n\n```bash\ndocker compose ps\ndocker compose logs app\n```\n\nHedgeDoc va migrer automatiquement la base de données PostgreSQL au premier démarrage. Une fois que les logs affichent `listening on port 3000`, l'application est prête.",{"title":58,"body":59},"Étape 4 — Configurer Nginx avec support WebSocket","⚠️ La configuration Nginx pour HedgeDoc **doit inclure un bloc `\u002Fsocket.io\u002F`** avec les en-têtes WebSocket appropriés. Omettre ce bloc provoque des échecs silencieux de la collaboration en temps réel : les notes s'ouvrent mais les changements des autres utilisateurs n'apparaissent pas.\n\n```bash\napt install -y nginx certbot python3-certbot-nginx\n\ncat > \u002Fetc\u002Fnginx\u002Fsites-available\u002Fhedgedoc \u003C\u003C 'EOF'\nserver {\n    server_name hedgedoc.votredomaine.com;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n\n    location \u002Fsocket.io\u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n    }\n}\nEOF\n\nln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fhedgedoc \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F\ncertbot --nginx -d hedgedoc.votredomaine.com\nnginx -t && systemctl reload nginx\n```",{"title":61,"body":62},"Étape 5 — Créer le premier compte utilisateur","Ouvrez votre navigateur sur `https:\u002F\u002Fhedgedoc.votredomaine.com`. Sur la page d'accueil, cliquez sur **Sign In** → **Register** pour créer votre premier compte administrateur.\n\nSi vous avez défini `CMD_ALLOW_REGISTRATION: 'false'`, vous pouvez créer le premier compte via la CLI :\n\n```bash\ndocker compose exec app npm run manage_users -- --add votre@email.com --password VotreMotDePasse\n```\n\nUne fois connecté, cliquez sur **New note** pour créer votre première note collaborative.",{"type":32,"title":64,"body":65},"Fonctionnalités à découvrir","**Partager une note :** chaque note HedgeDoc a une URL unique. Cliquez sur le bouton de partage pour obtenir l'URL et choisissez le mode d'accès (lecture seule, commentaires, édition). Envoyez l'URL à vos collaborateurs — ils peuvent éditer sans compte si vous l'autorisez.\n\n**Insérer un diagramme Mermaid :**\n\n```mermaid\ngraph LR\n    A[Client] --> B[API]\n    B --> C[Base de données]\n    C --> D[Cache Redis]\n```\n\nHedgeDoc rend le diagramme en temps réel dans l'aperçu.\n\n**Exporter la note :** dans le menu (icône ≡), choisissez **Export** pour télécharger en Markdown, HTML ou PDF. L'export PDF utilise un navigateur headless côté serveur — il nécessite que Chromium soit disponible, ce qui est inclus dans l'image Docker officielle.\n\n**Mode présentation :** ajoutez `---` entre les sections pour les transformer en slides. Dans le menu, choisissez **Slide Mode** pour passer en présentation plein écran.",{"type":67,"title":68,"body":69},"tip","Bloc Socket.io manquant = collaboration silencieusement cassée","C'est le piège le plus fréquent avec HedgeDoc derrière Nginx. Symptôme : l'interface s'affiche normalement, vous pouvez écrire dans la note, mais les modifications des autres utilisateurs n'apparaissent pas en temps réel — sans aucun message d'erreur visible.\n\nCause : la route `\u002Fsocket.io\u002F` nécessite une **connexion WebSocket** (protocole `ws:\u002F\u002F` ou `wss:\u002F\u002F`). Sans le bloc Nginx dédié qui envoie les en-têtes `Upgrade: websocket` et `Connection: upgrade`, Nginx traite la requête comme du HTTP classique et la connexion temps réel échoue silencieusement.\n\nVérification rapide :\n\n```bash\n# Depuis votre poste, vérifiez que le WebSocket est atteignable\ncurl -v -N -H \"Connection: Upgrade\" -H \"Upgrade: websocket\" \\\n  https:\u002F\u002Fhedgedoc.votredomaine.com\u002Fsocket.io\u002F?transport=websocket\n```\n\nVous devez voir `101 Switching Protocols` dans la réponse. Un `200` ou un `400` indique que le bloc `\u002Fsocket.io\u002F` est manquant ou mal configuré.",{"type":67,"title":71,"body":72},"Proxy sans slash final = page blanche ou erreur 404","Dans la directive `proxy_pass` de Nginx, la présence ou l'absence du slash final change le comportement :\n\n```nginx\n# CORRECT — sans slash final (HedgeDoc gère lui-même ses routes)\nproxy_pass http:\u002F\u002F127.0.0.1:3000;\n\n# INCORRECT — le slash final fait que Nginx réécrit le chemin\nproxy_pass http:\u002F\u002F127.0.0.1:3000\u002F;\n```\n\nAvec un slash final, une requête vers `\u002Fs\u002Fma-note` devient une requête vers `\u002Fs\u002Fma-note` dans un contexte différent, cassant les redirections et le routage interne de HedgeDoc. Résultat : page blanche ou erreur 404 sur les notes. Toujours omettre le slash final dans `proxy_pass` quand vous configurez HedgeDoc.",{"type":74,"title":75,"headers":76,"rows":81},"comparison","HedgeDoc vs Notion vs Confluence",[77,78,79,80],"Critère","HedgeDoc (self-hosted)","Notion","Confluence (Cloud)",[82,87,92,96,101,106,111,116,120],[83,84,85,86],"Prix","Gratuit (coût VPS)","Gratuit jusqu'à 10 membres, ~10$\u002Fmembre\u002Fmois","~5.75$\u002Futilisateur\u002Fmois (min 10)",[88,89,90,91],"Format","Markdown natif","Blocs propriétaires","Editeur riche (WYSIWYG)",[93,94,95,95],"Collaboration temps réel","Oui (WebSocket)","Oui",[97,98,99,100],"Diagrammes natifs","Mermaid, PlantUML, Vega-lite","Limité (via intégrations)","Via macros (Confluence)",[102,103,104,105],"Blocs de code","200+ langages avec coloration","Oui (limité)","Oui (via plugin)",[107,108,109,110],"Hébergement données","Votre VPS","Serveurs Notion (US)","Serveurs Atlassian",[112,113,114,115],"Export Markdown","Oui (natif)","Partiel (import\u002Fexport)","Non natif",[117,118,95,119],"Formules LaTeX","Oui (MathJax)","Via plugin",[121,122,123,119],"Mode présentation","Oui (intégré)","Non",{"type":32,"title":125,"body":126},"Gérer les utilisateurs et les permissions","HedgeDoc gère trois niveaux d'accès par note, définis dans le menu de chaque note :\n\n- **Freely** : tout le monde peut éditer, sans compte.\n- **Editable** : seuls les utilisateurs connectés peuvent éditer.\n- **Limited** : seul le propriétaire peut éditer, les autres peuvent commenter.\n- **Locked** : lecture seule pour tous sauf le propriétaire.\n- **Private** : accessible uniquement au propriétaire.\n\n**Désactiver l'inscription publique :**\n\nSi votre instance est publique, un inconnu pourrait créer un compte. Pour réserver l'accès à votre équipe, définissez `CMD_ALLOW_REGISTRATION: 'false'` dans `.env` et recréez le conteneur (`docker compose up -d --force-recreate app`). Créez ensuite les comptes via la CLI.\n\n**Activer l'authentification OAuth (GitHub, GitLab…) :**\n\nHedgeDoc supporte OAuth2 pour GitHub, GitLab, Google, Twitter et plusieurs autres fournisseurs. Configurez les variables `CMD_GITHUB_CLIENTID` \u002F `CMD_GITHUB_CLIENTSECRET` dans `.env` après avoir créé une OAuth App sur GitHub.",{"type":32,"title":128,"body":129},"Sauvegardes et mises à jour","**Sauvegarder les données :**\n\n```bash\n# Sauvegarde de PostgreSQL\ndocker compose exec -T database \\\n  pg_dump -U hedgedoc hedgedoc | gzip > \u002Fopt\u002Fhedgedoc\u002Fbackups\u002Fhedgedoc-$(date +%Y%m%d).sql.gz\n\n# Sauvegarde des fichiers uploadés (images, pièces jointes)\ntar czf \u002Fopt\u002Fhedgedoc\u002Fbackups\u002Fuploads-$(date +%Y%m%d).tar.gz \\\n  -C \u002Fopt\u002Fhedgedoc uploads-volume\n```\n\nAutomatisez avec un cron quotidien et synchronisez vers un stockage distant (rclone vers S3 ou SFTP).\n\n**Mettre à jour HedgeDoc :**\n\n```bash\ncd \u002Fopt\u002Fhedgedoc\ndocker compose pull app\ndocker compose up -d app\ndocker compose logs -f app\n```\n\nLes migrations de base de données s'appliquent automatiquement au démarrage de la nouvelle version. Vérifiez les logs pour confirmer que les migrations se sont bien passées avant de reprendre l'utilisation normale. L'image actuelle est `quay.io\u002Fhedgedoc\u002Fhedgedoc:1.11.1`.",{"type":32,"title":131,"body":132},"Résoudre les problèmes courants","**L'interface s'affiche mais la collaboration ne fonctionne pas**\nVérifiez en premier le bloc `\u002Fsocket.io\u002F` dans Nginx (voir l'encadré dédié ci-dessus).\n\n**Erreur 502 Bad Gateway après le démarrage**\nHedgeDoc attend que PostgreSQL soit prêt grâce au `depends_on: condition: service_healthy`. Si le 502 persiste après 60 secondes, vérifiez que le conteneur `database` est bien en état `healthy` : `docker compose ps`. Si non, inspectez ses logs : `docker compose logs database`.\n\n**Les images uploadées disparaissent après un redémarrage**\nAssurez-vous que le volume `uploads` est correctement monté. Vérifiez avec `docker inspect hedgedoc-app-1 | grep Mounts` que le volume est persistant (type `volume`, pas `bind`).\n\n**Erreur lors de l'export PDF**\nL'export PDF nécessite Chromium en mode headless. Si l'image Docker officielle ne l'inclut pas dans la version que vous utilisez, vous pouvez désactiver l'export PDF avec `CMD_ALLOW_PDF_EXPORT: 'false'` dans `.env`.","Un VPS pour votre stack de collaboration documentaire","HedgeDoc tourne parfaitement sur 1 Go de RAM. Nos VPS démarrent à partir de quelques euros par mois et incluent des snapshots quotidiens pour protéger vos notes d'équipe. Vos specs techniques, vos RFCs et vos notes de réunion restent sur votre infrastructure.","Voir les offres agences","\u002Fsolutions\u002Fagences",[138,160,176],{"id":139,"slug":140,"slugs":141,"title":144,"excerpt":145,"readTime":146,"views":15,"isPinned":16,"publishedAt":147,"category":148,"categories":154,"featuredImage":26,"bgImage":27,"posterImage":156,"relatedSolution":157},148,"self-host-docmost-vps",{"fr":140,"en":142,"ar":143},"how-to-self-host-docmost-on-a-vps","كيفية-استضافة-docmost-ذاتيا-على-vps","Comment auto-héberger Docmost sur un VPS","Déployez Docmost sur votre VPS : wiki d'équipe auto-hébergé avec collaboration en temps réel. L'alternative open source à Notion et Confluence, en 15 minutes.",3,"2026-01-28T00:00:00+00:00",{"id":149,"name":150,"slug":151,"color":152,"icon":153},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[155],{"id":149,"name":150,"slug":151,"color":152,"icon":153},"\u002Fblog\u002Fcovers\u002Fself-host-docmost-vps-poster.svg",{"categorySlug":158,"appSlug":159},"collaboration","docmost",{"id":161,"slug":162,"slugs":163,"title":166,"excerpt":167,"readTime":168,"views":15,"isPinned":16,"publishedAt":169,"category":170,"categories":171,"featuredImage":26,"bgImage":27,"posterImage":173,"relatedSolution":174},183,"self-host-memos-vps",{"fr":162,"en":164,"ar":165},"self-host-memos-on-a-vps-lightweight-notes-and-team-journal","استضافة-memos-على-vps-ملاحظات-شخصية-وسجل-للفريق","Héberger Memos sur un VPS : notes perso et journal d'équipe","Déployez Memos sur votre VPS : la prise de notes open source axée confidentialité — Markdown, tags, recherche plein texte, API REST, SQLite, moins de 128 Mo de RAM.",5,"2026-07-18T00:00:00+00:00",{"id":149,"name":150,"slug":151,"color":152,"icon":153},[172],{"id":149,"name":150,"slug":151,"color":152,"icon":153},"\u002Fblog\u002Fcovers\u002Fself-host-memos-vps-poster.svg",{"categorySlug":158,"appSlug":175},"memos",{"id":177,"slug":178,"slugs":179,"title":182,"excerpt":183,"readTime":19,"views":15,"isPinned":16,"publishedAt":184,"category":185,"categories":186,"featuredImage":26,"bgImage":27,"posterImage":188,"relatedSolution":189},139,"stack-dev-docker-vps",{"fr":178,"en":180,"ar":181},"docker-dev-stack-on-a-vps-an-environment-ready-for-coding","حزمة-تطوير-docker-على-خادم-vps-بيئة-جاهزة-للبرمجة","Stack Dev Docker sur VPS : environnement prêt pour coder","Montez une stack dev Docker sur VPS : Compose, volumes, ports, sauvegardes et accès sécurisé pour prototyper vite.","2026-02-06T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},[187],{"id":19,"name":20,"slug":21,"color":22,"icon":23},"\u002Fblog\u002Fcovers\u002Fstack-dev-docker-vps-poster.svg",{"categorySlug":23,"appSlug":190},"docker-dev-stack",1787580974790]