دليل عملي

‫Pocket ID‬: مزود ‫OIDC‬ خفيف في حاوية واحدة

الأمان والمراقبة9 دقائق للقراءةعدد الخطوات: 8

تشغيل ‫Keycloak‬ أو ‫Authentik‬ كاملين من أجل ثلاثة أو أربعة خدمات ذاتية الاستضافة يعني نشر ‫JVM‬ أو تنسيق حاويات متعددة لحل مشكلة تتسع في ملف ثنائي واحد مكتوب بـ‫Go‬. ‫Pocket ID v2.18.0‬ (4 أكتوبر 2026) هو مزود ‫OpenID Connect‬ معتمد يعمل في حاوية واحدة، ويخزن بياناته في ‫SQLite‬، ويستهلك أقل من ‫50 MB‬ من الذاكرة في وضع الخمول، في حين يطلب ‫Keycloak‬ مئات الميغابايت. لا يدعم سوى ‫OIDC‬، ولا يقبل سوى مفاتيح المرور، وهذا بالضبط ما يجعل نشره ممكناً في خمس دقائق على أي خادم ‫VPS‬.

المحتويات· لماذا تستضيف مزود ‫OIDC‬ بنفسك1/10
  1. 01لماذا تستضيف مزود ‫OIDC‬ بنفسك
  2. 02ما تحصل عليه مع ‫OIDC IdP‬ ذاتي الاستضافة
  3. 03المتطلبات الرقمية
  4. 04تثبيت Pocket ID
  5. 05الإعداد بعد التثبيت
  6. 06تقوية الخادم
  7. 07استكشاف الأخطاء وإصلاحها
  8. 08الأخطاء الشائعة وحلولها
  9. 09‫Pocket ID‬ أم ‫Authentik‬ أم ‫Keycloak‬ أم ‫Authelia‬: أيّ تختار
  10. 10خلاصة

لماذا تستضيف مزود ‫OIDC‬ بنفسك

كل خدمة ذاتية الاستضافة تدير قاعدة مستخدميها الخاصة تُدخل اعتماداً يجب عليك الحفاظ عليه: كلمات مرور تُعاد تعيينها، حسابات تُلغى، جلسات تُبطل. مضروبة في خمس خدمات أو عشر، تصبح هذه المشكلة عبئاً تشغيلياً حقيقياً. يوحّد مزود الهوية (‫IdP‬) هذا العمل: مصدر هوية واحد، إلغاء يُطبّق في كل مكان، نقطة تهيئة ‫MFA‬ واحدة.

السؤال ليس إذا كنت بحاجة إلى ‫IdP‬، بل أيّه — وعلى أي أساس أنت مستعد لتشغيله.

ما تحصل عليه مع ‫OIDC IdP‬ ذاتي الاستضافة

  • هوية مركزية — حساب واحد لـ‫Gitea‬ و‫Nextcloud‬ و‫Grafana‬ وجميع الخدمات المتوافقة مع ‫OIDC‬.
  • إلغاء شامل — تعطيل حساب في ‫Pocket ID‬ يقطع الوصول إلى جميع التطبيقات المتصلة عند تجديد الرمز التالي.
  • مصادقة بمفاتيح المرور — ‫Touch ID‬ أو ‫Face ID‬ أو مفتاح ‫FIDO2‬ كعامل وحيد، دون كلمة مرور تُنقل.
  • لا اعتماد على السحابة — تبقى هوياتك تحت ولايتك القضائية، دون حصص مستخدمين أو تسعير لكل طلب.
  • بصمة دنيا — يستهلك ‫Pocket ID‬ أقل من ‫50 MB‬ من الذاكرة في وضع الخمول، مقارنة بـ‫300–600 MB‬ لـ‫Authentik‬ و‫1–2 GB‬ لـ‫Keycloak‬.
  • ‫SQLite‬ مدمج — لا حاجة لمحرك قاعدة بيانات خارجية.
  • ‫Back-channel logout‬ (الإصدار ‫v2.18.0‬) — عند تعطيل مستخدم أو إلغاء عميل، يُخطر ‫Pocket ID‬ التطبيقات المسجلة ويُبطل جلساتها من جانب الخادم.
  • حاوية واحدة — الخدمة بأكملها في صورة ‫Docker‬ بحجم ‫~30 MB‬، دون تبعية ‫Redis‬ أو عامل منفصل.

