[{"data":1,"prerenderedAt":189},["ShallowReactive",2],{"seo-verification":3,"blog-heberger-excalidraw-vps-2-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-heberger-excalidraw-vps-2-ar",{"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-2",{"fr":12,"en":10,"ar":10,"es":10},"heberger-excalidraw-vps","استضافة Excalidraw على VPS: لوح تعاوني مفتوح المصدر","نشر Excalidraw على VPS الخاص بك باستخدام Docker: لوح تعاون مفتوح المصدر (MIT)، جلسات غير محدودة، بياناتك على بنيتك التحتية — دون اشتراك Miro أو 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","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: تفرض أدوات اللوح الأبيض SaaS رسوماً بالمقعد، وتخزّن نماذجك على خوادمها، وتحدّ من عدد الأعضاء وفق الخطة. Excalidraw هو البديل مفتوح المصدر (MIT): لوح تعاون في الوقت الفعلي يشبه الرسم اليدوي، مكوّن من عنصرين — واجهة React وخادم WebSocket — يمكن استضافتهما ذاتياً على VPS في حاويتَي Docker. يوضح هذا الدليل كيفية نشرهما وضبط nginx لـ WebSocket وتفعيل استمرارية اللوحات.",[33,37,47,50,53,61,80,84,119,122],{"type":34,"title":35,"body":36},"h2","لماذا تستضيف Excalidraw بنفسك بدلاً من النسخة العامة","تعمل النسخة العامة على ‎excalidraw.com بشكل جيد للرسم السريع الفردي. إلا أنها تُمرّر جلسات التعاون في الوقت الفعلي عبر خادم تديره شركة Excalidraw‏ s.r.o. قد يكون ذلك مقبولاً لجلسة عصف ذهني عابرة، لكنه أقل قبولاً حين تحتوي اللوحات على نماذج تدفق العملاء أو مخططات البنية الداخلية أو واجهات مشاريع مشمولة بالسرية.\n\nاستضافة Excalidraw ذاتياً تنقل حدود التحكم إلى بنيتك التحتية الخاصة. تمر الجلسات عبر **خادمك** WebSocket على **نطاقك** الخاص دون المرور بطرف ثالث. أنت من يقرر من يتصل — عبر قائمة IP المسموح بها أو SSO‏ OIDC أو HTTP Basic Auth أمام nginx. وبما أن المكوّنَين منشوران بموجب رخصة MIT، لا توجد قيود تجارية بصرف النظر عن عدد العملاء أو المتعاونين.",{"type":38,"title":39,"items":40},"ul","الفوائد الملموسة",[41,42,43,44,45,46],"**لا رسوم برمجية** — المكوّنان (الواجهة وخادم التعاون) برخصة MIT. تدفع مقابل VPS فقط.","**سرية النماذج** — تبقى جلسات الرسم على بنيتك التحتية ولا يمر أي ملف تصميم عبر طرف ثالث.","**التحكم في الوصول** — قائمة IP أو SSO‏ OIDC أو HTTP Basic Auth أمام nginx حسب مستوى العزل المطلوب.","**جلسات وأعضاء غير محدودين** — لا سقف يفرضه الخطة؛ الحد الوحيد هو ذاكرة RAM للخادم، وخادم `excalidraw-room` خفيف الوزن.","**استمرارية اختيارية** — ربط وحدة تخزين Docker أو حاوية S3 متوافقة لأرشفة اللوحات المصدَّرة بصيغة JSON.","**التكامل مع مجموعة الأدوات المستضافة ذاتياً** — Excalidraw إلى جانب Penpot وMattermost وDocmost يُغلق محيط SaaS لوكالة بأكملها.",{"type":34,"title":48,"body":49},"البنية: حاويتان بأدوار مختلفة","يفصل Excalidraw ما يعتبره معظم الناس أداةً واحدةً إلى مكوّنَين مستقلَّين:\n\n- **`excalidraw\u002Fexcalidraw`** — الواجهة المُجمَّعة بـ React، تُقدَّم كموقع ثابت عبر nginx داخل الحاوية. لا تشغّل خادماً تطبيقياً. قيدها الوحيد هو المتغير `VITE_APP_WS_SERVER_URL` الذي يجب أن يشير إلى خادم الغرفة **وقت البناء**. هذا المتغير مدمج في حزمة JavaScript: تغييره على حاوية قيد التشغيل لا يُحدث أي أثر.\n\n- **`excalidraw\u002Fexcalidraw-room`** — خادم Node.js‏\u002FSocket.IO يُعيد توجيه أحداث الرسم في الذاكرة بين المشاركين في الجلسة ذاتها. إنه **عديم الحالة**: لا يُخزّن شيئاً وينسى كل شيء عند إعادة التشغيل. الرسومات تعيش في `localStorage` المتصفح أو تُصدَّر يدوياً.\n\nالنتيجة العملية: الصورة الرسمية لـ Docker تُضمّن عنوان خادم التعاون الخاص بـ Excalidraw. لإعادة التوجيه نحو `excalidraw-room` الخاص بك، تحتاج إلى **بناء صورتك الخاصة** مع تعيين `VITE_APP_WS_SERVER_URL` على نطاقك.",{"type":34,"title":51,"body":52},"المتطلبات الأساسية","يغطي VPS Start من ServOrbit (2 نواة، 4 GB RAM) الحالة العادية: الواجهة الثابتة شبه خالية من الحمل، ويستهلك `excalidraw-room` أقل من 256 ميغابايت في الظروف العادية. مع عشرة متعاونين متزامنين ستبقى بعيداً عن نصف الذاكرة المتاحة.\n\n**ما تحتاجه قبل البدء:**",{"type":38,"title":54,"items":55},"قائمة التحقق من المتطلبات",[56,57,58,59,60],"خادم VPS بما لا يقل عن 1 نواة و512 ميغابايت RAM (يُوصى بـ 1 غيغابايت للفريق).","Docker Engine وإضافة Docker Compose مثبَّتان (للتحقق: `docker compose version`).","اسم نطاق مُوجَّه نحو IP الخادم — بدون TLS تُحجب WebSockets في المتصفحات الحديثة.","وصول SSH بصلاحيات root أو مستخدم بصلاحيات `sudo`.","شهادة TLS صالحة — يهيئ ServOrbit Let's Encrypt تلقائياً.",{"type":62,"title":63,"steps":64},"steps","نشر Excalidraw في 5 خطوات",[65,68,71,74,77],{"title":66,"body":67},"إنشاء VPS وتثبيت Docker","شغّل VPS Ubuntu 24.04 من لوحة تحكم ServOrbit. بعد الاتصال عبر SSH، إن لم يكن Docker مثبتاً بعد، شغّل:\n\n```bash\ncurl -fsSL https:\u002F\u002Fget.docker.com | sh\n```\n\nتحقق من استجابة Docker Compose Plugin قبل المتابعة:\n\n```bash\ndocker compose version\n```",{"title":69,"body":70},"بناء الصورة مع رابط التعاون الخاص بك","انسخ المستودع الرسمي ثم ابنِ الصورة مع استبدال نطاقك. استبدل `collab.yourdomain.com` بالنطاق الفرعي الذي تخصصه لـ `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\nتُدمج هذه الخطوة عنوان خادم WebSocket في حزمة JavaScript. إن غيّرت النطاق لاحقاً ستحتاج إلى إعادة البناء.",{"title":72,"body":73},"كتابة ملف docker-compose.yml","أنشئ مجلد عمل وضع الملف التالي. تستمع الخدمتان داخلياً؛ nginx (الخطوة التالية) هو نقطة الدخول العامة الوحيدة:\n\n```bash\nmkdir ~\u002Fexcalidraw-stack && cd ~\u002Fexcalidraw-stack\n```\n\nمحتوى `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\nشغّل المجموعة:\n\n```bash\ndocker compose up -d\n```",{"title":75,"body":76},"إعداد nginx مع ترويسات WebSocket","هذه الخطوة هي المكان الذي تفشل فيه معظم عمليات النشر بصمت: بدون ترويستَي `Upgrade` و`Connection`، يفتح المتصفح اتصالاً HTTP عادياً بدلاً من WebSocket، وتبدو ميزة التعاون كأنها لا تعمل دون أي رسالة خطأ.\n\nكتلة nginx للواجهة الأمامية لـ ‎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\nكتلة nginx لخادم الغرفة (`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\nأعِد تحميل nginx (`nginx -s reload`) بعد وضع الكتل.",{"title":78,"body":79},"اختبار التعاون في الوقت الفعلي","افتح `https:\u002F\u002Fdraw.yourdomain.com` في علامتَي تبويب أو متصفحَين مختلفَين. انقر على **Live collaboration** في شريط الأدوات وأنشئ جلسة. انسخ رابط الجلسة في علامة التبويب الثانية.\n\nارسم شيئاً في علامة التبويب الأولى: يجب أن تظهر اللمسة في الثانية فوراً. إن لم تظهر، تحقق أولاً من ترويسات WebSocket في nginx (تُظهر أدوات الشبكة في المتصفح إن كان الاتصال قد ارتقى إلى `101 Switching Protocols`).",{"type":81,"title":82,"body":83},"tip","استمرارية اللوحات: نهجان","بشكل افتراضي، يكون `excalidraw-room` عديم الحالة تماماً. إن أُعيد تشغيل الخادم، تُفقد الجلسة الجارية — لكن كل مشارك يحتفظ محلياً بما رسمه في `localStorage`.\n\n**الخيار الأول — تصدير JSON تلقائي.** اضبط مهمة cron أو سكريبتاً يستدعي واجهة تصدير Excalidraw ويحفظ ملفات ‎`‎.excalidraw`‎ في وحدة تخزين Docker. يمكن إعادة استيراد هذه الملفات في أي وقت من الواجهة.\n\n**الخيار الثاني — حاوية S3 متوافقة.** يوفر ServOrbit تخزين كائنات متوافق مع S3. اربط حاوية التخزين كوجهة لأرشفة التصديرات؛ الاستعادة بعد عطل تتم بإعادة استيراد آخر ملف محفوظ.",{"type":85,"title":86,"headers":87,"rows":92},"comparison","Excalidraw المستضاف ذاتياً مقابل بدائل SaaS",[88,89,90,91],"المعيار","Excalidraw (ذاتي)","Miro","FigJam",[93,97,102,106,110,114],[94,95,96,96],"التكلفة لكل مستخدم","لا شيء (VPS فقط)","مدفوع بالمقعد",[98,99,100,101],"استضافة البيانات","بنيتك التحتية","‎Miro Inc.‎","‎Adobe \u002F Figma‎",[103,104,105,105],"الأعضاء المتزامنون","غير محدود (RAM فقط)","محدود بالخطة",[107,108,109,109],"رخصة البرنامج","MIT (مفتوح المصدر)","خاصة",[111,112,113,113],"قابل للاستضافة الذاتية","نعم، حاويتان","لا",[115,116,117,118],"التحكم في الوصول","IP \u002F SSO \u002F Basic Auth","SSO (خطط Pro)","SSO (خطط Edu+)",{"type":34,"title":120,"body":121},"للمزيد: SSO وقوائم IP المسموح بها","بالنسبة للوكالات ذات متطلبات سرية صارمة، قد لا يكون نشر Excalidraw على نطاق فرعي عام مقبولاً دائماً. ثمة إعدادان شائعان يُحكمان الوصول دون تعديل Excalidraw نفسه.\n\n**HTTP Basic Auth عبر nginx.** أضف توجيه `auth_basic` أمام كتلة `location \u002F` للواجهة الأمامية. يجب على أي شخص يحاول فتح الواجهة المصادقة قبل تحميل تطبيق React. سهل التطبيق وكافٍ للمشاريع الداخلية.\n\n**قائمة IP المسموح بها.** إن اتصل المتعاونون من عناوين IP ثابتة أو شبكة VPN مؤسسية، تكفي كتلة `allow`\u002F`deny` في nginx لإغلاق الوصول:\n\n```bash\nallow 203.0.113.0\u002F24;\nallow 198.51.100.42;\ndeny all;\n```\n\n**SSO‏ OIDC عبر وكيل عكسي للمصادقة.** للفرق التي تمتلك بالفعل مزود هوية (Keycloak أو Authelia أو Authentik)، يُفوَّض التحقق من الهوية إلى SSO الحالي عبر وكيل كـ Oauth2-Proxy أو Authelia أمام nginx. لا يحتاج Excalidraw إلى معرفة وجود طبقة المصادقة الإضافية.",{"type":34,"title":123,"body":124},"التكامل مع مجموعة الأدوات المستضافة ذاتياً","يتكامل Excalidraw بشكل طبيعي مع مجموعة الأدوات المستضافة ذاتياً. إن نشرت Mattermost للتواصل الجماعي، يمكنك لصق رابط جلسة Excalidraw في قناة ودعوة المتعاونين للانضمام إلى اللوحة مباشرةً. وإن كان Penpot يغطي التصميم عالي الدقة، يتولى Excalidraw العمل الأولي — الواجهات السريعة ومخططات التدفق وجلسات العصف الذهني — قبل انتقال التصاميم إلى Penpot.\n\nهذا التكامل هو الحجة الحقيقية في مواجهة SaaS: تبقى كل أداة في نطاق كفاءتها دون اشتراك منصة يفوتر عن ميزات لا تحتاجها.","منصة واحدة لـ VPS والنطاق والنسخ الاحتياطية","يجمع ServOrbit VPS والنطاق والنسخ الاحتياطية في مساحة وكالة واحدة: انشر Excalidraw لفريقك وأدِر بنية تحتية عملائك من لوحة تحكم واحدة.","اكتشف مساحة الوكالة","\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,"استضافة-penpot-على-vps-بديل-figma-مفتوح-المصدر",{"fr":134,"en":135,"ar":132,"es":136},"self-host-penpot-vps","self-host-penpot-open-source-figma-alternative-on-your-vps","alojar-penpot-en-un-vps","استضافة Penpot على VPS: بديل Figma مفتوح المصدر","انشر Penpot على خادم ServOrbit الافتراضي واحصل على أداة تصميم تعاونية كاملة — تصميم متجهي، مكونات، تسليم للمطورين — دون اشتراك Figma أو بيانات تصميمك لدى طرف ثالث.",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},"التطوير","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},"التعاون-والإنتاجية","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,"استضافة-mattermost-على-خادم-vps-الخاص-بك",{"fr":157,"en":158,"ar":155,"es":159},"heberger-mattermost","host-mattermost-on-your-own-vps","alojar-mattermost-en-un-vps","استضافة ‎Mattermost‎ على خادم ‎VPS‎ الخاص بك","دليل كامل 2026: نشر ‎Mattermost v10\u002Fv11‎ على ‎VPS‎ مع ‎Docker‎ و‎PostgreSQL‎ و‎SSL‎ والتكاملات والنسخ الاحتياطية. بديل ذاتي الاستضافة عن ‎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,"planka-نشر-لوحة-kanban-مفتوحة-المصدر-على-vps",{"fr":176,"en":177,"ar":174,"es":178},"self-host-planka-vps","planka-self-host-an-open-source-kanban-board-on-your-vps","planka-tablero-kanban-open-source-autoalojado-en-vps","Planka: نشر لوحة Kanban مفتوحة المصدر على VPS","Planka: لوحة Kanban ذاتية الاستضافة لفرق التطوير. بديل مفتوح المصدر لـ Trello (AGPL) — انشر على VPS في دقائق.",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",1789126851029]