[{"data":1,"prerenderedAt":208},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-logto-على-خادم-افتراضي-طبقة-المصادقة-عندك-ma-ar":6,"promo-bar-likely":207},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-logto-على-خادم-افتراضي-طبقة-المصادقة-عندك-ma-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":137,"ctaBody":138,"ctaButton":139,"ctaUrl":140,"relatedPosts":141},226,"استضافة-logto-على-خادم-افتراضي-طبقة-المصادقة-عندك",{"fr":12,"en":13,"ar":10,"es":14},"self-host-logto-vps","self-host-logto-on-a-vps-your-own-authentication-layer","autoalojar-logto-en-un-vps","استضافة Logto على خادم VPS: طبقة المصادقة عندك","انشر Logto على خادمك الافتراضي من ServOrbit: مصادقة OIDC، دخول اجتماعي، MFA وحزم SDK — بلا تسعير لكل مستخدم ولا بيانات لدى طرف ثالث.",10,1,false,"2026-08-05T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},4,"التطوير","developpement","bg-warning\u002F10 text-warning","dev",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-logto-vps-poster.svg",{"categorySlug":34,"appSlug":35},"الأمن-السيبراني-والحصن","logto","تُفوتر خدمات المصادقة المستضافة بحسب المستخدم النشط شهرياً، وتحتفظ ببيانات تسجيل دخول مستخدميك على خوادمها. Logto هو البديل مفتوح المصدر: منصة مصادقة OIDC\u002FOAuth 2.0 كاملة تنشرها على خادمك الخاص وتتحكم بها من الألف إلى الياء. ملف Docker Compose واحد، حاويتان (Logto وPostgreSQL 17)، وتصبح تطبيقاتك مجهّزة بمصادقة جاهزة للإنتاج — تسجيل، دخول اجتماعي، MFA، تحكم في الوصول حسب الأدوار — بلا تكلفة لكل مستخدم.",[38,42,45,48,58,80,95,98,101,131,134],{"type":39,"title":40,"body":41},"h2","ما هو Logto — وما ليس هو","Logto هو **منصة مصادقة تُسلَّم كحزمة تطوير**: تدمجها في شيفرة تطبيقك في نحو خمسة عشر سطراً، فتتكفّل بدورة حياة الحسابات كاملة على خادمك أنت. وهذا يختلف عن أداتَي المصادقة الأخريين في كتالوج ServOrbit:\n\n- **Authelia** يضيف المصادقة الثنائية والدخول الموحّد *أمام* تطبيقات قائمة، عبر التفويض، من دون المساس بشيفرتها — فهو يحمي تطبيقات لا تملك شاشة دخول أصلاً.\n- **Authentik** مزوّد هوية كامل، لتوحيد الدخول إلى أدواتك المستضافة ذاتياً (‎Grafana وGitea وNextcloud).\n- **Logto** يحلّ محلّ خدمة مصادقة مستضافة: تستدعي حزمته من تطبيقك بلغة React أو Python أو Go، فيدير الحسابات والجلسات والموصلات الاجتماعية والرموز.\n\nإن كنت تبني منتجاً ينشئ فيه المستخدمون حسابات، فـ Logto هو الأداة المناسبة.",{"type":39,"title":43,"body":44},"المتطلبات","قبل نشر ‎Logto 1.19+، تحقّق من النقاط التالية على خادمك الافتراضي في ServOrbit:\n\n- **الذاكرة**: ‏**2 غيغابايت على الأقل** (يُنصح بـ 4 غيغابايت إن كنت تتوقع أكثر من 5 000 مستخدم نشط). يعمل Logto على ‎Node.js 20 LTS ويتشارك النسخة نفسها مع ‎PostgreSQL 17.\n- **المعالج**: يكفي ‎1 vCPU للبدء، لكن ‎2 vCPU يتجنّبان تأخيرات الدخول تحت الحمل.\n- **التخزين**: احجز ‏**10 غيغابايت على الأقل** — يخصّص PostgreSQL سجلات WAL وتتراكم الجلسات النشطة بسرعة مع تسجيل التدقيق الافتراضي.\n- **‏Docker** ‏≥ 24.0 و**Docker Compose** ‏≥ 2.20 — مثبّتان مسبقاً في جميع باقات ServOrbit.\n- **‏PostgreSQL 17 كحدّ أدنى** (مضمّن في صورة Logto الرسمية) — الإصدارات الأقدم تفتقر إلى الامتدادات المطلوبة.\n- **اسم نطاق أو نطاق فرعي** موجّه إلى خادمك ومُحلَّل علناً: يضمّن Logto هذا النطاق في كل رمز OIDC يصدره. يجب تحديده **قبل** أول تشغيل ولا يمكن تغييره دون إعادة تهيئة جميع بيانات المستخدمين.",{"type":39,"title":46,"body":47},"كيف يعمل Logto في الإنتاج","يشغّل Logto حاويتين: ‎`db` (وهي ‎PostgreSQL 17 للمستخدمين والتطبيقات والجلسات وسجلّ التدقيق) و‎`logto` (وهي ‎Node.js التي تخدم نقطة OIDC على المنفذ ‎3001 ووحدة الإدارة على المنفذ ‎3002). ويحوّل الوكيل العكسي ‎nginx على خادمك حركة HTTPS القادمة إلى نطاقك نحو المنفذ ‎3001 — وهي النقطة التي تصادق عليها تطبيقاتك. أما المنفذ ‎3002 فمرتبط بالعنوان المحلي فقط، ولا يُبلغ إلا عبر نفق SSH، وهو ما يبقي إدارة قاعدة المستخدمين بعيداً عن الإنترنت العام.",{"type":49,"title":50,"items":51},"ul","ما يقدّمه Logto فور التثبيت",[52,53,54,55,56,57],"**رموز مطابقة لـ OIDC\u002FOAuth 2.0** — رموز JWT موقّعة تتحقّق منها أي مكتبة قياسية (‎passport.js أو ‎python-jose أو ‎go-oidc) من دون شيفرة خاصة.","**موصلات تسجيل دخول اجتماعي** — فعّل ‎Google وGitHub وApple وMicrosoft وDiscord ونحو ثلاثين مزوّداً آخر من وحدة الإدارة بنقرة واحدة.","**مصادقة بلا كلمة مرور** — روابط سحرية بالبريد أو رموز لمرة واحدة بالرسائل القصيرة (‎Twilio أو ‎SendGrid أو ‎Mailgun)، من دون صيانة خدمة إشعارات منفصلة.","**المصادقة الثنائية** — رموز TOTP (‎Google Authenticator وAuthy)، ومفاتيح عتادية بمعيار ‎WebAuthn\u002FFIDO2، ورموز احتياطية، تُفرض بسياسة من وحدة الإدارة.","**التحكّم بالوصول حسب الأدوار** — عرّف الأدوار والصلاحيات في وحدة الإدارة، واستقبلها ضمن مطالبة ‎`scope` في رمز JWT، وطبّقها في واجهتك البرمجية بسطر وسيط واحد.","**حزم تطوير لأكثر من عشرين إطاراً** — React وNext.js وVue وAngular وReact Native وFlutter وPython وFastAPI وGo وPHP وLaravel و‎.NET وJava وSpring Boot وغيرها.",{"type":59,"title":60,"steps":61},"steps","النشر عبر Docker Compose خطوة بخطوة",[62,65,68,71,74,77],{"title":63,"body":64},"إنشاء المجلد وملف Compose","اتصل بخادمك عبر SSH ثم أنشئ مجلد العمل:\n\n```\nmkdir -p \u002Fopt\u002Flogto && cd \u002Fopt\u002Flogto\n```\n\nأنشئ ملف ‎`docker-compose.yml` بالمحتوى التالي. استبدل ‎`auth.your-domain.com` بنطاقك الخاص.",{"title":66,"body":67},"توليد الأسرار وإنشاء ملف ‎.env","ولّد كلمة مرور قاعدة بيانات قوية ومفتاح AES-256:\n\n```bash\nDB_PASSWORD=$(openssl rand -hex 32)\nSECRET_VAULT_KEK=$(openssl rand -hex 32)\nprintf \"DB_PASSWORD=%s\\nSECRET_VAULT_KEK=%s\\n\" \"$DB_PASSWORD\" \"$SECRET_VAULT_KEK\" > ‎.env\nchmod 600 ‎.env\n```\n\nتأكد من أن ‎`.env` يحتوي على سطرين غير فارغَين قبل المتابعة.",{"title":69,"body":70},"ضبط nginx كوكيل عكسي","أنشئ المضيف الافتراضي ‎`\u002Fetc\u002Fnginx\u002Fsites-available\u002Flogto` وأعِد تشغيل ‎nginx بعد اختبار الإعداد:\n\n```bash\nnginx -t && systemctl reload nginx\n```",{"title":72,"body":73},"تشغيل المكدّس والتحقّق منه","شغّل الحاويتين:\n\n```bash\ndocker compose up -d\n```\n\nتابع السجلات لمدة 60 ثانية للتأكد من أن PostgreSQL جاهز وأن Logto أتمّ ترحيلاته. يجب أن ترى السطر ‎`App is running at https:\u002F\u002Fauth.your-domain.com`.",{"title":75,"body":76},"التحقّق من وثيقة اكتشاف OIDC","من جهازك المحلي، تحقّق من استجابة نقطة OIDC:\n\n```bash\ncurl -s https:\u002F\u002Fauth.your-domain.com\u002F.well-known\u002Fopenid-configuration | python3 -m json.tool | head -10\n```\n\nيجب أن تحتوي الاستجابة على ‎`issuer` و‎`authorization_endpoint` و‎`jwks_uri`. إن أعادت الأمر خطأ ‎502، فانتظر 30 ثانية وأعد المحاولة.",{"title":78,"body":79},"إعداد النسخ الاحتياطية التلقائية","أضف مهمة cron لتصدير قاعدة البيانات يومياً. للحصول على نسخ آلية مشفّرة نحو S3 أو Backblaze B2، اربط وحدة تخزين ‎`logto_db` بنسخة Backrest المتاحة في كتالوج ServOrbit.",{"type":59,"title":81,"steps":82},"أول تسجيل دخول",[83,86,89,92],{"title":84,"body":85},"فتح نفق SSH إلى وحدة الإدارة","تستمع وحدة الإدارة على المنفذ ‎3002، المرتبط بالعنوان المحلي لأسباب أمنية. من جهازك، افتح النفق:\n\n```bash\nssh -L 3002:127.0.0.1:3002 root@ip-of-your-vps\n```\n\nابقِ هذه النافذة مفتوحة طوال جلسة الإدارة.",{"title":87,"body":88},"إنشاء حساب المدير","افتح ‎`http:\u002F\u002Flocalhost:3002` في متصفحك. يظهر معالج أول تشغيل — لا توجد أي بيانات اعتماد افتراضية. أدخل عنوان بريد إلكتروني وكلمة مرور قوية، ثم انقر على ‎**Create account**. احفظ هذه البيانات في مدير كلمات المرور.",{"title":90,"body":91},"استكشاف لوحة المعلومات","بعد إنشاء الحساب، تصل إلى لوحة معلومات Logto. من هنا يمكنك الاطلاع على سجل التدقيق وإدارة المستخدمين وضبط الموصلات الاجتماعية وإنشاء **تطبيقات** — وهي الكيان في Logto الذي يمثّل أحد مشاريعك.",{"title":93,"body":94},"إنشاء تطبيقك الأول","في وحدة الإدارة: **‏Applications → Create application**. اختر النوع المناسب لمشروعك (Traditional Web أو Single Page App أو Native أو Machine-to-machine). أعطِه اسماً، ثم أدخل **‏Redirect URI** — العنوان الذي يعيد Logto التوجيه إليه بعد نجاح تسجيل الدخول. يولّد Logto عندئذ ‎`App ID` و‎`App Secret` اللذان ستستخدمهما في حزمة التطوير.",{"type":39,"title":96,"body":97},"دمج Logto في تطبيق Next.js","ثبّت حزمة التطوير بالأمر ‎`npm install @logto\u002Fnext`، ثم أنشئ ملف ‎`logto.ts` يصدّر ‎`new LogtoClient({ … })` مضبوطاً بـ ‎`endpoint` (عنوان نسخة Logto لديك) و‎`appId` و‎`appSecret` (من وحدة إدارة Logto) و‎`baseUrl` (عنوان تطبيقك) و‎`cookieSecret` و‎`cookieSecure`.\n\nولحماية مسار، استدعِ ‎`getLogtoContext({ getAccessToken: true })` المستورد من ‎`@logto\u002Fnext\u002Fserver-component`: فهو يعيد ‎`isAuthenticated` ومطالبات المستخدم. وإن كانت ‎`isAuthenticated` غير محقّقة فأعد التوجيه إلى ‎`\u002Fapi\u002Flogto\u002Fsign-in`، وإلا فاعرض الصفحة اعتماداً على المطالبات الواردة.",{"type":39,"title":99,"body":100},"تفعيل الدخول عبر Google","في وحدة تحكّم Google Cloud، أنشئ معرّف عميل OAuth 2.0 من نوع تطبيق ويب. اضبط عنوان إعادة التوجيه على ‎`https:\u002F\u002Fauth.your-domain.com\u002Fcallback\u002Fgoogle`، ثم انسخ معرّف العميل وسرّه.\n\nوفي وحدة إدارة Logto ← الموصلات ← الموصلات الاجتماعية ← ‏Google ← تفعيل. ألصق المعرّف والسرّ ثم احفظ. يظهر Google عندئذ خياراً للدخول في صفحة Logto لديك، من دون أي تعديل في شيفرة تطبيقك.",{"type":102,"title":103,"intro":104,"columns":105,"rows":110,"note":130},"comparison","Logto وAuthentik وAuthelia وKeycloak — أيهم تختار؟","أربعة حلول مفتوحة المصدر للمصادقة المستضافة ذاتياً، لكل منها حالة استخدام مختلفة. يقارن الجدول أدناه ثلاثة معايير تحدّد الاختيار عند التثبيت.",[106,107,108,109],"الحل","حالة الاستخدام الأساسية","الذاكرة الدنيا","تعقيد دمج حزمة SDK",[111,116,120,125],[112,113,114,115],"**Logto**","المصادقة لمنتج تبنيه (تسجيل، JWT، موصلات اجتماعية)","‏2 غيغابايت","منخفض — حزمة SDK رسمية في 15 سطراً لـ React وNext.js وPython وGo وFlutter وأكثر من 15 إطاراً آخر",[117,118,114,119],"**Authentik**","‏SSO مركزي لأدواتك المستضافة ذاتياً (Grafana وGitea وNextcloud وProxmox)","متوسط — الضبط عبر Providers في وحدة الإدارة، بلا SDK تطبيقية",[121,122,123,124],"**Authelia**","‏MFA وبوابة دخول أمام تطبيقات قائمة دون تعديل شيفرتها","‏256 ميغابايت","معدوم — تفويض مصادقة عبر ترويسة nginx، بلا دمج SDK",[126,127,128,129],"**Keycloak**","‏SSO مؤسسي، تفحيد LDAP\u002FAD، سيناريوهات متعددة المستأجرين المتقدمة","‏4 غيغابايت كحدّ أدنى","مرتفع — ضبط OIDC يدوي، مكتبات عميل تُعدّ لكل إطار","لمنتج SaaS قيد التطوير، Logto هو نقطة البداية الطبيعية. يناسب Keycloak المؤسسات التي تملك دليلاً مؤسسياً تريد دمجه. يلبّي Authelia وAuthentik احتياجات البنية التحتية لا التطبيقات.",{"type":39,"title":132,"body":133},"استكشاف الأخطاء الشائعة","إليك المشكلات الأربع الأكثر شيوعاً عند أول تثبيت لـ Logto على خادم افتراضي وكيفية حلّها.\n\n**وحدة الإدارة غير متاحة (المنفذ ‎3002)**\n\nالمنفذ ‎3002 مرتبط عمداً بـ ‎`127.0.0.1` — فلا يمكن الوصول إليه مباشرة من الإنترنت. إن لم يستجب ‎`http:\u002F\u002Flocalhost:3002`، تحقّق أولاً من أن نفق SSH مفتوح. ثم افحص أن حاوية Logto تعمل: ‎`docker compose ps`. إن كانت الحاوية في حالة ‎`Exit`، راجع السجلات: ‎`docker compose logs logto --tail=50`.\n\n**خطأ 502 في اكتشاف OIDC**\n\nيُنفّذ Logto ترحيلات قاعدة البيانات عند أول تشغيل، وتستغرق بين 30 و90 ثانية. إن أعاد ‎`\u002F.well-known\u002Fopenid-configuration` خطأ ‎502، فـ nginx يُمرّر الطلبات قبل أن يكون Logto جاهزاً. انتظر 90 ثانية وأعد المحاولة. إن استمرّ الخطأ، تحقّق من سلامة PostgreSQL.\n\n**عدم تطابق Redirect URI**\n\nيتحقّق Logto من عنوان إعادة التوجيه بدقة: إن لم يطابق العنوان المُرسَل من تطبيقك ما هو مُعلَن في وحدة الإدارة، يفشل تسجيل الدخول بخطأ ‎`redirect_uri_mismatch`. تأكد من تسجيل العنوان الكامل بما فيه المخطط ‎(`https:\u002F\u002F`) والمسار الدقيق. عناوين التطوير ‎(`http:\u002F\u002Flocalhost:3000\u002F…`) يجب إضافتها منفصلة.\n\n**Fatal: cannot connect to db**\n\nإن ظهر في سجلات Logto ‎`Fatal: cannot connect to db`، فـ PostgreSQL لم يكن جاهزاً لقبول الاتصالات حين حاول Logto الوصول إليه. أعد تشغيل حاوية Logto: ‎`docker compose restart logto`. ستُعاد المحاولة فور استعداد PostgreSQL.",{"type":39,"title":135,"body":136},"استراتيجية النسخ الاحتياطي","يحفظ Logto حالته كلها في وحدة تخزين ‎PostgreSQL باسم ‎`logto_db`. انسخها احتياطياً بمهمة ‎`pg_dump` مجدولة، أو اربط الوحدة بنسخة Backrest (وهي أيضاً في كتالوج ServOrbit) للحصول على نسخ آلية مشفّرة ومزالة التكرار نحو S3 أو Backblaze B2 أو SFTP. فقدان وحدة ‎`logto_db` يعني فقدان كل حسابات المستخدمين وإعدادات التطبيقات وسجلّ التدقيق — انسخها قبل أي ترحيل للخادم.","طبقة المصادقة لديك، على خادمك","انشر Logto على خادم افتراضي من ServOrbit: احتفظ ببيانات مصادقة مستخدميك، وتخلّص من الفوترة لكل مستخدم، وادمج حزم التطوير الخاصة بـ React وNext.js وPython وGo وFlutter وغيرها.","نشر Logto","\u002Fapplications\u002Fالأمن-السيبراني-والحصن\u002Flogto",[142,166,188],{"id":143,"slug":144,"slugs":145,"title":149,"excerpt":150,"readTime":151,"views":151,"isPinned":19,"noindex":19,"publishedAt":152,"updatedAt":153,"category":154,"categories":160,"featuredImage":30,"bgImage":31,"posterImage":162,"relatedSolution":163},111,"مركزة-المصادقة-باستخدام-authentik-على-خادم-vps",{"fr":146,"en":147,"ar":144,"es":148},"sso-authentik-vps","centralizing-authentication-with-authentik-on-vps","centralizar-autenticacion-con-authentik-en-vps","مركزة المصادقة باستخدام Authentik على خادم VPS","مركّز مصادقة جميع تطبيقاتك باستخدام Authentik ذاتي الاستضافة على خادم VPS: تسجيل دخول موحّد SSO، ومصادقة متعددة العوامل MFA، و forward auth عبر Docker Compose.",9,"2026-03-01T00:00:00+00:00","2026-10-31T01:54:10+00:00",{"id":155,"name":156,"slug":157,"color":158,"icon":159},8,"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[161],{"id":155,"name":156,"slug":157,"color":158,"icon":159},"\u002Fblog\u002Fcovers\u002Fsso-authentik-vps-poster.svg",{"categorySlug":164,"appSlug":165},"securite","authentik",{"id":167,"slug":168,"slugs":169,"title":173,"excerpt":174,"readTime":151,"views":18,"isPinned":19,"noindex":19,"publishedAt":175,"updatedAt":176,"category":177,"categories":183,"featuredImage":30,"bgImage":31,"posterImage":185,"relatedSolution":186},160,"كيفية-استضافة-infisical-ذاتيا-على-خادم-vps",{"fr":170,"en":171,"ar":168,"es":172},"self-host-infisical-vps","how-to-self-host-infisical-on-a-vps","como-autoalojar-infisical-en-un-vps","كيفية استضافة Infisical ذاتيًا على خادم VPS","انشر ‎Infisical‎ على خادم VPS في أقل من 20 دقيقة: RBAC وتدوير تلقائي وتكامل GitHub Actions و‎GitLab CI‎ واستكشاف أخطاء Redis و‎TLS‎.","2026-07-02T00:00:00+00:00","2026-10-16T01:57:38+00:00",{"id":178,"name":179,"slug":180,"color":181,"icon":182},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[184],{"id":178,"name":179,"slug":180,"color":181,"icon":182},"\u002Fblog\u002Fcovers\u002Fself-host-infisical-vps-poster.svg",{"categorySlug":34,"appSlug":187},"infisical",{"id":189,"slug":190,"slugs":191,"title":195,"excerpt":196,"readTime":197,"views":198,"isPinned":19,"noindex":19,"publishedAt":199,"updatedAt":200,"category":201,"categories":202,"featuredImage":30,"bgImage":31,"posterImage":204,"relatedSolution":205},131,"استضف-مدير-كلمات-المرور-بنفسك-انشر-vaultwarden-على-vps",{"fr":192,"en":193,"ar":190,"es":194},"deploy-vaultwarden-vps","self-host-your-password-manager-deploy-vaultwarden-on-vps","desplegar-vaultwarden-en-un-vps","نشر Vaultwarden على VPS: مدير كلمات مرور ذاتي الاستضافة","استضف Vaultwarden بنفسك على VPS: كلمات مرور غير محدودة، توافق مع Bitwarden، خزائن الفريق وTOTP، بتكلفة شهرية ثابتة وأقل من 50 ميغابايت من الذاكرة.",15,3,"2026-06-24T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":155,"name":156,"slug":157,"color":158,"icon":159},[203],{"id":155,"name":156,"slug":157,"color":158,"icon":159},"\u002Fblog\u002Fcovers\u002Fdeploy-vaultwarden-vps-poster.svg",{"categorySlug":159,"appSlug":206},"vaultwarden",true,1794270225797]