المتطلبات الرقمية

صُمّم ‫Pocket ID‬ للمجموعات الصغيرة. متطلباته منخفضة عن عمد:

- ‫Docker 24+‬ و‫Docker Compose v2‬ — مطلوبان من قِبل الصورة الرسمية.
- ‫512 MB RAM‬ كحد أدنى على الخادم — يعمل ‫Pocket ID‬ بأقل من ‫50 MB‬ في وضع الخمول؛ الباقي للنظام والبروكسي العكسي.
- نطاق وشهادة ‫TLS‬ — يشترط ‫OIDC‬ ‫HTTPS‬ دون استثناء.
- لا قاعدة بيانات خارجية — ‫SQLite‬ مدمج. إن فضّلت ‫PostgreSQL‬، يكفي تغيير متغير بيئة واحد.

لا يدعم ‫Pocket ID‬ ‫SAML‬ ولا ‫LDAP‬ ولا توحيد الدلائل. إن كانت مجموعتك تضم تطبيقات تقبل ‫SAML‬ فقط، أو إن كنت بحاجة إلى توحيد ‫Active Directory‬، فاختر ‫Authentik‬ أو ‫Keycloak‬ بدلاً من ذلك.

تثبيت Pocket ID

  1. إعداد خادم VPS والنطاق

    اطلب خادم ‫VPS‬ يعمل بـ‫Ubuntu 22.04‬ أو ‫Debian 12‬ بذاكرة ‫512 MB RAM‬ على الأقل. أنشئ سجل ‫DNS‬ من النوع ‫A‬ يشير auth.your-domain.com إلى عنوان ‫IP‬ الخادم.

    ثبّت ‫Docker‬ وإضافة ‫Compose‬:

    curl -fsSL https://get.docker.com | sh
  2. إنشاء دليل العمل

    على الخادم، أنشئ دليلاً مخصصاً:

    mkdir -p /opt/pocket-id && cd /opt/pocket-id
  3. كتابة ملف docker-compose.yml

    أنشئ /opt/pocket-id/docker-compose.yml:

    services:
      pocket-id:
        image: ghcr.io/pocket-id/pocket-id:v2.18.0
        container_name: pocket-id
        restart: unless-stopped
        ports:
          - "1411:1411"
        volumes:
          - ./data:/app/data
        environment:
          APP_URL: "https://auth.your-domain.com"
          TRUST_PROXY: "true"
  4. إعداد البروكسي العكسي nginx

    أنشئ الإعداد لـauth.your-domain.com. يستمع ‫Pocket ID‬ على ‫HTTP‬ على المنفذ ‫1411‬؛ يتولى البروكسي العكسي معالجة ‫TLS‬.

    server {
        listen 443 ssl http2;
        server_name auth.your-domain.com;
    
        ssl_certificate     /etc/letsencrypt/live/auth.your-domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/auth.your-domain.com/privkey.pem;
    
        proxy_buffer_size   256k;
        proxy_buffers       4 512k;
        proxy_busy_buffers_size 512k;
    
        location / {
            proxy_pass         http://127.0.0.1:1411;
            proxy_set_header   Host              $host;
            proxy_set_header   X-Real-IP         $remote_addr;
            proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }
    }

    احصل على الشهادة باستخدام ‫Certbot‬:

    certbot certonly --nginx -d auth.your-domain.com
    nginx -t && systemctl reload nginx
  5. تشغيل الحاوية

    من /opt/pocket-id:

    docker compose up -d
    docker compose logs -f pocket-id

    يؤكد سطر السجل Starting Pocket ID on :1411 أن الخادم جاهز. زُر https://auth.your-domain.com لإتمام الإعداد الأولي.

  6. إنشاء حساب المسؤول وتسجيل مفتاح مرور

    في الزيارة الأولى، يطلب ‫Pocket ID‬ إنشاء حساب المسؤول. أدخل بريدك الإلكتروني، ثم سجّل مفتاح مرور فوراً: انتقل إلى الإعدادات → مفاتيح المرور → إضافة واتبع مطالبة المتصفح (‫Touch ID‬ أو ‫Windows Hello‬ أو مفتاح ‫FIDO2‬).

  7. تسجيل أول تطبيق OIDC

    في واجهة الإدارة، افتح عملاء OIDC → عميل جديد. أدخل:
    - الاسم: معرّف مقروء للتطبيق (مثل Gitea)
    - عنوان URL للاستدعاء: عنوان إعادة التوجيه المُعلن في التطبيق العميل

    يُنشئ ‫Pocket ID v2.18.0‬ تلقائياً client_secret عند الإنشاء — استرجعه فوراً.

    لاحظ Client ID وعنوان الاكتشاف https://auth.your-domain.com/.well-known/openid-configuration.

  8. اختبار التدفق من التطبيق العميل

    في ‫Gitea‬، انتقل إلى الإدارة → مصادر المصادقة → إضافة → OAuth2. اختر ‫OpenID Connect‬ كمزود، وأدخل Client ID وClient Secret وعنوان الاكتشاف. شغّل اختبار تسجيل دخول: يجب أن يُعاد توجيه المتصفح إلى auth.your-domain.com، ويطلب مفتاح المرور المسجل، ثم يُعيد التوجيه إلى ‫Gitea‬ مع تسجيل دخول المستخدم.

