دليل النشر

‏استضافة ZITADEL على VPS: SSO متعدد المستأجرين

انشر على VPS Cloud ←

دليل عملي

‏استضافة ZITADEL على VPS: SSO متعدد المستأجرين

الأمان والمراقبة14 دقيقةً للقراءةعدد الخطوات: 10

‏‎ZITADEL‎ هو مزود هوية سحابي مكتوب بلغة ‎Go‎، مصمم من الأساس للفرق التي تدير عملاء أو مشاريع متعددة ومنفصلة. بينما يستلزم ‎Keycloak‎ إعداد realm لكل مستأجر، ويتعامل ‎Authentik‎ مع تعدد المستأجرين كميزة إضافية، يضع ‎ZITADEL‎ المؤسسات والمشاريع في صميم نموذج بياناته. يتمتع كل مستأجر بمستخدميه الخاصين وقواعد المصادقة الخاصة به وتطبيقاته المستقلة، دون أي تداخل مع المستأجرين الآخرين. ‏بصمته الذاكرية هي بصمة ثنائي ‎Go‎ — من 150 إلى 300 ميغابايت للحزمة الكاملة مع ‎PostgreSQL‎، مقارنةً بـ 512 ميغابايت إلى 1 غيغابايت من ‎JVM‎ لـ ‎Keycloak‎ في حالة الخمول. يدعم ‎OIDC‎ و‎OAuth2‎ و‎SAML 2.0‎ و‎LDAP‎ و‎Passkeys WebAuthn‎ منذ الإصدار الثاني، مع واجهة برمجية ‎gRPC/REST‎ تتيح أتمتة كاملة لإدارة المستأجرين.

المحتويات· ‏ZITADEL مقابل Keycloak مقابل Authentik: أيهما تختار لتطبيق B2B SaaS1/10
  1. 01‏ZITADEL مقابل Keycloak مقابل Authentik: أيهما تختار لتطبيق B2B SaaS
  2. 02‏لماذا يتميز ZITADEL للاستخدام في الوكالات و B2B SaaS
  3. 03‏المتطلبات الأساسية: الخادم وDocker وDNS
  4. 04‏نشر ZITADEL باستخدام Docker Compose وPostgreSQL
  5. 05‏تكوين مصادقة OIDC لتطبيقاتك
  6. 06‏نموذج متعدد المستأجرين: المؤسسات والمشاريع والتطبيقات
  7. 07‏ZITADEL مقابل Authentik مقابل Keycloak — مقارنة تقنية
  8. 08‏تفعيل Passkeys والمصادقة متعددة العوامل في ZITADEL v2
  9. 09‏استكشاف الأخطاء: الأخطاء الشائعة مع ZITADEL تحت Docker
  10. 10‏الخطوة التالية: تعمّق في مكدس SSO المستضاف ذاتياً

‏ZITADEL مقابل Keycloak مقابل Authentik: أيهما تختار لتطبيق B2B SaaS

‏‎Keycloak‎ هو المعيار التاريخي، غني بالميزات ومدعوم من ‎Red Hat‎. مشكلته على ‎VPS‎ المستضاف ذاتياً: ‎JVM‎. في حالة الخمول، يستهلك ‎Keycloak‎ بين 512 ميغابايت و1 غيغابايت من الذاكرة.

‏‎Authentik‎ (‏‎2026.8.2‎‏) هو الاختيار الطبيعي للفرق التي تريد ‎IdP‎ كاملاً مع واجهة رسومية وتدفقات بصرية. مكتوب بـ ‎Python/Django‎ ويتطلب ما لا يقل عن 1 غيغابايت من الذاكرة العاملة.

‏‎ZITADEL‎ (‏‎v2.x‎‏، ‎Go‎‏) هو الوحيد من بين الثلاثة الذي صمّم تعدد المستأجرين كبنية أولية من الدرجة الأولى. تنشئ المؤسسات المستقلة في تثبيت واحد — لكل عميل مساحته المعزولة تماماً.

