[{"data":1,"prerenderedAt":154},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-calcom-على-خادمك-الافتراضي-الخاص-vps-ar":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":29,"intro":31,"sections":32,"ctaTitle":101,"ctaBody":102,"ctaButton":103,"ctaUrl":104,"relatedPosts":105},88,"استضافة-calcom-على-خادمك-الافتراضي-الخاص-vps",{"fr":10,"en":11,"ar":8},"heberger-cal-com","host-calcom-on-your-own-vps","استضافة Cal.com على خادمك الافتراضي الخاص (VPS)","‎Cal.com‎ على ‎VPS‎: ثوابت ‎CALENDSO_ENCRYPTION_KEY‎ عند التشغيل الأول، إجراء التحديث الآمن، وتشخيص أكثر 3 أخطاء شيوعًا.",8,0,false,"2026-03-24T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[25],{"id":19,"name":20,"slug":21,"color":22,"icon":23},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-cal-com-poster.svg",{"categorySlug":21,"appSlug":30},"cal-com","Calendly عملي لكنه احتكاري، ومحدود في خطته المجانية، ونهِم لبيانات اجتماعاتك. Cal.com هو نظيره مفتوح المصدر: حجز المواعيد وتكاملات التقويم والاجتماعات المرئية، وكلها قابلة للاستضافة لديك. إليك كيفية نشره على خادم VPS، بما في ذلك قاعدة البيانات.",[33,37,47,50,75,78,81,96,99],{"type":34,"title":35,"body":36},"h2","لماذا تستضيف ‎Cal.com‎ ذاتيًا على خادم ‎VPS‎","‎Cal.com‎ تطبيق ‎Next.js‎ يعتمد على ‎PostgreSQL‎ يتولّى جدولة المواعيد وأنواع الأحداث وأوقات التوفّر والمزامنة مع التقاويم (‎Google‎ و‎CalDAV‎ و‎Office 365‎). تلبّي الاستضافة الذاتية حاجة محدّدة: التحكم في بيانات توفّر عملائك وحجز مواعيدهم، التي تمرّ عادةً عبر خدمة أمريكية طرف ثالث. على خادم ‎VPS‎، تلغي قيود الخطة المجانية (نوع حدث واحد، علامة تجارية مفروضة)، وتربط مفاتيح ‎API‎ الخاصة بك لـ‎Google‎\u002Fالاجتماعات المرئية، وتضمّن أداة الحجز مباشرةً في موقعك تحت نطاقك. وبما أن ‎Cal.com‎ تطبيق ‎Node‎ دائم مع قاعدة بيانات وبناء إنتاجي، فإنه يتطلّب خادم ‎VPS‎ — إذ لا تستطيع الاستضافة المشتركة تشغيل العملية ولا استضافة ‎PostgreSQL‎.",{"type":38,"title":39,"items":40},"ul","فوائد ملموسة لـ‎Cal.com‎ المُستضاف ذاتيًا",[41,42,43,44,45,46],"أنواع أحداث غير محدودة: مقابلات 15 دقيقة، وعروض توضيحية 30 دقيقة، وورش جماعية، دون حاجز مدفوع (‎paywall‎).","بيانات الحجز لديك: دون أي تسريب لبيانات اتصال العملاء ومواعيدهم إلى خدمة ‎SaaS‎ طرف ثالث.","علامة بيضاء (‎white-label‎) كاملة: يحمل رابط الحجز نطاقك، لا نطاق مطوّر.","‎Webhooks‎ و‎API‎: شغّل الأتمتة (‎CRM‎، الفوترة) عند كل موعد يُحجَز.","تكاملات ‎Google Agenda‎ و‎CalDAV‎ والاجتماعات المرئية (‎Jitsi‎ و‎Google Meet‎) مضبوطة بمفاتيحك الخاصة.","حجوزات الفريق والتوزيع الدوري (‎round-robin‎) لتوزيع المواعيد بين عدة متعاونين.",{"type":34,"title":48,"body":49},"المتطلبات التقنية","‎Cal.com‎ أكثر تطلّبًا من متوسط الاستضافة الذاتية بسبب أساسه ‎Next.js‎ وخطوة البناء. خصّص 2 ‎vCPU‎ و4 غيغابايت من ‎RAM‎ و20 غيغابايت من القرص لنسخة فريق مريحة؛ وقد يكفي 2 غيغابايت من ‎RAM‎ للاستخدام الفردي لكن البناء الأولي يكون أضيق. تحتاج إلى ‎Docker‎ و‎Docker Compose‎، وقاعدة بيانات ‎PostgreSQL‎ (مشمولة في ملف ‎compose‎ الرسمي)، ونطاق `rdv.yourdomain.com` موجَّه إلى الخادم ‎VPS‎، وعدة متغيرات بيئة إلزامية: `NEXTAUTH_SECRET` و`CALENDSO_ENCRYPTION_KEY` (مفاتيح مولَّدة عشوائيًا) و`NEXT_PUBLIC_WEBAPP_URL` مضبوطًا على عنوان ‎HTTPS‎ النهائي. وللمزامنة مع التقويم والاجتماعات المرئية، جهّز معرّفات ‎OAuth‎ الخاصة بـ‎Google‎.",{"type":51,"title":52,"steps":53},"steps","نشر ‎Cal.com‎ خطوة بخطوة",[54,57,60,63,66,69,72],{"title":55,"body":56},"استنساخ مستودع نشر ‎Docker‎","على الخادم ‎VPS‎: `git clone https:\u002F\u002Fgithub.com\u002Fcalcom\u002Fdocker.git cal-docker && cd cal-docker`. يوفّر هذا المستودع ملف `docker-compose.yml` وملف `.env.example` لتكييفه.",{"title":58,"body":59},"توليد الأسرار وإعداد البيئة","انسخ `.env.example` إلى `.env`، ثم ولّد المفاتيح: `openssl rand -base64 32` لـ`NEXTAUTH_SECRET` ولـ`CALENDSO_ENCRYPTION_KEY`. عيّن `NEXT_PUBLIC_WEBAPP_URL=https:\u002F\u002Frdv.yourdomain.com` ومعرّفات ‎PostgreSQL‎. **احفظ هذه القيم الثلاث فورًا في مدير الأسرار** — لن تتمكن من تغييرها بعد أول تشغيل دون فقدان جميع تكاملاتك.",{"title":61,"body":62},"بناء المكدّس وتشغيله","ابدأ بـ`docker compose up -d`. يبني التشغيل الأول صورة ‎Next.js‎ ويطبّق عمليات ترحيل ‎Prisma‎ على ‎PostgreSQL‎ — وهي الخطوة الأطول، تابِعها بـ`docker compose logs -f`.",{"title":64,"body":65},"وضع الوكيل العكسي و‎SSL‎","ضع ‎Cal.com‎ (المنفذ الداخلي 3000) خلف وكيل عكسي بـ‎HTTPS‎. باستخدام ‎Caddy‎: `rdv.yourdomain.com { reverse_proxy calcom:3000 }`. تُحصَّل الشهادة تلقائيًا. يجب أن يطابق العنوان `NEXT_PUBLIC_WEBAPP_URL` تمامًا، وإلا فستفشل المصادقة.",{"title":67,"body":68},"إنشاء الحساب وإعداد أوقات التوفّر","افتح `https:\u002F\u002Frdv.yourdomain.com`، وأنشئ حساب المالك، وحدّد فتراتك الزمنية ونوع حدث أول. اختبر حجزًا من البداية إلى النهاية للتحقق من السلسلة.",{"title":70,"body":71},"توصيل التقويم والاجتماعات المرئية","في التكاملات، أضف معرّفات ‎OAuth‎ الخاصة بـ‎Google‎ للمزامنة ثنائية الاتجاه للتقويم، وفعّل ‎Jitsi‎ أو ‎Google Meet‎ لتوليد رابط اجتماع مرئي تلقائيًا عند كل حجز.",{"title":73,"body":74},"أول تسجيل دخول","افتح الرابط: يوجّهك ‎Cal.com‎ إلى معالج الإعداد الأول حيث تنشئ حساب المسؤول الخاص بك، على المسار \u002Fauth\u002Fsetup. قم بذلك فور انتهاء التثبيت: فهذا المعالج غير محمي بأي شيء ما دام الحساب الأول غير موجود.",{"type":76,"body":77},"tip","قد يفشل بناء ‎Cal.com‎ في الذاكرة على خادم ‎VPS‎ بسعة 2 غيغابايت أثناء ترجمة ‎Next.js‎. إذا رأيت خطأ «JavaScript heap out of memory»، أضِف مؤقتًا ملف ‎swap‎ بسعة 2 غيغابايت (`fallocate -l 2G \u002Fswapfile && mkswap \u002Fswapfile && swapon \u002Fswapfile`) طوال مدة البناء، ثم أزِله. وبالنسبة للتحديثات، انسخ دائمًا قاعدة بيانات ‎PostgreSQL‎ احتياطيًا قبل `docker compose pull` لأن عمليات ترحيل ‎Prisma‎ غير قابلة للتراجع.",{"type":34,"title":79,"body":80},"ثوابت التشغيل الأول الحرجة","ثلاثة متغيرات بيئة مُقيَّدة نهائيًا عند **أول تشغيل** لـ‎Cal.com‎. تغييرها لاحقًا يُفسد صامتًا جميع التكاملات المخزّنة: يُعيد التطبيق تشغيله بصورة طبيعية ولا يُظهر أي خطأ، لكن ‎Google Calendar‎ و‎Zoom‎ وجميع اتصالات ‎OAuth‎ تتوقف عن العمل — إذ خُزِّنت رموزها المشفَّرة بالمفتاح الأصلي غير المتوافق الآن. هذا السلوك موثَّق في calcom\u002Fdocker \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcalcom\u002Fdocker\u002Fissues\u002F333\">issue #333\u003C\u002Fa> وcalcom\u002Fcal.diy \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcalcom\u002Fcal.diy\u002Fissues\u002F13290\">issue #13290\u003C\u002Fa>: فقد مستخدمون جميع تكاملاتهم إثر تحديث أعاد إنشاء ملف `.env`.\n\n**`CALENDSO_ENCRYPTION_KEY`** — يشفّر رموز ‎OAuth‎ المخزّنة في قاعدة البيانات. أي تعديل يُلغي صامتًا جميع التكاملات القائمة.\n\n**`NEXTAUTH_URL`** — يثبّت ملفات تعريف الارتباط للجلسة. أي تغيير يُعطل المصادقة لجميع المستخدمين النشطين.\n\n**`NEXT_PUBLIC_WEBAPP_URL`** — مضمَّن في بناء ‎Next.js‎ وقت الترجمة. تغيير هذه القيمة يستلزم إعادة بناء كاملة وإعادة توصيل جميع التكاملات.\n\nأفضل الممارسات: انسخ هذه القيم الثلاث فورًا إلى مدير الأسرار (‎Bitwarden‎، ‎HashiCorp Vault‎، ‎Ansible Vault‎). وإن كنت تدير خادمك بنهج البنية التحتية كرمز (‎infrastructure-as-code‎)، خزّنها في قبو مشفَّر — لا تجعل ملف `.env` موضعها الوحيد.",{"type":51,"title":82,"steps":83},"تحديث ‎Cal.com‎ بأمان",[84,87,90,93],{"title":85,"body":86},"نسخ قاعدة بيانات ‎PostgreSQL‎ احتياطيًا","قبل أي تحديث: `docker exec cal-docker-db-1 pg_dump -U calcom calcom | gzip > \u002Fopt\u002Fbackup\u002Fcalcom-$(date +%Y%m%d).sql.gz`. عمليات ترحيل ‎Prisma‎ غير قابلة للتراجع — هذه النسخة الاحتياطية هي شبكة الأمان الوحيدة لديك.",{"title":88,"body":89},"التحقق من أن ‎CALENDSO_ENCRYPTION_KEY‎ لم تتغيّر","قارن القيمة الموجودة في ملف `.env` بتلك المحفوظة في مدير الأسرار. إن اختلفتا، **توقّف هنا**: استعِد القيمة الأصلية قبل المتابعة. مفتاح مختلف سيُدمّر صامتًا جميع تكاملات ‎OAuth‎ عند إعادة التشغيل.",{"title":91,"body":92},"تنزيل الصورة الجديدة وإعادة التشغيل","حدِّث بـ`docker compose pull && docker compose up -d`. تابِع بدء التشغيل بـ`docker compose logs -f calcom` — انتظر رسالة تأكيد جاهزية الخادم قبل الاختبار.",{"title":94,"body":95},"التحقق من التكاملات بعد التحديث","افتح الإعدادات → التكاملات وتأكد من أن كل اتصال قائم (‎Google Calendar‎، ‎Zoom‎، إلخ) لا يزال نشطًا. حالة «غير متصل» تعني تغيُّر المفتاح بين تشغيلَين — استعِد النسخة الاحتياطية وملف `.env` الأصلي.",{"type":34,"title":97,"body":98},"تشخيص الأخطاء الشائعة","**ضياع التكاملات بعد تحديث** — السبب في الغالب `CALENDSO_ENCRYPTION_KEY` مختلفة بين تشغيلَين. تحقق من أن ملف `.env` لم يُستبدَل بـ`.env.example` أثناء التنزيل. قارن القيمة الحالية بتلك المحفوظة في مدير الأسرار. إن اختلفتا: استعِد قاعدة بيانات ‎PostgreSQL‎، أعِد المفتاح الأصلي إلى `.env`، وأعِد التشغيل بـ`docker compose up -d`.\n\n**خطأ «JavaScript heap out of memory» أثناء البناء** — المُجمِّع ‎Next.js‎ يعاني من نقص ‎RAM‎. الحل: `fallocate -l 2G \u002Fswapfile && mkswap \u002Fswapfile && swapon \u002Fswapfile`، ثم أعِد تشغيل `docker compose build`. على خادم ‎VPS‎ بسعة 2 غيغابايت، الـ‎swap‎ ضروري غالبًا للبناء الأول والتحديثات الكبرى. أزِل ملف الـ‎swap‎ بعد اكتمال البناء.\n\n**حلقة إعادة توجيه أو خطأ «Unable to find valid origin»** — `NEXT_PUBLIC_WEBAPP_URL` لا يطابق الرابط الفعلي. تحقق من أن هذا المتغير يساوي بالضبط `https:\u002F\u002Frdv.yourdomain.com` (بدون شرطة مائلة في النهاية، بالنطاق الصحيح وبروتوكول ‎HTTPS‎)، وأن الوكيل العكسي لا يُعدِّل رأس ‎Host‎، ثم أعِد التشغيل بـ`docker compose up -d --build` لإجبار إعادة البناء بالرابط الصحيح.",{"type":76,"body":100},"أتمِت نسخ قاعدة بيانات ‎PostgreSQL‎ احتياطيًا بمهمة ‎cron‎ يومية. مثال على الأمر المجدوَل: `docker exec cal-docker-db-1 pg_dump -U calcom calcom | gzip > \u002Fopt\u002Fbackup\u002Fcalcom-$(date +%Y%m%d-%H%M).sql.gz`. احتفظ بسبعة أيام على الأقل من النسخ الاحتياطية الدورية وأرسِلها إلى تخزين كائنات خارجي (‎S3‎-متوافق، ‎Backblaze B2‎): في حال فقدان الخادم ‎VPS‎، قاعدة بيانات ‎PostgreSQL‎ هي الجزء الوحيد غير القابل للاستعادة تلقائيًا في نسختك من ‎Cal.com‎.","استضف نظام حجز مواعيدك","يوفّر خادم ServOrbit Cloud VPS ذاكرة RAM وDocker اللازمين لبناء Cal.com، مع قالب PostgreSQL ووكيل عكسي جاهزين للإعداد. امنح عملاءك رابط حجز تحت نطاقك الخاص.","انشر على خادم Cloud VPS","\u002Fvps-cloud",[106,122,138],{"id":107,"slug":108,"slugs":109,"title":112,"excerpt":113,"readTime":114,"views":15,"isPinned":16,"publishedAt":115,"category":116,"categories":117,"featuredImage":26,"bgImage":27,"posterImage":119,"relatedSolution":120},71,"استضافة-nextcloud-على-خادمك-الـvps-الخاص",{"fr":110,"en":111,"ar":108},"heberger-nextcloud","hosting-nextcloud-on-your-own-vps","‎Nextcloud‎ على ‎VPS‎ : الدليل الكامل ‎NC 34‎ والأمان","‏انشر ‎Nextcloud 34.0.2‎ على ‎VPS‎ الخاص بك مع ‎Docker‎ و‎Redis‎. دليل شامل: تطبيقات ‎NC 34.0.0‎ المفقودة وقيد ‎oc_filecache_extended‎ على ‎PostgreSQL‎ وثغرات ‎CVE‎.",12,"2026-04-10T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},[118],{"id":19,"name":20,"slug":21,"color":22,"icon":23},"\u002Fblog\u002Fcovers\u002Fheberger-nextcloud-poster.svg",{"categorySlug":21,"appSlug":121},"nextcloud",{"id":123,"slug":124,"slugs":125,"title":128,"excerpt":129,"readTime":130,"views":15,"isPinned":16,"publishedAt":131,"category":132,"categories":133,"featuredImage":26,"bgImage":27,"posterImage":135,"relatedSolution":136},72,"استضافة-ghost-على-خادمك-الـvps-الخاص",{"fr":126,"en":127,"ar":124},"heberger-ghost","hosting-ghost-on-your-own-vps","استضافة Ghost على خادمك الـVPS: دليل شامل 2026","نشر Ghost v6 على خادمك الـVPS مع Caddy وMySQL وGhost CLI وStripe Tax: التثبيت ووكيل TLS العكسي والتحديثات واستكشاف أخطاء البدء الشائعة.",9,"2026-04-09T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},[134],{"id":19,"name":20,"slug":21,"color":22,"icon":23},"\u002Fblog\u002Fcovers\u002Fheberger-ghost-poster.svg",{"categorySlug":21,"appSlug":137},"ghost",{"id":139,"slug":140,"slugs":141,"title":144,"excerpt":145,"readTime":146,"views":15,"isPinned":16,"publishedAt":147,"category":148,"categories":149,"featuredImage":26,"bgImage":27,"posterImage":151,"relatedSolution":152},73,"استضافة-wordpress-على-خادم-vps-الخاص-بك",{"fr":142,"en":143,"ar":140},"heberger-wordpress","host-wordpress-on-your-own-vps","استضافة WordPress على خادم VPS الخاص بك","استضِف WordPress على خادم VPS الخاص بك لأقصى أداء وتحكّم: Docker وMariaDB والتخزين المؤقت (cache) وreverse proxy وSSL.",3,"2026-04-08T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},[150],{"id":19,"name":20,"slug":21,"color":22,"icon":23},"\u002Fblog\u002Fcovers\u002Fheberger-wordpress-poster.svg",{"categorySlug":21,"appSlug":153},"wordpress",1787580937609]