الإعداد بعد التثبيت

بعد الإعداد الأولي، بعض الإعدادات تحسّن متانة الخادم.

تقوية الخادم

تقييد التسجيلات: عطّل التسجيل العام في الإعدادات ← عام ← السماح بالتسجيل وادعُ المستخدمين فردياً.

نسخ بيانات الخادم احتياطياً: تعيش جميع البيانات في ./data. نسخة rsync يومية إلى تخزين خارجي تكفي لخادم صغير.

تثبيت إصدار الصورة: استخدم v2.18.0 صراحةً ولا تترك latest في الإنتاج.

تحديد التعرض الشبكي: إذا كان ‫Pocket ID‬ لا يحتاج إلى الوصول إلا من الشبكة الداخلية للخادم، اربط المنفذ ‫1411‬ بواجهة loopback ودع ‫nginx‬ يتصل بالحاوية عبر شبكة ‫Docker‬ الداخلية.

استكشاف الأخطاء وإصلاحها

أكثر الأخطاء شيوعاً عند إعداد ‫Pocket ID‬ تتبع أنماطاً محددة.

الأخطاء الشائعة وحلولها

  • 502 Bad Gateway على جميع الصفحات — السبب الأكثر شيوعاً: مخازن ‫nginx‬ المؤقتة صغيرة جداً لرؤوس استجابة ‫OIDC‬ في ‫Pocket ID‬. أضف proxy_buffer_size 256k وproxy_buffers 4 512k وproxy_busy_buffers_size 512k في كتلة location / وأعد تحميل ‫nginx‬.
  • redirect_uri_mismatch أثناء تسجيل الدخول — عنوان ‫Callback URL‬ المُعلن في ‫Pocket ID‬ لا يتطابق تماماً مع ذلك الذي يرسله التطبيق العميل. تحقق من وجود شرطة مائلة في النهاية، والمخطط http مقابل https، ورقم المنفذ.
  • invalid_client عند تبادل الرمز — client_secret الذي يرسله التطبيق لا يتطابق. في ‫v2.18.0‬، يُنشئ ‫Pocket ID‬ سراً تلقائياً عند إنشاء العميل؛ إن لم تحفظه، أعد إنشاء واحد من سجل العميل في لوحة الإدارة.
  • رفض مفتاح المرور: NotAllowedError — المتصفح لا يمكنه الوصول إلى واجهات ‫WebAuthn‬ بدون ‫HTTPS‬. تحقق من أن APP_URL مضبوط على https://... وأن شهادة ‫TLS‬ صالحة.
  • عدم إبطال الجلسات بعد الإلغاء — يتطلب ‫back-channel logout‬ أن يُعلن التطبيق العميل Backchannel Logout URL في سجل ‫OIDC‬ الخاص به. تحقق من ملء هذا الحقل وإمكانية الوصول إليه من حاوية ‫Pocket ID‬.