‏لماذا يتميز ZITADEL للاستخدام في الوكالات و B2B SaaS

  • ‏تعدد المستأجرين الأصلي: المؤسسات والمشاريع بنى أولية في نموذج البيانات، وليست حلولاً مؤقتة
  • ‏مكتوب بـ ‎Go‎: ثنائي واحد، يبدأ في ثوانٍ، بصمة ذاكرة من 150 إلى 300 ميغابايت
  • ‏‎OIDC‎ و‎OAuth2‎ و‎SAML 2.0‎ و‎LDAP‎: جميع بروتوكولات المؤسسات في تثبيت واحد
  • ‏‎Passkeys‎ و‎WebAuthn‎ أصليان منذ ‎v2‎: يمكن لكل مؤسسة فرض استخدام ‎Passkeys‎ كعامل مصادقة وحيد
  • ‏‎API‎-أولاً بـ ‎gRPC/REST‎: كل عملية متاحة في وحدة التحكم متاحة أيضاً عبر واجهة برمجية
  • ‏إجراءات (‎webhooks‎/كود): منطق مخصص يُشغَّل عند أحداث المصادقة دون تعديل النواة
  • ‏نشر بدون حالة تطبيقية: ‎ZITADEL‎ يخزن كل شيء في ‎PostgreSQL‎ — لا ذاكرة تخزين مؤقتة موزعة
  • ‏رخصة ‎Apache 2.0‎: النواة مفتوحة المصدر بالكامل

‏المتطلبات الأساسية: الخادم وDocker وDNS

‏الحد الأدنى الموصى به للإنتاج هو 2 ‎vCPU‎ و4 غيغابايت من الذاكرة العشوائية — منها حوالي 300 ميغابايت تستخدمها ‎ZITADEL‎ نفسها، والباقي يذهب إلى ‎PostgreSQL‎ وخدمات أخرى.

‏البرامج المطلوبة: ‎Docker Engine 24+‎ و‎Docker Compose v2‎. يجب أن تكون المنافذ 80 و443 مفتوحة (‎nginx‎ سيتولى إنهاء ‎TLS‎). اسم نطاق يشير إلى ‎IP‎ الخاص بـ ‎VPS‎ الخاص بك.

‏قاعدة البيانات: ‎PostgreSQL 15‎ أو ‎16‎. يدعم ‎ZITADEL‎ أيضاً ‎CockroachDB‎ لعمليات النشر عالية التوافر، لكن على عقدة واحدة ‎VPS‎، يُعدّ ‎PostgreSQL‎ الاختيار الطبيعي.

‏نشر ZITADEL باستخدام Docker Compose وPostgreSQL

  1. ‏إنشاء هيكل مجلد العمل

    ‏اتصل بـ ‎VPS‎ الخاص بك عبر ‎SSH‎ وأنشئ المجلدات اللازمة:

    mkdir -p /opt/zitadel/{config,certs}
    cd /opt/zitadel
  2. ‏إنشاء ملف ‎.env مع الأسرار

    ‏توليد أسرار قوية:

    cat > /opt/zitadel/‎.env <<EOF
    POSTGRES_PASSWORD=$(openssl rand -base64 32 | tr -d '\n')
    ZITADEL_MASTERKEY=$(openssl rand -base64 32 | tr -d '\n' | head -c 32)
    ZITADEL_DOMAIN=sso.your-domain.com
    EOF
  3. ‏كتابة ملف docker-compose.yml

    ‏أنشئ ‎/opt/zitadel/docker-compose.yml‎ بخدمتي ‎PostgreSQL‎ و‎ZITADEL‎، وقم بتكوين اتصال قاعدة البيانات عبر متغيرات البيئة وعرض المنفذ 8080 لـ ‎nginx‎.

  4. ‏تكوين nginx كـ reverse proxy مع TLS

    ‏أنشئ كتلة خادم ‎nginx‎ لـ ‎sso.your-domain.com‎ تعيد توجيه ‎HTTP‎ إلى ‎HTTPS‎ وتوكل الطلبات إلى ‎http://127.0.0.1:8080‎. احصل على شهادة ‎Let's Encrypt‎ مع ‎Certbot‎.

  5. ‏تشغيل حزمة ZITADEL

    cd /opt/zitadel
    docker compose up -d
    docker compose logs -f zitadel

    ‏انتظر ظهور ‎server is listening on [::]:8080‎ في السجلات.

  6. ‏استرداد بيانات اعتماد المسؤول الأولية

    docker compose logs zitadel 2>&1 | grep -A 5 'initial'

    ‏تظهر بيانات الاعتماد مرة واحدة فقط في السجلات. دوّنها في مدير الأسرار الخاص بك.

  7. ‏تسجيل الدخول إلى وحدة تحكم الإدارة

    ‏افتح ‎https://sso.your-domain.com/ui/console‎ في متصفحك. سجل الدخول ببيانات الاعتماد المسترجعة.

  8. ‏إنشاء أول مؤسسة عميل

    ‏في وحدة التحكم، انتقل إلى المؤسسة ← مؤسسة جديدة. أعطها اسم عميلك. ينشئ ‎ZITADEL‎ تلقائياً مساحة معزولة.

  9. ‏إنشاء مشروع وتطبيق OIDC

    ‏في المؤسسة، انتقل إلى المشاريع ← مشروع جديد. أنشئ تطبيق ويب من نوع OIDC. سيولّد ‎ZITADEL‎ معرّف العميل والسر.

  10. ‏التحقق من الصحة وتثبيت إصدار الصورة

    curl -s https://sso.your-domain.com/healthz | jq .

    ‏استجابة ‎{"status": "pass"}‎ تؤكد أن ‎ZITADEL‎ يستجيب بشكل صحيح.

