[{"data":1,"prerenderedAt":189},["ShallowReactive",2],{"seo-verification":3,"blog-heberger-excalidraw-vps-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-heberger-excalidraw-vps-fr",{"id":9,"slug":10,"slugs":11,"title":13,"excerpt":14,"readTime":15,"views":16,"isPinned":17,"publishedAt":18,"updatedAt":19,"category":20,"categories":26,"featuredImage":28,"bgImage":29,"posterImage":30,"relatedSolution":28,"intro":31,"sections":32,"ctaTitle":125,"ctaBody":126,"ctaButton":127,"ctaUrl":128,"relatedPosts":129},349,"heberger-excalidraw-vps",{"fr":10,"en":12,"ar":12,"es":12},"heberger-excalidraw-vps-2","Héberger Excalidraw sur VPS : tableau blanc sans abonnement","Déployez Excalidraw sur votre VPS : tableau blanc collaboratif open source MIT, sessions sans quota imposées, données chez vous — sans abonnement Miro ni FigJam.",8,0,false,"2026-09-11T00:00:00+00:00","2026-09-11T11:34:13+00:00",{"id":21,"name":22,"slug":23,"color":24,"icon":25},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[27],{"id":21,"name":22,"slug":23,"color":24,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-excalidraw-vps-poster.svg","Miro, FigJam, Lucidspark : les tableaux blancs SaaS facturent au siège, stockent vos maquettes sur leurs serveurs et plafonnent les membres par plan. Excalidraw est l'alternative open source (MIT) : un tableau blanc dessiné à la main, collaboratif en temps réel, dont les deux composants — l'interface React et le serveur de salle WebSocket — s'auto-hébergent sur un VPS en deux conteneurs Docker. Ce guide montre comment les déployer, câbler nginx pour les WebSockets et activer la persistance des tableaux.",[33,37,47,50,53,61,80,84,119,122],{"type":34,"title":35,"body":36},"h2","Pourquoi auto-héberger Excalidraw plutôt que d'utiliser la version en ligne","La version publique sur excalidraw.com fonctionne bien pour un dessin rapide en solo. Elle envoie les sessions de collaboration en temps réel vers un serveur géré par Excalidraw s.r.o. C'est acceptable pour un brainstorming ponctuel. Ce l'est beaucoup moins quand les tableaux contiennent des maquettes de flux clients, des schémas d'architecture de systèmes internes ou des wireframes de projets sous NDA.\n\nAuto-héberger Excalidraw déplace le périmètre de contrôle sur votre propre infrastructure. Vos sessions passent par **votre** serveur WebSocket, sur **votre** domaine, sans transiter par un tiers. Vous décidez qui se connecte — par allowlist d'IP, par SSO OIDC ou par HTTP Basic Auth devant nginx. Et comme les deux composants sont publiés sous licence MIT, aucune restriction commerciale ne s'applique quel que soit le nombre de clients ou de collaborateurs que vous faites travailler sur l'instance.",{"type":38,"title":39,"items":40},"ul","Ce que vous gagnez concrètement",[41,42,43,44,45,46],"**Zéro abonnement logiciel** — les deux composants (interface et serveur de collaboration) sont MIT. Vous payez le VPS, rien d'autre.","**Confidentialité des maquettes** — les sessions de dessin restent sur votre infrastructure. Aucun fichier de conception ne transite par un tiers.","**Accès sous votre contrôle** — allowlist d'IP, SSO OIDC ou HTTP Basic Auth devant nginx selon le niveau d'isolation requis.","**Sessions et membres sans quota imposés** — pas de plafond par plan ; la seule limite est la RAM du serveur, et `excalidraw-room` est un service Node.js léger.","**Persistance optionnelle** — montez un volume Docker ou branchez un bucket S3 compatible pour archiver les tableaux exportés en JSON.","**Intégration dans un parc self-hosted** — une instance Excalidraw aux côtés de Penpot, Mattermost ou Docmost ferme le périmètre SaaS de toute une agence.",{"type":34,"title":48,"body":49},"Architecture : deux conteneurs, rôles distincts","Excalidraw sépare ce que la plupart des gens considèrent comme un seul outil en deux composants indépendants :\n\n- **`excalidraw\u002Fexcalidraw`** — l'interface React compilée, servie comme un site statique par nginx à l'intérieur du conteneur. Elle ne fait tourner aucun serveur applicatif. Sa seule contrainte est la variable `VITE_APP_WS_SERVER_URL`, qui doit pointer vers votre serveur de salle au moment de la **compilation** de l'image. Cette variable est gravée dans le bundle JavaScript : si vous la changez sur un conteneur déjà lancé, rien ne bouge.\n\n- **`excalidraw\u002Fexcalidraw-room`** — un serveur Node.js Socket.IO qui relaie en mémoire les événements de dessin entre les participants d'une même session. Il est **stateless** : il ne persiste rien et oublie tout au redémarrage. Les dessins vivent dans le `localStorage` du navigateur ou sont exportés manuellement.\n\nConséquence pratique : l'image Docker officielle pointe en dur sur le serveur de collaboration d'Excalidraw. Pour rediriger vers votre propre `excalidraw-room`, vous devez **builder votre propre image** avec `VITE_APP_WS_SERVER_URL` positionné sur votre domaine — ou utiliser un entrypoint qui patche le bundle au démarrage.",{"type":34,"title":51,"body":52},"Prérequis","Le VPS Start de ServOrbit (2 vCPU, 4 GB RAM) couvre le cas nominal : l'interface statique est quasi sans charge, et `excalidraw-room` consomme moins de 256 Mo en régime courant. Avec une dizaine de collaborateurs simultanés, vous resterez largement sous la moitié de la RAM disponible.\n\n**Ce qu'il vous faut avant de commencer :**",{"type":38,"title":54,"items":55},"Checklist prérequis",[56,57,58,59,60],"Un VPS avec au moins 1 vCPU et 512 Mo de RAM (1 Go recommandé pour une équipe).","Docker Engine et Docker Compose Plugin installés (`docker compose version` pour vérifier).","Un nom de domaine pointé vers l'IP du VPS — sans TLS les WebSockets sont bloqués par les navigateurs modernes.","Accès SSH root ou un utilisateur avec droits `sudo`.","Un certificat TLS valide — ServOrbit configure Let's Encrypt automatiquement.",{"type":62,"title":63,"steps":64},"steps","Déployer Excalidraw en 5 étapes",[65,68,71,74,77],{"title":66,"body":67},"Créer le VPS et installer Docker","Provisionnez un VPS Ubuntu 24.04 depuis l'espace ServOrbit. Une fois connecté en SSH, si Docker n'est pas encore présent, installez-le en une passe :\n\n```bash\ncurl -fsSL https:\u002F\u002Fget.docker.com | sh\n```\n\nVérifiez que Docker Compose Plugin répond avant de continuer :\n\n```bash\ndocker compose version\n```",{"title":69,"body":70},"Builder l'image avec votre URL de collaboration","Clonez le dépôt officiel, puis construisez l'image en substituant votre domaine. Remplacez `collab.yourdomain.com` par le sous-domaine que vous allouez à `excalidraw-room` :\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fexcalidraw\u002Fexcalidraw.git\ncd excalidraw\ndocker build \\\n  --build-arg VITE_APP_WS_SERVER_URL=wss:\u002F\u002Fcollab.yourdomain.com \\\n  -t my-excalidraw:latest .\n```\n\nCette étape grave l'URL du serveur WebSocket dans le bundle JavaScript. Si vous changez de domaine plus tard, il faudra rebuilder. L'image officielle `excalidraw\u002Fexcalidraw` convient pour les tests locaux, mais elle pointe sur le serveur public d'Excalidraw — inutilisable pour un déploiement souverain.",{"title":72,"body":73},"Écrire le fichier docker-compose.yml","Créez un répertoire de travail et posez le fichier suivant. Les deux services écoutent en interne ; nginx (à l'étape suivante) est le seul point d'entrée public :\n\n```bash\nmkdir ~\u002Fexcalidraw-stack && cd ~\u002Fexcalidraw-stack\n```\n\nContenu du `docker-compose.yml` :\n\n```bash\nservices:\n  excalidraw:\n    image: my-excalidraw:latest\n    restart: unless-stopped\n    networks:\n      - excalidraw\n\n  excalidraw-room:\n    image: excalidraw\u002Fexcalidraw-room:latest\n    restart: unless-stopped\n    networks:\n      - excalidraw\n\nnetworks:\n  excalidraw:\n```\n\nLancez la stack :\n\n```bash\ndocker compose up -d\n```",{"title":75,"body":76},"Configurer nginx avec les en-têtes WebSocket","C'est l'étape où la plupart des déploiements échouent en silence : sans les en-têtes `Upgrade` et `Connection`, le navigateur ouvre une connexion HTTP normale au lieu d'un WebSocket, et la collaboration semble ne pas démarrer sans aucun message d'erreur visible.\n\nBloc nginx pour le frontend Excalidraw (`draw.yourdomain.com`) :\n\n```bash\nserver {\n    listen 443 ssl;\n    server_name draw.yourdomain.com;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002Fexcalidraw:80;\n        proxy_set_header Host $host;\n    }\n}\n```\n\nBloc nginx pour le serveur de salle (`collab.yourdomain.com`) :\n\n```bash\nserver {\n    listen 443 ssl;\n    server_name collab.yourdomain.com;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002Fexcalidraw-room:80;\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_read_timeout 86400s;\n    }\n}\n```\n\nRechargez nginx (`nginx -s reload`) après avoir posé les blocs.",{"title":78,"body":79},"Tester la collaboration en temps réel","Ouvrez `https:\u002F\u002Fdraw.yourdomain.com` dans deux onglets ou deux navigateurs différents. Dans la barre d'outils, cliquez sur **Live collaboration** et créez une session. Copiez le lien de session dans le second onglet.\n\nDessinez quelque chose dans le premier onglet : le trait doit apparaître dans le second en temps réel. S'il n'apparaît pas, vérifiez d'abord les en-têtes WebSocket dans nginx (les devtools réseau du navigateur montrent si la connexion est passée en `101 Switching Protocols`). Un status `200` sur la requête WebSocket indique que nginx n'a pas transmis les en-têtes `Upgrade`.",{"type":81,"title":82,"body":83},"tip","Persistance des tableaux : deux approches","Par défaut, `excalidraw-room` est entièrement stateless. Si le serveur redémarre, la session en cours est perdue — mais chaque participant conserve localement ce qu'il a dessiné dans son `localStorage`.\n\n**Option 1 — Export JSON automatique.** Configurez un cron ou un script qui appelle l'API d'export d'Excalidraw et enregistre les fichiers `.excalidraw` dans un volume Docker. Ces fichiers peuvent être réimportés à tout moment depuis l'interface.\n\n**Option 2 — Bucket S3 compatible.** ServOrbit propose un stockage objet S3 compatible. Branchez votre bucket comme destination d'archivage des exports ; la restauration en cas de panne se fait par réimport du dernier fichier sauvegardé.",{"type":85,"title":86,"headers":87,"rows":92},"comparison","Excalidraw auto-hébergé vs alternatives SaaS",[88,89,90,91],"Critère","Excalidraw (self-hosted)","Miro","FigJam",[93,97,102,106,110,114],[94,95,96,96],"Coût par utilisateur","Aucun (VPS seul)","Payant par siège",[98,99,100,101],"Données hébergées chez","Votre infrastructure","Miro Inc.","Adobe \u002F Figma",[103,104,105,105],"Membres simultanés","RAM seule","Limité par plan",[107,108,109,109],"Licence logicielle","MIT (open source)","Propriétaire",[111,112,113,113],"Auto-hébergeable","Oui, deux conteneurs","Non",[115,116,117,118],"Contrôle d'accès","IP \u002F SSO \u002F Basic Auth","SSO (plans Pro)","SSO (plans Edu+)",{"type":34,"title":120,"body":121},"Aller plus loin : SSO et allowlist d'IP","Pour une agence dont les clients ont des exigences de confidentialité strictes, exposer Excalidraw sur un sous-domaine public n'est pas toujours acceptable. Deux configurations courantes permettent de durcir l'accès sans modifier Excalidraw lui-même.\n\n**HTTP Basic Auth via nginx.** Ajoutez une directive `auth_basic` devant le bloc `location \u002F` du frontend. Toute personne qui tente d'ouvrir l'interface devra s'authentifier avant même que l'app React se charge. Simple à mettre en place, suffisant pour des projets internes.\n\n**Allowlist d'IP.** Si les collaborateurs se connectent depuis des IP fixes ou depuis un VPN d'entreprise, un bloc `allow`\u002F`deny` dans nginx suffit à fermer l'instance au reste d'Internet :\n\n```bash\nallow 203.0.113.0\u002F24;\nallow 198.51.100.42;\ndeny all;\n```\n\n**SSO OIDC via un reverse proxy authentifiant.** Pour les équipes qui disposent déjà d'un fournisseur d'identité (Keycloak, Authelia, Authentik), un proxy authentifiant comme Oauth2-Proxy ou Authelia posé devant nginx délègue l'authentification au SSO existant. Excalidraw n'a pas besoin de savoir qu'une couche d'auth supplémentaire existe.",{"type":34,"title":123,"body":124},"Intégration dans un parc self-hosted","Excalidraw s'intègre naturellement dans un parc d'outils auto-hébergés. Si vous avez déjà déployé Mattermost pour la communication d'équipe, vous pouvez coller un lien de session Excalidraw dans un canal et inviter vos collaborateurs à rejoindre le tableau directement. Si Penpot couvre le design haute fidélité, Excalidraw prend en charge le travail en amont — les wireframes rapides, les schémas de flux et les sessions de brainstorming — avant que les designs n'entrent dans Penpot.\n\nCette complémentarité est le vrai argument face aux SaaS : chaque outil reste dans son périmètre de compétences, sans forfait plateforme qui facture pour des fonctions dont vous n'avez pas besoin.","Une plateforme pour votre VPS, votre domaine et vos sauvegardes","ServOrbit centralise VPS, nom de domaine et sauvegardes dans un espace agence unique : déployez Excalidraw pour votre équipe et gérez l'infrastructure de vos clients depuis le même tableau de bord.","Découvrir l'espace agence","\u002Fsolutions\u002Fagences",[130,153,172],{"id":131,"slug":132,"slugs":133,"title":137,"excerpt":138,"readTime":139,"views":16,"isPinned":17,"publishedAt":140,"updatedAt":141,"category":142,"categories":147,"featuredImage":28,"bgImage":29,"posterImage":149,"relatedSolution":150},193,"self-host-penpot-vps",{"fr":132,"en":134,"ar":135,"es":136},"self-host-penpot-open-source-figma-alternative-on-your-vps","استضافة-penpot-على-vps-بديل-figma-مفتوح-المصدر","alojar-penpot-en-un-vps","Héberger Penpot sur un VPS : alternative Figma open-source","Déployez Penpot sur un VPS ServOrbit : design collaboratif — prototypage vectoriel, composants, handoff développeur — sans abonnement Figma ni données chez un tiers.",4,"2026-07-27T00:00:00+00:00","2026-09-11T11:34:11+00:00",{"id":139,"name":143,"slug":144,"color":145,"icon":146},"Développement","developpement","bg-warning\u002F10 text-warning","dev",[148],{"id":139,"name":143,"slug":144,"color":145,"icon":146},"\u002Fblog\u002Fcovers\u002Fself-host-penpot-vps-poster.svg",{"categorySlug":151,"appSlug":152},"collaboration","penpot",{"id":154,"slug":155,"slugs":156,"title":160,"excerpt":161,"readTime":162,"views":163,"isPinned":17,"publishedAt":164,"updatedAt":165,"category":166,"categories":167,"featuredImage":28,"bgImage":29,"posterImage":169,"relatedSolution":170},76,"heberger-mattermost",{"fr":155,"en":157,"ar":158,"es":159},"host-mattermost-on-your-own-vps","استضافة-mattermost-على-خادم-vps-الخاص-بك","alojar-mattermost-en-un-vps","Héberger Mattermost sur votre propre VPS","Guide complet 2026 : déployez Mattermost v10\u002Fv11 sur VPS avec Docker, PostgreSQL, SSL, intégrations et sauvegardes. Alternative self-hosted à Slack.",9,2,"2026-04-05T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":21,"name":22,"slug":23,"color":24,"icon":25},[168],{"id":21,"name":22,"slug":23,"color":24,"icon":25},"\u002Fblog\u002Fcovers\u002Fheberger-mattermost-poster.svg",{"categorySlug":23,"appSlug":171},"mattermost",{"id":173,"slug":174,"slugs":175,"title":179,"excerpt":180,"readTime":181,"views":16,"isPinned":17,"publishedAt":182,"updatedAt":165,"category":183,"categories":184,"featuredImage":28,"bgImage":29,"posterImage":186,"relatedSolution":187},302,"self-host-planka-vps",{"fr":174,"en":176,"ar":177,"es":178},"planka-self-host-an-open-source-kanban-board-on-your-vps","planka-نشر-لوحة-kanban-مفتوحة-المصدر-على-vps","planka-tablero-kanban-open-source-autoalojado-en-vps","Planka — tableau Kanban open-source auto-hébergé sur VPS","Planka : tableau Kanban self-hosted pour équipes dev. Alternative open source à Trello (AGPL), ~12 k étoiles GitHub — déployez-le sur votre VPS en quelques minutes.",3,"2026-01-13T00:00:00+00:00",{"id":21,"name":22,"slug":23,"color":24,"icon":25},[185],{"id":21,"name":22,"slug":23,"color":24,"icon":25},"\u002Fblog\u002Fcovers\u002Fself-host-planka-vps-poster.svg",{"categorySlug":151,"appSlug":188},"planka",1789126721161]