> ## Content Index
> Fetch the complete content index at: https://arabroot.io/llms.txt
> Use this file to discover other available public pages before exploring further.

# دخول موحد لجميع تطبيقاتك: تثبيت authentik باستخدام Docker Compose
- URL: https://arabroot.io/articles/تثبيت-authentik-للدخول-الموحد/
- Published: 2026-09-23T06:35:00.000Z
- Updated: 2026-10-05T06:20:42.000Z
- Description: حساب واحد لكل موظف يدخل به إلى جميع تطبيقات الفريق، بدلاً من حساب مستقل في كل خدمة. يشرح هذا الدليل تثبيت authentik وإعداده، وفرض المصادقة الثنائية على المستخدمين.
- Author: فريق عرب رووت
- Tags: الأدلة التقنية, الأمن والدخول الموحد, الاستضافة الذاتية, authentik

لنفرض أن فريقك يستخدم ثلاث خدمات على نفس السيرفر: Gitea للكود، وMattermost للمحادثات، وOutline للتوثيق، فسوف تجد أن كل خدمة منها تأتي بقاعدة مستخدمين User Database خاصة بها، وبالتالي فلكل موظف حساب في كل خدمة وكلمة مرور مختلفة في كل منها. والحل الأول الذي يخطر على البال هو أن تنشئ الحسابات يدوياً في كل خدمة وتنتهي المشكلة، ولكن هذا الحل يفشل في أول يوم يغادر فيه موظف الشركة، حيث يجب عليك أن تتذكر كل الأماكن التي له فيها حساب وتغلقها واحداً واحداً، وإذا نسيت مكاناً واحداً فسوف يبقى له باب مفتوح إلى بيانات الشركة دون أن تنتبه، وكلما زادت الخدمات زاد احتمال النسيان.

لذلك فالحل الأنسب هو **مزود الهوية** Identity Provider، وهو نظام واحد يحمل حساب كل شخص ويطبق سياسة واحدة لكلمات المرور ويفرض المصادقة الثنائية 2FA من مكان واحد، ثم يدخل منه الموظف إلى كل التطبيقات بالدخول الموحد Single Sign-On واختصاراً SSO [عبر OIDC أو SAML أو LDAP](https://docs.goauthentik.io/add-secure-apps/providers/?ref=arabroot.io)، وأما التطبيقات التي ليس فيها نظام دخول أصلاً فيحميها [عبر الـ Reverse Proxy](https://docs.goauthentik.io/add-secure-apps/providers/proxy/forward%5Fauth/?ref=arabroot.io)، وبالتالي عندما يغادر الموظف فأنت تعطل حساباً واحداً فقط فيغلق عليه كل الأبواب مرة واحدة.

📌

استقال المهندس Sudhish Kasaba Ramesh من Cisco في أبريل 2018 تقريباً، وفي 24 سبتمبر 2018، أي بعد خمسة أشهر من استقالته، دخل إلى البنية السحابية للشركة على AWS دون إذن ونشر كوداً حذف 456 جهازاً افتراضياً Virtual Machine لتطبيق WebEx Teams، فتوقف أكثر من 16,000 حساب لمدة وصلت إلى أسبوعين، وكلف ذلك Cisco نحو 1.4 مليون دولار من وقت موظفيها لإصلاح الضرر وأكثر من مليون دولار تعويضات للعملاء، وذلك بحسب [بيان وزارة العدل الأمريكية](https://www.justice.gov/usao-ndca/pr/san-jose-man-pleads-guilty-damaging-cisco-s-network?ref=arabroot.io) عند إقراره بالتهمة في أغسطس 2020\. ولا يذكر البيان كيف بقي الوصول متاحاً له، ولكن الدرس واضح: صلاحيات الموظف الذي يغادر يجب أن تغلق كلها في يوم مغادرته، وهذا أسهل كثيراً عندما تكون في مكان واحد.

و[**authentik**](https://goauthentik.io/?ref=arabroot.io) هو مزود هوية مفتوح المصدر Open Source، تثبته باثنين من الـ Containers وقاعدة بيانات Database من نوع PostgreSQL، وفي واجهته الإدارية Admin Interface كل ما يحتاجه فريق صغير أو مؤسسة متوسطة: المستخدمون والمجموعات Groups، والتطبيقات والمزودون Providers من نوع OAuth2/OIDC وSAML وLDAP وProxy، و[التدفقات](https://docs.goauthentik.io/add-secure-apps/flows-stages/flow/?ref=arabroot.io) Flows التي تحدد كل خطوة في تسجيل الدخول والتسجيل واستعادة كلمة المرور.

ويناسبك authentik إذا كانت لديك ثلاث خدمات أو أكثر تحتاج إلى دخول موحد، أو أدوات داخلية بلا نظام دخول وتريد حمايتها. وقد يتساءل البعض: لماذا لا أكتفي بـ Basic Auth في الـ Reverse Proxy؟ والإجابة أن Basic Auth يصلح لحماية لوحة واحدة بكلمة مرور واحدة، ولكنه لا يعرف من هو المستخدم ولا يفرض عليه مصادقة ثنائية ولا يسجل من دخل ومتى، فإذا كانت هذه حاجتك فعلاً فقد يكفيك، وإذا كانت مؤسستك تعمل أصلاً على [Keycloak](https://www.keycloak.org/?ref=arabroot.io) أو Active Directory فلا حاجة إلى طبقة جديدة.

وسوف نناقش في هذا المقال ما يلي:

- ما الذي تغير في الإصدارات الحديثة من authentik ويجعل كثيراً من الأدلة القديمة غير دقيقة.
- تثبيت authentik باستخدام Docker Compose وPostgreSQL، مع ملف Compose مبني على الملف الرسمي وأكثر أماناً منه.
- الإعداد الأولي وحساب المدير، ثم إنشاء المستخدمين والمجموعات وإعداد البريد الصادر.
- فرض المصادقة الثنائية TOTP على الجميع دون أن تغلق الباب على نفسك.
- ربط النطاق مع TLS، والنسخ الاحتياطي والاستعادة، والتحديث، وأشهر المشكلات وحلولها.

وهذا الدليل هو أول سلسلة، حيث نستخدم authentik بعده في [حماية أي تطبيق عبر Forward Auth](https://arabroot.io/articles/%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D8%A3%D9%8A-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-authentik-forward-auth/)، و[تسجيل الدخول بحساب Google](https://arabroot.io/articles/%D8%AA%D8%B3%D8%AC%D9%8A%D9%84-%D8%A7%D9%84%D8%AF%D8%AE%D9%88%D9%84-%D8%A8%D8%AD%D8%B3%D8%A7%D8%A8-google-%D9%81%D9%8A-authentik/)، و[ربط Gitea](https://arabroot.io/articles/%D8%B1%D8%A8%D8%B7-gitea-%D9%85%D8%B9-authentik-%D8%B9%D8%A8%D8%B1-oidc/) و[Outline](https://arabroot.io/articles/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-outline-%D9%84%D9%82%D8%A7%D8%B9%D8%AF%D8%A9-%D9%85%D8%B9%D8%B1%D9%81%D8%A9-%D8%A7%D9%84%D9%81%D8%B1%D9%8A%D9%82/) عبر OIDC.

## ما الذي تغير في الإصدارات الحديثة؟

إذا كنت قد ثبت authentik قبل سنة أو أكثر، أو تتبع دليلاً قديماً من الإنترنت، فهناك ثلاثة تغييرات سوف تجعل بعض خطواته غير صحيحة:

- **لم يعد يحتاج إلى Redis:** نقل authentik المهام الخلفية Tasks إلى PostgreSQL في الإصدار 2025.8، ثم نقل [في الإصدار 2025.10](https://docs.goauthentik.io/releases/2025.10/?ref=arabroot.io) التخزين المؤقت Cache وجلسات Sessions الـ outpost المدمج واتصالات WebSocket، وبالتالي لم يعد يستخدم Redis إطلاقاً، لذلك صار [ملف Compose الرسمي](https://goauthentik.io/docker-compose.yml?ref=arabroot.io) يضم ثلاث خدمات فقط هي postgresql وserver وworker، ولاحظ أن عدد اتصالات Connections قاعدة البيانات زاد بنحو 50٪ نتيجة لذلك.
- **صار مجلد البيانات `/data`** بدل المجلد القديم `/media` [منذ الإصدار 2025.12](https://docs.goauthentik.io/releases/2025.12/?ref=arabroot.io)، وفيه تحفظ الملفات المرفوعة Uploads مثل الشعارات والأيقونات، فإذا كنت تحدث تثبيتاً قديماً فعليك نقل محتوى المجلد القديم إلى `./data/media` قبل التشغيل بالملف الجديد.
- **يبدأ الإعداد الأولي Initial Setup من العنوان الرئيسي للموقع Root URL** ويطلب عنوان «Base URL» للنسخة، ولم يعد فتح `/if/flow/initial-setup/` مباشرة يكفي (انظر قسم المشكلات الشائعة). وفي [الإصدار 2026.8](https://docs.goauthentik.io/releases/2026.8/?ref=arabroot.io) صار authentik لا يثق بالـ Headers من نوع `X-Forwarded-*` إلا إذا جاءت من شبكة موثوقة Trusted Network يحددها المتغير `AUTHENTIK_LISTEN__TRUSTED_PROXY_CIDRS`.

## المتطلبات

- سيرفر Linux بمعالجين 2 vCPU وذاكرة RAM بحجم 2 GB [على الأقل](https://docs.goauthentik.io/install-config/install/docker-compose/?ref=arabroot.io)، و4 GB أفضل إذا كانت على السيرفر تطبيقات أخرى، وتكفي 5 GB من المساحة للبداية لأن الـ Image وحدها نحو 1 GB.
- Docker Engine مع إضافة Plugin [Compose v2](https://docs.docker.com/compose/install/linux/?ref=arabroot.io)، وإذا لم يكن مثبتاً فاتبع [دليل تثبيت Docker](https://arabroot.io/articles/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-docker-%D8%B9%D9%84%D9%89-ubuntu/) أولاً.
- نطاق فرعي Subdomain يشير إلى السيرفر، وهو في هذا الدليل `auth.example.com`، وReverse Proxy يصدر شهادة Certificate من نوع TLS مثل [Nginx Proxy Manager](https://arabroot.io/articles/nginx-proxy-manager-%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%88%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-tls/).
- المنفذان Ports رقم 80 و443 مفتوحان للـ Reverse Proxy فقط، ولا حاجة إلى كشف منافذ authentik الداخلية 9000 و9443 للإنترنت.
- حساب SMTP لإرسال البريد مثل رسائل استعادة كلمة المرور والدعوات، وتستطيع تأجيله أثناء التجربة، ولكن لا تنتقل إلى بيئة الإنتاج Production بدونه، والسبب أن المستخدم الذي ينسى كلمة مروره لن يستطيع استعادتها بنفسه.

## التثبيت

### هيكل المجلد

سوف نضع كل ما يخص authentik في مجلد واحد، فيسهل نسخه احتياطياً ونقله إلى سيرفر آخر:

```bash
sudo mkdir -p /opt/authentik/{data,certs,custom-templates}
cd /opt/authentik
```

وسيضم المجلد في النهاية الملفات `docker-compose.yml` و`.env`، والمجلد `data/` للملفات المرفوعة، و`certs/` للشهادات التي تريد استيرادها، و`custom-templates/` لقوالب Templates البريد أو الصفحات المخصصة، أما قاعدة البيانات نفسها فتحفظ في Docker volume اسمه `database`.

### ملف .env والأسرار Secrets

يحتاج authentik إلى سرين: كلمة مرور PostgreSQL، والمفتاح [AUTHENTIK\_SECRET\_KEY](https://docs.goauthentik.io/install-config/configuration/?ref=arabroot.io) الذي يوقع به الكوكيز Cookies والجلسات والتوكنات Tokens. ولا تقم بتغيير هذا المفتاح بعد التشغيل، والسبب أن تغييره يبطل كل الجلسات النشطة وبعض البيانات الموقعة، لذلك احفظه مع نسختك الاحتياطية Backup. والتوثيق الرسمي يولد السرين بصيغة base64، ونحن نستخدم hex لأن ناتجه حروف وأرقام فقط فلا يسبب مشكلة في ملف `.env`:

```bash
echo "PG_PASS=$(openssl rand -hex 32)" >> .env
echo "AUTHENTIK_SECRET_KEY=$(openssl rand -hex 50)" >> .env
chmod 600 .env
```

ثم أكمل الملف ببقية الإعدادات، وإعدادات البريد هنا عامة تصلح لأي مزود SMTP، وسوف نعود إليها في قسم البريد:

```ini
# نسخة authentik المثبتة (لا تستخدم latest)
AUTHENTIK_TAG=2026.8.3

# المنافذ على الخادم (مربوطة بـ 127.0.0.1 في ملف compose)
COMPOSE_PORT_HTTP=9000
COMPOSE_PORT_HTTPS=9443

# إرسال تقارير الأخطاء إلى مطوري authentik (اختياري)
AUTHENTIK_ERROR_REPORTING__ENABLED=false

# البريد الصادر (SMTP)
AUTHENTIK_EMAIL__HOST=smtp.example.com
AUTHENTIK_EMAIL__PORT=587
AUTHENTIK_EMAIL__USERNAME=authentik@example.com
AUTHENTIK_EMAIL__PASSWORD=change-me
AUTHENTIK_EMAIL__USE_TLS=true
AUTHENTIK_EMAIL__USE_SSL=false
AUTHENTIK_EMAIL__TIMEOUT=10
AUTHENTIK_EMAIL__FROM=authentik@example.com
```

⚠️

يجب ألا [يتجاوز طول كلمة مرور PostgreSQL 99 حرفاً](https://docs.goauthentik.io/install-config/install/docker-compose/?ref=arabroot.io) بسبب قيد في PostgreSQL نفسه، والأمر `openssl rand -hex 32` يعطيك 64 حرفاً. وتجنب الرموز الخاصة Special Characters مثل `$` و`#` في ملف `.env`، والسبب أن Compose قد يفسرها على أنها متغير أو تعليق فتصل كلمة المرور مقطوعة.

### ملف docker-compose.yml

هذا الملف مبني على [الملف الرسمي](https://goauthentik.io/docker-compose.yml?ref=arabroot.io) للإصدار 2026.8 مع ثلاثة تعديلات، وهو كما يلي:

```yaml
services:
  postgresql:
    image: docker.io/library/postgres:16-alpine
    restart: unless-stopped
    env_file: .env
    environment:
      POSTGRES_DB: authentik
      POSTGRES_USER: authentik
      POSTGRES_PASSWORD: ${PG_PASS:?database password required}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 20s
    volumes:
      - database:/var/lib/postgresql/data

  server:
    image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2026.8.3}
    restart: unless-stopped
    command: server
    env_file: .env
    environment:
      AUTHENTIK_POSTGRESQL__HOST: postgresql
      AUTHENTIK_POSTGRESQL__NAME: authentik
      AUTHENTIK_POSTGRESQL__USER: authentik
      AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
      AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required}
    shm_size: 512mb
    ports:
      - "127.0.0.1:${COMPOSE_PORT_HTTP:-9000}:9000"
      - "127.0.0.1:${COMPOSE_PORT_HTTPS:-9443}:9443"
    volumes:
      - ./data:/data
      - ./custom-templates:/templates
    depends_on:
      postgresql:
        condition: service_healthy
    networks:
      - default
      - proxy

  worker:
    image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2026.8.3}
    restart: unless-stopped
    command: worker
    env_file: .env
    environment:
      AUTHENTIK_POSTGRESQL__HOST: postgresql
      AUTHENTIK_POSTGRESQL__NAME: authentik
      AUTHENTIK_POSTGRESQL__USER: authentik
      AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
      AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required}
    shm_size: 512mb
    # root يسمح للـ worker بتصحيح صلاحيات المجلدات المربوطة
    user: root
    volumes:
      - ./data:/data
      - ./certs:/certs
      - ./custom-templates:/templates
    depends_on:
      postgresql:
        condition: service_healthy

volumes:
  database:

networks:
  proxy:
    external: true
```

في الإعداد أعلاه لاحظ التالي:

- ربطنا المنافذ بالعنوان `127.0.0.1` بدل نشرها على كل العناوين كما في الملف الرسمي، والسبب أن Docker يتجاوز جدار الحماية Firewall عند نشر المنافذ، فلا يصل إلى authentik من الخارج إلا الـ Reverse Proxy.
- ضممنا خدمة server إلى شبكة `proxy` المشتركة مع الـ Reverse Proxy، حتى يصل إليها باسم الـ Container دون منفذ منشور.
- حذفنا تمرير `docker.sock` إلى الـ worker، والتفصيل في الملاحظة التالية.

💡

يمرر الملف الرسمي `/var/run/docker.sock` إلى الـ worker حتى يتمكن authentik من إنشاء Containers لـ [outposts](https://docs.goauthentik.io/add-secure-apps/outposts/?ref=arabroot.io) تلقائياً، ولكن ذلك يعادل منحه صلاحية root كاملة على السيرفر، وغالب الظن أنك لن تحتاج إليه لأن الـ outpost المدمج في Container الـ server يكفي لمعظم الحالات ومنها Forward Auth. وإذا احتجت إليه لاحقاً فاستخدم [Docker Socket Proxy](https://github.com/Tecnativa/docker-socket-proxy?ref=arabroot.io) بدلاً من تمرير الـ Socket مباشرة.

### التشغيل ومتابعة السجلات Logs

الآن سوف نقوم بإنشاء شبكة `proxy` مرة واحدة إن لم تكن موجودة من تثبيت الـ Reverse Proxy، ثم نشغل الخدمات ونتابع سجلاتها:

```bash
docker network create proxy
```

```bash
docker compose pull
docker compose up -d
```

```bash
docker compose logs -f server worker
```

وفي التشغيل الأول ينفذ authentik مئات الترحيلات Migrations على قاعدة البيانات، وهذا يستغرق من دقيقتين إلى ربع ساعة بحسب سرعة القرص والمعالج، ويرد السيرفر خلالها بالرمز Status Code رقم 503، ثم يحتاج الـ worker إلى بضع دقائق بعدها حتى يجهز التدفقات الافتراضية، لذلك لا تستعجل وانتظر حتى يظهر كل Container في حالة `healthy`:

```bash
docker compose ps
```

## الإعداد الأولي وحساب المدير Admin Account

ينشئ authentik حساباً إدارياً اسمه `akadmin` بلا كلمة مرور، وأول من يفتح [صفحة الإعداد](https://docs.goauthentik.io/install-config/install/docker-compose/?ref=arabroot.io) هو من يحدد كلمة مروره، لذلك نفذ هذه الخطوة فور التشغيل ولا تترك النسخة متاحة على الإنترنت قبلها.

افتح العنوان الرئيسي للموقع، وهو `https://auth.example.com/` بعد إعداد الـ Reverse Proxy أو `http://127.0.0.1:9000/` عبر نفق SSH Tunnel، وسوف يحولك authentik إلى `/if/flow/initial-setup/`. أدخل بريد المدير وكلمة مرور قوية، وتأكد أن حقل **Base URL** فيه العنوان العام الذي سيستخدمه الموظفون دون مسار Path في آخره، والسبب أن authentik يبني منه الروابط التي يرسلها في البريد ويعطيها للتطبيقات.

![نموذج الإعداد الأولي في authentik بحقول البريد وكلمة المرور وعنوان Base URL](https://arabroot.io/content/images/2026/09/authentik-01-initial-setup.webp)

صفحة الإعداد الأولي: بريد المدير وكلمة مروره وعنوان النسخة

وبعد الضغط على Continue سوف تصل إلى واجهة المستخدم User interface، وهي الصفحة التي سيراها كل موظف وفيها التطبيقات المسموح له بها وإعدادات حسابه، أما زر **Admin interface** في أعلاها فلا يظهر إلا للمديرين.

![لوحة التطبيقات في واجهة المستخدم فارغة بعد التثبيت مباشرة](https://arabroot.io/content/images/2026/09/authentik-02-user-dashboard.webp)

واجهة المستخدم: هنا تظهر التطبيقات بعد ربطها

## ما الذي تضمه لوحة الإدارة؟

![الصفحة الرئيسية للوحة إدارة authentik تعرض حالة الـ outpost والإصدار والـ Workers والأحداث الأخيرة](https://arabroot.io/content/images/2026/09/authentik-03-admin-overview.webp)

لوحة الإدارة: الإصدار، وحالة الـ outpost المدمج، والـ Workers، وآخر الأحداث

القائمة الجانبية طويلة وقد تبدو مربكة من الوهلة الأولى، ولكنك في الواقع سوف تستخدم يومياً أقساماً قليلة منها، وهي كما يلي:

| القسم            | ماذا فيه                                                                                             | متى تحتاجه                                                                                                                            |
| ---------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Applications     | Applications وProviders وOutposts                                                                    | عند ربط كل تطبيق جديد، فالتطبيق هو ما يراه المستخدم، والمزود (OIDC أو SAML أو Proxy) هو طريقة الربط التقنية                           |
| Directory        | Users وGroups وRoles وFederation and Social login وTokens وInvitations                               | إدارة الحسابات والمجموعات، وربط [مصادر خارجية](https://docs.goauthentik.io/users-sources/sources/?ref=arabroot.io) مثل Google أو LDAP |
| Flows and Stages | التدفقات وخطواتها: الهوية، وكلمة المرور، وMFA، والموافقة Consent وغيرها                              | تخصيص تسجيل الدخول، وفرض المصادقة الثنائية، وإتاحة التسجيل الذاتي Self-Registration                                                   |
| Customization    | Policies وProperty Mappings وBlueprints                                                              | قواعد السماح والمنع، وتعديل البيانات المرسلة إلى التطبيقات                                                                            |
| Events           | سجل [الأحداث](https://docs.goauthentik.io/sys-mgmt/events/?ref=arabroot.io) والتنبيهات Notifications | التدقيق Audit: من دخل، ومتى، ومن أين، ومن غير ماذا                                                                                    |
| System           | Brands والشهادات وSettings                                                                           | الشعار واسم النظام، ومفاتيح التوقيع Signing Keys، والإعدادات العامة                                                                   |

وأول ما سوف تعدله هو **System ← Brands**، حيث تغير فيه [عنوان النظام Title والشعار](https://docs.goauthentik.io/customize/brands/?ref=arabroot.io) إلى هوية شركتك، والسبب أن صفحة الدخول هي أول ما يراه الموظف، وعندما يرى عليها اسم شركته وشعارها فسوف يثق بها ولا يظنها صفحة غريبة.

## إنشاء مستخدم ومجموعة

من **Directory ← Users** اضغط **New User**، وسوف يسألك authentik أولاً عن [نوع الحساب](https://docs.goauthentik.io/users-sources/user/?ref=arabroot.io): **Internal** للموظفين، و**External** للعملاء والمتعاقدين، و**Service Account** للأنظمة الآلية، فاختر Internal ثم أدخل اسم المستخدم والاسم الظاهر والبريد.

![نموذج إنشاء مستخدم داخلي باسم مستخدم واسم ظاهر وبريد إلكتروني](https://arabroot.io/content/images/2026/09/authentik-04-create-user.webp)

إنشاء مستخدم داخلي

والمستخدم الجديد يكون بلا كلمة مرور، وفي صفحته [خياران](https://docs.goauthentik.io/users-sources/user/user%5Fbasic%5Foperations/?ref=arabroot.io): الأول **Set password** حيث تعين كلمة المرور بنفسك ثم ترسلها إليه عبر قناة آمنة، والثاني **Create recovery link** حيث ترسل إليه رابطاً يختار منه كلمة مروره بنفسه. والخيار الثاني هو الأفضل بعد أن تعد البريد وتدفق الاستعادة Recovery Flow، والسبب أن كلمة المرور لا يعرفها أحد غير صاحبها.

وعلى [المجموعات](https://docs.goauthentik.io/users-sources/groups/?ref=arabroot.io) سوف تبني الصلاحيات Permissions لاحقاً، مثل من يدخل Gitea ومن يكون مديراً فيه. من **Directory ← Groups** اضغط **New Group** وسمها مثلاً `engineering`، ثم افتحها ومن تبويب **Users** اضغط **Add Existing User**.

![صفحة مجموعة engineering وفيها المستخدم sara في تبويب Users](https://arabroot.io/content/images/2026/09/authentik-05-group-members.webp)

مجموعة engineering بعد إضافة أول عضو

🛑

خيار **Superuser Privileges** في المجموعة يمنح أعضاءها صلاحيات إدارية كاملة على authentik، أي على مفاتيح كل تطبيقاتك، وهذا الخيار مفعل في المجموعة الجاهزة `authentik Admins`، لذلك لا تضف إليها إلا من يدير النظام فعلاً.

## إعداد البريد الصادر Outgoing Mail

يرسل authentik البريد عند استعادة كلمة المرور، ومع الدعوات، وللتحقق من البريد عند التسجيل، وفي التنبيهات، و[إعداداته](https://docs.goauthentik.io/install-config/configuration/?ref=arabroot.io) في ملف `.env` كما رأينا، وفيما يلي القيم الشائعة بحسب نوع الاتصال:

| نوع الاتصال                      | PORT | USE\_TLS | USE\_SSL |
| -------------------------------- | ---- | -------- | -------- |
| STARTTLS (الأكثر شيوعاً)         | 587  | true     | false    |
| TLS مباشر (SMTPS)                | 465  | false    | true     |
| سيرفر داخلي دون تشفير Encryption | 25   | false    | false    |

ولا تقم بتفعيل `USE_TLS` و`USE_SSL` معاً، والسبب أن الأول يبدأ الاتصال عادياً ثم يرقيه إلى TLS والثاني يبدأه مشفراً من أول بايت، فلا يجتمعان على منفذ واحد. وبعد تعديل `.env` أعد إنشاء الـ Containers حتى تقرأ القيم الجديدة، ثم أرسل رسالة اختبار من داخل الـ worker:

```bash
docker compose up -d --force-recreate server worker
```

```bash
docker compose exec worker ak test_email admin@example.com
```

والمخرج سوف يكون السطر `Test email sent to admin@example.com`، وهذا يعني أن سيرفر SMTP قبل الرسالة. ولتجربة البريد قبل ربط مزود حقيقي وجهه إلى [Mailpit](https://mailpit.axllent.org/?ref=arabroot.io)، وهو سيرفر SMTP وهمي يلتقط الرسائل ويعرضها دون أن يرسلها كما في الصورة التالية، أما وصول الرسائل إلى صناديق بريد Mailboxes حقيقية فيعتمد على مزودك وعلى سجلات SPF وDKIM لنطاقك، وقد شرحناها في [شرح SPF وDKIM وDMARC للمبتدئين](https://arabroot.io/articles/%D8%B4%D8%B1%D8%AD-spf-%D9%88-dkim-%D9%88-dmarc-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86/).

![رسالة authentik Test-Email كما وصلت إلى صندوق Mailpit التجريبي](https://arabroot.io/content/images/2026/09/authentik-06-test-email-mailpit.webp)

رسالة الاختبار كما يعرضها Mailpit

وإذا أردت سيرفر بريد خاصاً بك بدل مزود خارجي فراجع [دليل تثبيت mailcow](https://arabroot.io/articles/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A8%D8%B1%D9%8A%D8%AF-mailcow/).

## فرض المصادقة الثنائية TOTP

حساب مدير authentik هو مفتاح كل تطبيقاتك، فإذا سرقت كلمة مروره وحدها فقد فتحت كل الأبواب مرة واحدة، لذلك يجب ألا تكفي كلمة المرور وحدها للدخول. والترتيب هنا مهم: **سجل جهاز المصادقة Authenticator لحسابك أولاً، ثم افرضه على الجميع**، والسبب أنك إذا عكست الترتيب فسوف تغلق الباب على نفسك.

### تسجيل تطبيق المصادقة لحساب المدير

من واجهة المستخدم افتح الإعدادات من رمز الترس، ثم **Credentials**، ومن زر **Enroll** اختر **TOTP Device**.

![قائمة Enroll في صفحة Credentials وفيها Static tokens وTOTP Device وWebAuthn device](https://arabroot.io/content/images/2026/09/authentik-07-mfa-enroll-menu.webp)

إضافة جهاز مصادقة من صفحة Credentials

امسح رمز QR بأي [تطبيق TOTP](https://docs.goauthentik.io/add-secure-apps/flows-stages/stages/authenticator%5Ftotp/?ref=arabroot.io) مثل Microsoft Authenticator أو Google Authenticator أو [Aegis](https://getaegis.app/?ref=arabroot.io) أو مدير كلمات مرور يدعم TOTP، ثم أدخل الرمز المكون من ست خانات.

![صفحة إعداد المصادقة الثنائية مع رمز QR وحقل إدخال رمز TOTP](https://arabroot.io/content/images/2026/09/authentik-08-totp-setup.webp)

ربط تطبيق المصادقة برمز QR

![جدول MFA Devices وفيه جهاز TOTP Authenticator مسجل](https://arabroot.io/content/images/2026/09/authentik-09-totp-enrolled.webp)

الجهاز مسجل ويظهر في قائمة MFA Devices

ومن القائمة نفسها أضف [**Static tokens**](https://docs.goauthentik.io/add-secure-apps/flows-stages/stages/authenticator%5Fstatic/?ref=arabroot.io) واحفظها في مكان آمن خارج السيرفر، وهي رموز احتياطية Backup Codes يصلح كل رمز منها لمرة واحدة، وتستخدمها إذا فقدت هاتفك أو تعطل.

### جعل المصادقة الثنائية إلزامية

في تدفق الدخول الافتراضي `default-authentication-flow` خطوة تحقق Validation Stage جاهزة اسمها `default-authentication-mfa-validation`، ولكنها مضبوطة على تخطي المستخدم الذي لا يملك جهازاً، وبالتالي فالمصادقة الثنائية بعد التثبيت اختيارية لمن يريدها فقط. لذلك سوف [نعدل هذه الخطوة](https://docs.goauthentik.io/add-secure-apps/flows-stages/stages/authenticator%5Fvalidate/?ref=arabroot.io) من **Flows and Stages ← Stages** كما يلي:

- **Not configured action:** اختر *Force the user to configure an authenticator*.
- **Configuration stages:** انقل `default-authenticator-totp-setup` إلى القائمة المختارة، وأضف WebAuthn إن أردت استخدام مفاتيح الأمان Security Keys.
- **Device classes:** أبق TOTP وStatic وWebAuthn مفعلة.

![تعديل خطوة Authenticator Validation مع اختيار Force the user to configure an authenticator وخطوة إعداد TOTP](https://arabroot.io/content/images/2026/09/authentik-10-mfa-stage-enforce.webp)

فرض إعداد جهاز مصادقة على كل من لا يملك واحداً

وبعد الحفظ سوف يطلب authentik من كل مستخدم ليس له جهاز مسجل أن يمسح رمز QR قبل إكمال الدخول، ومن لديه جهاز سيطلب منه الرمز. وللتأكد سجل الدخول بمستخدم عادي مثل `sara` في نافذة خاصة Private Window، وسوف تجد أن صفحة إعداد TOTP تظهر بعد كلمة المرور مباشرة.

💡

إذا أردت أن تبدأ بفرض MFA على المديرين فقط، فأنشئ خطوة Authenticator Validation ثانية بإعداد «Force»، ثم اربطها في التدفق [بسياسة Expression](https://docs.goauthentik.io/customize/policies/expression/?ref=arabroot.io) تتحقق من عضوية المجموعة: `return ak_is_group_member(request.context["pending_user"], name="authentik Admins")`. ولكن فرضها على الجميع أبسط وأكثر أماناً، والسبب أن حساب أي موظف يفتح للمخترق باباً إلى تطبيقات الفريق.

## ربط authentik بنطاق Domain وشهادة TLS

في [Nginx Proxy Manager](https://nginxproxymanager.com/?ref=arabroot.io) أضف Proxy Host جديداً بالإعدادات التالية:

- **Domain Names:** `auth.example.com`
- **Scheme:** `http`، و**Forward Hostname:** `authentik-server-1` أو اسم الـ Container كما يظهر في `docker compose ps` (بشرط أن يكون NPM على شبكة `proxy`)، و**Forward Port:** `9000`
- فعل **Websockets Support** و**Block Common Exploits**.
- من تبويب SSL اطلب شهادة Let's Encrypt، وفعل **Force SSL** و**HTTP/2**.

وإذا كنت تستخدم [Caddy](https://caddyserver.com/docs/caddyfile/directives/reverse%5Fproxy?ref=arabroot.io) فهذا كل ما تحتاجه:

```nginx
auth.example.com {
    reverse_proxy authentik-server-1:9000
}
```

[يقرأ authentik الـ Headers](https://docs.goauthentik.io/install-config/reverse-proxy/?ref=arabroot.io) `X-Forwarded-Proto` و`X-Forwarded-For` حتى يعرف أن الطلب جاء عبر HTTPS ومن أي عنوان IP. ومنذ الإصدار 2026.8 لا يقبل هذه الـ Headers افتراضياً إلا من الشبكات الخاصة `127.0.0.0/8` و`10.0.0.0/8` و`172.16.0.0/12` و`192.168.0.0/16` (ومعها عناوين IPv6 المحلية)، وهذا يشمل الـ Reverse Proxy الذي يعمل في Container على السيرفر نفسه، فإذا كان الـ Reverse Proxy على عنوان آخر فأضفه صراحة:

```ini
AUTHENTIK_LISTEN__TRUSTED_PROXY_CIDRS=203.0.113.10/32,172.16.0.0/12
```

ولاحظ أن هذا المتغير يستبدل القائمة الافتراضية ولا يضيف إليها، لذلك ضع فيه عنوان الـ Reverse Proxy الخارجي ومعه نطاق شبكة Docker التي يصل منها الـ Reverse Proxy المحلي (`172.16.0.0/12` في المثال)، وتستطيع معرفة نطاق شبكتك بالأمر `docker network inspect proxy`. وبعد إعداد النطاق تأكد أن **System ← Brands** وعنوان Base URL يشيران إلى `https://auth.example.com`، وخطوات NPM مشروحة بالتفصيل في دليله.

## كيف تتأكد أن كل شيء يعمل

- كل الـ Containers في حالة `healthy`: `docker compose ps`.
- في لوحة الإدارة بطاقة **Version** تعرض الإصدار 2026.8.3 مع «Up-to-date»، وبطاقة **Workers** فيها worker واحد على الأقل، وبطاقة **Outpost status** باللون الأخضر.
- تسجيل الدخول من نافذة خاصة يطلب رمز TOTP لحساب `akadmin`.
- الأمر `ak test_email` يرسل الرسالة دون خطأ، وتصل إلى صندوقك.
- في **Events ← Logs** تظهر أحداث Login وPassword set بعنوان IP الحقيقي للعميل وليس بعنوان الـ Reverse Proxy، وإذا لم يكن كذلك فراجع قائمة الـ Proxies الموثوقة.

نقاط فحص الصحة Health Checks ترد بالرمز 200، والمخرج سوف يكون 200 لكل منهما:

```bash
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:9000/-/health/live/
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:9000/-/health/ready/
```

## النسخ الاحتياطي والاستعادة Restore

[حالة authentik كلها في PostgreSQL](https://docs.goauthentik.io/sys-mgmt/ops/backup-restore/?ref=arabroot.io): المستخدمون، وكلمات المرور بعد الـ Hashing، وأجهزة MFA، والتطبيقات، والتدفقات، والمفاتيح. واحفظ مع قاعدة البيانات ملف `.env`، والسبب أن النسخة المستعادة لن تعمل كما ينبغي دون المفتاح الأصلي `AUTHENTIK_SECRET_KEY`، واحفظ كذلك المجلدات `data` و`certs` و`custom-templates`:

```bash
cd /opt/authentik
mkdir -p backups
docker compose exec -T postgresql pg_dump -U authentik -d authentik -Fc > backups/authentik-$(date +%F).dump
tar czf backups/authentik-files-$(date +%F).tar.gz .env docker-compose.yml data certs custom-templates
```

ثم جدول النسخ يومياً عبر cron، وانقل الملفات إلى خارج السيرفر، واحذف القديم منها:

```bash
0 3 * * * cd /opt/authentik && docker compose exec -T postgresql pg_dump -U authentik -d authentik -Fc > backups/authentik-$(date +\%F).dump && find backups -mtime +14 -delete
```

وللاستعادة على سيرفر جديد انسخ المجلد والملفات، وشغل قاعدة البيانات وحدها، ثم استعد النسخة قبل تشغيل server وworker:

```bash
cd /opt/authentik
tar xzf backups/authentik-files-2026-09-26.tar.gz
docker compose up -d postgresql
docker compose exec -T postgresql pg_restore -U authentik -d authentik --clean --if-exists --no-owner < backups/authentik-2026-09-26.dump
docker compose up -d
```

والأمر [pg\_restore](https://www.postgresql.org/docs/16/app-pgrestore.html?ref=arabroot.io) على قاعدة بيانات فارغة يعيد كل الحسابات، وعند التشغيل بعده لا يعيد authentik الترحيلات من البداية فيعود خلال دقيقة تقريباً بدل ربع ساعة. ولكن تذكر أن النسخة التي لم تجرب استعادتها لا يعتمد عليها، لذلك جرب الاستعادة على سيرفر تجريبي Staging مرة كل بضعة أشهر.

## التحديث إلى إصدار أحدث

[قواعد التحديث في authentik](https://docs.goauthentik.io/install-config/upgrade/?ref=arabroot.io) صارمة، فالتزم بها:

- لا يدعم authentik الرجوع إلى إصدار أقدم Downgrade، لذلك خذ نسخة من قاعدة البيانات قبل كل تحديث.
- انتقل بين الإصدارات الرئيسية Major Releases بالترتيب، مثلاً 2026.5 ثم 2026.8، ولا تقفز من إصدار قديم جداً إلى أحدث إصدار مباشرة، حتى لو بدا لك ذلك أسرع.
- اقرأ [ملاحظات الإصدار](https://docs.goauthentik.io/releases/2026.8/?ref=arabroot.io) Release Notes وقسم Breaking changes قبل التحديث، ففي 2026.8 مثلاً تغيرت طريقة التعامل مع Headers الـ Reverse Proxy.
- إذا كانت لديك outposts منفصلة من نوع Proxy أو LDAP فحدثها إلى الإصدار نفسه في الوقت نفسه، لأن authentik يشترط أن يتطابق إصدار السيرفر وكل الـ outposts.

```bash
cd /opt/authentik
docker compose exec -T postgresql pg_dump -U authentik -d authentik -Fc > backups/before-upgrade-$(date +%F).dump
sed -i 's/^AUTHENTIK_TAG=.*/AUTHENTIK_TAG=2026.8.4/' .env
docker compose pull
docker compose up -d
docker compose logs -f server
```

ضع مكان `2026.8.4` الإصدار الذي تريده من [صفحة الإصدارات](https://github.com/goauthentik/authentik/releases?ref=arabroot.io)، وقارن ملف Compose لديك بالملف الرسمي للإصدار الجديد، فقد يضيف المطورون خدمات أو يحذفونها كما حدث مع Redis، وإذا حذفت خدمة فاستخدم `docker compose up -d --remove-orphans`. ولا تقم بترقية PostgreSQL إلى إصدار رئيسي جديد (من 16 إلى 17 مثلاً) بتغيير الوسم Tag وحده، والسبب أن ملفات البيانات لا تقرأ بين الإصدارات الرئيسية، فهذا [يتطلب نسخاً واستعادة](https://docs.goauthentik.io/troubleshooting/postgres/upgrade%5Fdocker/?ref=arabroot.io)، ولاحظ أن الإصدارات الحالية من authentik تدعم PostgreSQL من 14 إلى 18.

## مشكلات شائعة وحلولها

### الصفحة ترد بالرمز 503 أو لا تفتح بعد التشغيل

السيرفر ما زال ينفذ الترحيلات، أو أن الـ worker لم ينته بعد من تجهيز التدفقات الافتراضية، وعندها تجد في السجل الرسالة `Setup flow does not exist yet, waiting for worker to finish`. تابع `docker compose logs -f server` وانتظر حتى تظهر سجلات الطلبات المعتادة. وإذا توقف السيرفر مع خطأ في الاتصال بقاعدة البيانات فتأكد أن `PG_PASS` لم يتغير بعد إنشاء الـ Volume، والسبب أن PostgreSQL لا يقرأ كلمة المرور من المتغير إلا عند الإنشاء الأول.

### رسالة «Request has been denied» عند فتح صفحة الإعداد الأولي

الإصدارات الحديثة ترفض فتح `/if/flow/initial-setup/` مباشرة وتعرض رسالة «Access the authentik setup by navigating to…»، والحل أن تفتح العنوان الرئيسي للموقع `https://auth.example.com/` فيحولك إلى الإعداد بالشكل الصحيح. وإذا ظهرت الرسالة بعد إكمال الإعداد فهذا طبيعي، لأن الإعداد يعمل مرة واحدة فقط.

### خطأ CSRF أو روابط تبدأ بـ http رغم استخدام HTTPS

السبب أن الـ Reverse Proxy لا يمرر `X-Forwarded-Proto`، أو أن عنوانه ليس ضمن `AUTHENTIK_LISTEN__TRUSTED_PROXY_CIDRS`، فأضف عنوانه إلى هذا المتغير ثم أعد إنشاء Container الـ server.

### فشل الأمر ak test\_email

السبب غالباً [إعداد TLS لا يطابق المنفذ](https://docs.goauthentik.io/troubleshooting/emails/?ref=arabroot.io)، فالصحيح STARTTLS على 587 مع `USE_TLS=true` وSSL على 465 مع `USE_SSL=true`، أو أن مزود الاستضافة يحجب المنفذ 25 أو 587 على السيرفرات الجديدة، وتستطيع اختبار الاتصال من السيرفر بالأمر `nc -vz smtp.example.com 587`.

### رمز TOTP مرفوض دائماً

السبب فرق في الوقت بين السيرفر والهاتف Clock Drift، لأن رمز TOTP مبني على الوقت، فتحقق بالأمر `timedatectl` أن مزامنة الوقت NTP مفعلة على السيرفر.

### فقدت جهاز المصادقة أو كلمة مرور المدير

استخدم أحد الرموز الاحتياطية Static tokens، وإذا لم تكن لديك [فأنشئ من سطر الأوامر Command Line رابط استعادة](https://docs.goauthentik.io/troubleshooting/login/?ref=arabroot.io) صالحاً لعشر دقائق، ثم افتحه وأعد تعيين جهازك:

```bash
docker compose exec worker ak create_recovery_key 10 akadmin
```

والمخرج سوف يكون السطر `This recovery token is valid for 10 minutes.` ثم مسار يبدأ بـ `/recovery/use-token/`، فأضفه إلى عنوان النسخة وافتحه في المتصفح.

## الخلاصة

وصلنا لنهاية الموضوع، وأهم ما فيه:

- حساب مستقل لكل موظف في كل تطبيق يفشل يوم يغادر الموظف، ومزود الهوية مثل authentik يجعل إغلاق كل الأبواب خطوة واحدة.
- authentik منذ 2025.10 لا يحتاج إلى Redis، وملف Compose فيه PostgreSQL وserver وworker فقط، ومجلد البيانات صار `/data`.
- اربط منافذ authentik بالعنوان `127.0.0.1`، ولا تمرر `docker.sock` إلى الـ worker إلا عند الحاجة وعبر Docker Socket Proxy.
- أكمل الإعداد الأولي فور التشغيل من العنوان الرئيسي للموقع، ثم سجل جهاز TOTP لحسابك قبل أن تفرض المصادقة الثنائية على الجميع.
- انسخ قاعدة البيانات مع ملف `.env` ومفتاح `AUTHENTIK_SECRET_KEY`، وحدث بين الإصدارات الرئيسية بالترتيب وبعد نسخة احتياطية.

## سجل التحديثات

- سبتمبر 2026: كتابة الدليل واختباره على authentik 2026.8.3.
- أكتوبر 2026: مراجعة الدليل على authentik 2026.8.3: صححنا تاريخ إزالة Redis (المهام في 2025.8 والباقي في 2025.10)، وأضفنا إصدار انتقال المجلد إلى `/data` (2025.12) وطريقة نقل الملفات القديمة، ووضحنا أن `AUTHENTIK_LISTEN__TRUSTED_PROXY_CIDRS` يستبدل القائمة الافتراضية، وأضفنا انتظار الـ worker قبل صفحة الإعداد.