‏تكوين مصادقة OIDC لتطبيقاتك

‏بمجرد تشغيل ‎ZITADEL‎ وإنشاء تطبيق ‎OIDC‎، يكون الإعداد من جانب العميل معيارياً — أي مكتبة ‎OIDC‎ تعمل دون تكيف خاص بـ ‎ZITADEL‎.

‏المعاملات الأساسية:

ISSUER=https://sso.your-domain.com
CLIENT_ID=<معرف_العميل_المولّد>
CLIENT_SECRET=<سر_العميل_المولّد>
REDIRECT_URI=https://your-app.com/callback
SCOPES=openid profile email

‏مستند الاكتشاف متاح على ‎https://sso.your-domain.com/.well-known/openid-configuration‎. بالنسبة لتطبيقات ‎SPA‎، استخدم تدفق ‎PKCE‎ بدون سر جانب العميل.

‏نموذج متعدد المستأجرين: المؤسسات والمشاريع والتطبيقات

‏نموذج بيانات ‎ZITADEL‎ منظم في ثلاثة مستويات تتوافق تماماً مع احتياجات الوكالة أو ‎B2B SaaS‎.

‏المؤسسة هي حاوية المستأجر. لكل مؤسسة مستخدموها الخاصون، ومزودو الهوية الخارجيون وسياسات كلمة المرور الخاصة بها.

‏المشروع يجمع تطبيقات منتج واحد. يمكن أن يحتوي المشروع على تطبيق ويب وتطبيق جوال وواجهة برمجية — جميعها تشترك في نفس الأدوار والأذونات.

‏التطبيق يمثل عميل ‎OIDC‎ أو ‎OAuth2‎ أو ‎SAML‎ محدداً. يُمكّن هذا النموذج وكالةً من إدارة عشرة عملاء على تثبيت ‎ZITADEL‎ واحد دون أي خطر تلوث بين المستأجرين.

‏ZITADEL مقابل Authentik مقابل Keycloak — مقارنة تقنية

مرّر الجدول أفقيًا

‏المعيار‏ZITADEL v2.x‏Authentik 2026.8‏Keycloak 26.7
‏اللغة / بيئة التشغيل‏Go — ثنائي واحد‏Python + Rust (واجهة أمامية)‏Java (JVM)
‏ذاكرة الحزمة الكاملة (خمول)‏150 – 300 ميغابايت‏~1 غيغابايت‏512 ميغابايت – 1 غيغابايت
‏تعدد المستأجرين الأصلي‏نعم — بنية المؤسسات الأولية‏جزئي — مستأجرون منفصلون‏جزئي — realms منفصلة
‏OIDC / OAuth2 / SAML‏نعم — الثلاثة أصليان‏نعم — الثلاثة أصليان‏نعم — الثلاثة أصليان
‏Passkeys / WebAuthn‏نعم، أصلي v2‏نعم (2026.2+)‏نعم (v21+)
‏API أولاً‏gRPC + REST، تغطية 100%‏REST جزئي‏REST جزئي
‏واجهة الإدارة‏وحدة تحكم ويب + API‏واجهة كاملة مع تدفقات بصرية‏واجهة كاملة، إعداد XML
‏الرخصة‏Apache 2.0 (النواة)‏MIT / Enterprise‏Apache 2.0

‏تفعيل Passkeys والمصادقة متعددة العوامل في ZITADEL v2

‏يقدم ‎ZITADEL v2‎ ‏‎Passkeys WebAuthn‎ كعامل مصادقة أساسي. لتفعيلها في مؤسسة:

1. افتح المؤسسة ← سياسة الأمان ← سياسة MFA
2. فعّل Passkeys وحدد إلزامي إذا أردت أن يستخدم جميع المستخدمين ‎Passkeys‎ فقط
3. لسياسة أكثر مرونة: اسمح بـ ‎Passkeys‎ وـ ‎TOTP‎ معاً — يختار المستخدم عند التسجيل

‏‎ZITADEL‎ يدعم أيضاً ‎TOTP‎ المعياري (‎Google Authenticator‎، أي تطبيق متوافق مع ‎RFC 6238‎) ومفاتيح الأمان المادية ‎U2F/FIDO2‎ (‎YubiKey‎، إلخ).

