لماذا تستضيف مزود 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
إعداد خادم 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إنشاء دليل العمل
على الخادم، أنشئ دليلاً مخصصاً:
mkdir -p /opt/pocket-id && cd /opt/pocket-idكتابة ملف 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"إعداد البروكسي العكسي 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تشغيل الحاوية
من
/opt/pocket-id:docker compose up -d docker compose logs -f pocket-idيؤكد سطر السجل
Starting Pocket ID on :1411أن الخادم جاهز. زُرhttps://auth.your-domain.comلإتمام الإعداد الأولي.إنشاء حساب المسؤول وتسجيل مفتاح مرور
في الزيارة الأولى، يطلب Pocket ID إنشاء حساب المسؤول. أدخل بريدك الإلكتروني، ثم سجّل مفتاح مرور فوراً: انتقل إلى الإعدادات → مفاتيح المرور → إضافة واتبع مطالبة المتصفح (Touch ID أو Windows Hello أو مفتاح FIDO2).
تسجيل أول تطبيق OIDC
في واجهة الإدارة، افتح عملاء OIDC → عميل جديد. أدخل:
- الاسم: معرّف مقروء للتطبيق (مثلGitea)
- عنوان URL للاستدعاء: عنوان إعادة التوجيه المُعلن في التطبيق العميليُنشئ Pocket ID v2.18.0 تلقائياً
client_secretعند الإنشاء — استرجعه فوراً.لاحظ
Client IDوعنوان الاكتشافhttps://auth.your-domain.com/.well-known/openid-configuration.اختبار التدفق من التطبيق العميل
في 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 موصى به |
| عدد الحاويات | 1 | 1 | 3 (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 الذاكرة لبقية مجموعتك.