‫Pocket ID‬ أم ‫Authentik‬ أم ‫Keycloak‬ أم ‫Authelia‬: أيّ تختار

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

المعيار‫Pocket ID 2.18‬‫Authelia 4.39‬‫Authentik 2026.8‬‫Keycloak 26‬
بروتوكولات ‫IdP‬‫OIDC/OAuth2‬‫OIDC/OAuth2‬ (تجريبي)‫OIDC, SAML 2.0, LDAP, SCIM‬‫OIDC, SAML 2.0, LDAP, Kerberos‬
المصادقةمفاتيح المرور فقط (‫FIDO2‬)كلمة مرور + ‫MFA‬، مفاتيح المروركلمة مرور + ‫MFA‬، مفاتيح المروركلمة مرور + ‫MFA‬، ‫OTP‬
الذاكرة في وضع الخمولأقل من ‫50 MB‬~‫30 MB‬‫200–400 MB‬‫1–2 GB‬
قاعدة البيانات‫SQLite‬ مدمج (أو ‫PostgreSQL‬)ملف ‫YAML‬ (أو خلفية خارجية)‫PostgreSQL‬ مطلوب‫PostgreSQL‬ موصى به
عدد الحاويات113 (‫server, worker, PostgreSQL‬)2 (‫Keycloak‬ + قاعدة بيانات)
إدارة المستخدميندليل مدمج، دعوة بالبريد الإلكترونيملف ‫YAML‬ أو مزود خارجيدليل مدمج، ‫LDAP‬، وكيل اجتماعيدليل مدمج، توحيد ‫LDAP/AD‬
الأنسب لـمجموعة خفيفة، مفاتيح مرور، ‫IdP‬ بسيططبقة ‫forward-auth‬ أمام البروكسي‫SSO‬ كامل، ‫SAML‬، تدفقات بصرية‫SSO‬ المؤسسات، متعدد المستأجرين، الامتثال

خلاصة

يجيب ‫Pocket ID v2.18.0‬ على حاجة محددة: مركزة المصادقة لمجموعة خدمات ذاتية الاستضافة دون التكلفة التشغيلية لـ‫Keycloak‬ أو ‫Authentik‬. حاوية واحدة، ‫SQLite‬، مفاتيح مرور، وأقل من ‫50 MB‬ من الذاكرة في وضع الخمول. يُضيف الإصدار ‫2.18.0‬ ‫back-channel logout‬ لإبطال جلسات التطبيقات فور إلغاء حساب، ويستعيد الإنشاء التلقائي لـ‫client secret‬.

إن كانت مجموعتك تضم تطبيقات تقبل ‫SAML‬ فقط أو كنت بحاجة إلى توحيد ‫Active Directory‬، فـ‫Authentik‬ أو ‫Keycloak‬ أنسب. لكل شيء آخر — خدمات ويب حديثة على خادم ‫VPS‬ بـ‫1 أو 2 GB‬ — يترك لك ‫Pocket ID‬ الذاكرة لبقية مجموعتك.

انشر مزود ‫OIDC‬ الخاص بك على ‫VPS‬

خادم ‫VPS‬ من ‫ServOrbit‬ مع ‫Docker 24+‬ يكفي لتشغيل ‫Pocket ID‬ في بيئة الإنتاج. حاوية واحدة، عنوان ‫IPv4‬ مخصص، وتطبيقاتك آمنة دون أي اعتماد على السحابة.

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

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

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