‏استكشاف الأخطاء: الأخطاء الشائعة مع ZITADEL تحت Docker

‏‎masterkey must be 32 characters‎: استخدم ‎openssl rand -hex 16‎ (32 حرفاً سداسياً = 16 بايت) للحصول على مفتاح بطول صحيح.

‏‎connection refused‎ على المنفذ 8080 والحاوية تعمل: ‎ZITADEL‎ لا يستجيب إلا بعد اكتمال الترحيلات — انتظر ‎server is listening on [::]:8080‎ في السجلات.

‏حلقة إعادة التوجيه ‎HTTP/HTTPS‎: تأكد أن ‎proxy_set_header X-Forwarded-Proto https‎ موجود في كتلة ‎location /‎ بـ ‎nginx‎.

‏‎invalid_client‎ أثناء تدفق ‎OIDC‎: تأكد أن عنوان ‎URL‎ لإعادة التوجيه يتطابق تماماً مع ما هو مُعلن في تطبيق ‎ZITADEL‎.

‏بيانات اعتماد المسؤول مفقودة: احذف قاعدة البيانات (docker compose down -v) وأعد تشغيل start-from-init. في الإنتاج، أنشئ حساب مسؤول ثانياً فوراً.

‏الخطوة التالية: تعمّق في مكدس SSO المستضاف ذاتياً

‏‎ZITADEL‎ في الإنتاج على ‎VPS‎ هو خطوة أولى ممتازة. للتعمق أكثر:

- ‏[نشر ‎ZITADEL‎ على ‎VPS‎ — دليل متقدم](/deployer-zitadel-vps): شهادات ‎TLS‎ تلقائية مع ‎Let's Encrypt‎، نسخ احتياطي لـ ‎PostgreSQL‎ إلى ‎S3‎.
- ‏[‎Authentik‎ مقابل ‎Authelia‎](/authentik-vs-authelia-sso-self-hosted): المقارنة بين أخف البدائل.
- ‏[الانتقال من ‎Keycloak‎](/keycloak-cves-semaine-38-migrer-authelia-zitadel-vps): تحليل الثغرات الست للأسبوع 38 ومسار الانتقال الفعلي.
- ‏[استضافة ‎Authelia‎ على ‎VPS‎](/self-host-authelia-vps): إذا كنت تبحث عن بوابة مصادقة خفيفة جداً.

انشر بنيتك التحتية اليوم

VPS Cloud. بيئات مُهيّأة مسبقًا متاحة.

مقالات ذات صلة

ZITADEL على VPS: منصة IAM مفتوحة المصدر للمطورين
الاستضافة الذاتية3 دقائق للقراءة

ZITADEL على VPS: منصة IAM مفتوحة المصدر للمطورين

انشر ZITADEL باستضافة ذاتية على VPS: OIDC وOAuth 2.0 ومفاتيح المرور وmulti-tenancy مع Docker Compose.

قراءة المقال ←
Authentik أم Authelia: أي SSO مستضاف ذاتياً لـ VPS؟
مقارنات9 دقائق للقراءة

Authentik أم Authelia: أي SSO مستضاف ذاتياً لـ VPS؟

Authentik أم Authelia لنظام SSO المستضاف ذاتياً؟ مقارنة تقنية: بروتوكولات OIDC/SAML، استهلاك الذاكرة، البنية وحالات الاستخدام.

قراءة المقال ←
‎Keycloak v26.7.4‎ : 6 ثغرات — ‎Authelia‎ أو ‎ZITADEL‎
الأمان والمراقبة12 دقيقةً للقراءة

‎Keycloak v26.7.4‎ : 6 ثغرات — ‎Authelia‎ أو ‎ZITADEL‎

‏Keycloak v26.7.4‏ يُصلح 6 ثغرات منها هجومان ‏DoS‏ دون مصادقة. لأقل من 10 تطبيقات ‏SSO‏ على ‏VPS‏، ‏Authelia‏ أو ‏ZITADEL‏ يُقلّصان سطح الهجوم.

قراءة المقال ←
Authelia على VPS: المصادقة الثنائية وSSO لعمليتك بأكملها
الأمان والمراقبة10 دقائق للقراءة

Authelia على VPS: المصادقة الثنائية وSSO لعمليتك بأكملها

دليل شامل لنشر Authelia على VPS باستخدام Docker Compose: التحكم المتقدم في الوصول، TOTP، WebAuthn/مفاتيح المرور، OIDC، الانتقال إلى LLDAP، مراقبة Prometheus، ومقارنة مع Authentik.

قراءة المقال ←

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة