استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
هذه الوثيقة غير محدثة، تم تحديث النسخة الأساسية في 23 أغسطس 2026.
الانتقال إلى الوثيقة الإنجليزيةتاريخ الإصدارات
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةإذا كان لديك فكرة لتحسين هذه الوثيقة، فلا تتردد في المساهمة من خلال تقديم طلب سحب على GitHub.
رابط GitHub للتوثيقنسخ الـ Markdown من المستند إلى الحافظة
استضافة Intlayer ذاتياً
يمكن تشغيل Intlayer بالكامل على بنيتك التحتية الخاصة — دون الحاجة إلى حساب Intlayer Cloud. يُشغّل أمر واحد مكدساً جاهزاً للإنتاج:
أمر واحد يثبت كل شيء:
نسخ الكود إلى الحافظة
يقوم المثبّت بتنزيل ملف docker-compose.yml وملف .env، ويولّد الأسرار المطلوبة تلقائياً، ويبدأ تشغيل جميع الحاويات بـ docker compose up -d.
الاعتماد الخارجي الوحيد هو MongoDB: يتصل الـ backend بـ cluster Atlas من MongoDB الذي توفره. كل شيء آخر يعمل داخل الحاوية.
جدول المحتويات
البنية المعمارية
نسخ الكود إلى الحافظة
يتم تضمين Chromium (المستخدم لتوليد لقطات الشاشة عبر Puppeteer) داخل صورة الخادم الخلفي — لا حاجة لحاوية منفصلة.
المتطلبات الأساسية
- Docker ≥ 24 وDocker Compose ≥ v2. إذا كان أحدهما مفقوداً، يطبع المثبّت رابط التثبيت ويخرج.
- المنافذ
3000،3100،8025،9000، و9001متاحة على المضيف. - مضيف Linux أو macOS (أو WSL2 على Windows).
كل شيء آخر — Bun و Redis و MinIO و Chromium — يتم شحنه داخل الصورة.
البدء السريع
1. تشغيل المثبِّت
نسخ الكود إلى الحافظة
يتحقق من تثبيت Docker وتشغيله، ويكتب ./intlayer.env مع BETTER_AUTH_SECRET و S3_SECRET_ACCESS_KEY التي تم إنشاؤها بالفعل، ويسحب الصورة. لا يبدأ الحاوية — لا يمكن للخادم الخلفي أن يبدأ بدون بيانات اعتماد قاعدة البيانات الخاصة بك.
تشغيل المثبِّت مرة أخرى آمن: لن يتم استبدال intlayer.env الموجود أبدًا، لذا فهو يعمل أيضًا كمسار الترقية.
2. ملء بيانات اعتمادك
افتح intlayer.env وأكمل القيم المشار إليها بـ TODO:
نسخ الكود إلى الحافظة
يحتوي الملف أيضًا على كتل معلقة للميزات الاختيارية — SMTP mailer، OPENAI_API_KEY، وموفري OAuth. قم بإلغاء التعليق عما تحتاجه.
يتم قراءة الملف بواسطةdocker run --env-file، والذي لا يزيل الاقتباسات ويعامل كل شيء بعد=كقيمة. اكتب القيم بدون اقتباسات، وأبقِ التعليقات على أسطرها الخاصة.
3. بدء الحاوية
هذا هو الأمر الذي يطبعه المثبِّت عند انتهائه:
نسخ الكود إلى الحافظة
ثم افتح http://localhost:3000. يقوم الإقلاع الأول بتهيئة مخازن البيانات، لذا امنحه دقيقة واحدة.
لوحة التحكم موجودة على localhost. انظر القيود — النطاقات المخصصة غير مدعومة في الصورة المنشورة.
إعدادات المثبت
يقرأ المثبت بعض متغيرات البيئة. لأنه موجه إلى sh، مرر هذه المتغيرات إلى shell بدلاً من تمريرها إلى curl:
نسخ الكود إلى الحافظة
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| المتغير | القيمة الافتراضية | الوصف |
|---|---|---|
INTLAYER_IMAGE | ghcr.io/aymericzip/intlayer-selfhost:latest | الصورة المراد سحبها |
INTLAYER_ENV_FILE | ./intlayer.env | حيث يتم كتابة ملف البيئة |
INTLAYER_CONTAINER_NAME | intlayer | اسم الحاوية |
INTLAYER_DATA_VOLUME | intlayer-data | وحدة تخزين مسماة مثبتة في /data |
INTLAYER_APP_PORT | 3000 | منفذ المضيف لوحة التحكم |
INTLAYER_API_PORT | 3100 | منفذ المضيف للـ API |
INTLAYER_S3_PORT | 9000 | منفذ المضيف لـ MinIO S3 API |
INTLAYER_CONSOLE_PORT | 9001 | منفذ المضيف لوحة MinIO |
متغيرات المنافذ الأربعة تغير فقط الجانب المضيف من التعيين المطبوع في أمرdocker run. الصورة المنشورة لديهاhttp://localhost:3000وhttp://localhost:3100وhttp://localhost:9000مدرجة في حزمة لوحة التحكم في وقت البناء، لذا فإن إعادة تعيينها تترك المتصفح يشير إلى المنافذ القديمة. احتفظ بالقيم الافتراضية إلا إذا كنت تقوم بإنشاء صورتك الخاصة — انظر القيود.
إعداد التشغيل الأول
على نسخة جديدة (قاعدة بيانات فارغة)، يعيد فتح لوحة التحكم توجيهك إلى صفحة /init:
- أنشئ الحساب الأول. نظراً لأن مجموعة المستخدمين فارغة، يتم ترقية هذا الحساب تلقائياً إلى super admin.
- يتم إرسال بريد إلكتروني للتحقق (عبر Resend). التحقق من البريد الإلكتروني إلزامي — وهذا هو السبب في أنه يجب تعيين
RESEND_API_KEYقبل أن تبدأ. - انقر على الرابط في البريد الإلكتروني، ثم قم بتسجيل الدخول.
بمجرد وجود admin، يعيد /init التوجيه إلى صفحة تسجيل الدخول القياسية.
الخدمات
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| الخدمة | الصورة | المنفذ (المضيف) | الغرض |
|---|---|---|---|
| app | built from apps/app/Dockerfile | 3000 | لوحة تحكم TanStack Start (واجهة CMS) |
| backend | built from apps/backend/Dockerfile | 3100 | واجهة Fastify REST API (نقطة نهاية /health) |
| mongo | mongo:7 | داخلي | مجموعة نسخ متماثلة أحادية العقدة (rs0) |
| redis | redis:7-alpine | داخلي | قوائم انتظار المهام (BullMQ) والتخزين المؤقت (ioredis) |
| minio | minio/minio | 9000 (S3)، 9001 (وحدة التحكم) | تخزين كائنات متوافق مع S3 للصور الرمزية ولقطات الشاشة |
| mailpit | axllent/mailpit | 1025 (SMTP)، 8025 (واجهة الويب) | مجمّع بريد إلكتروني تفاعلي محلي |
يجب أن يكون منفذ MinIO9000قابلاً للوصول من المتصفح لأن الأصول المرفوعة (الصور الرمزية، لقطات الشاشة) تُحمَّل مباشرة منS3_PUBLIC_URL=http://localhost:9000/intlayer.
متغيرات البيئة
مطلوب
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| المتغير | مثال | الوصف |
|---|---|---|
DB_ID | intlayer | مستخدم MongoDB Atlas |
DB_MDP | (كلمة المرور الخاصة بك) | كلمة مرور MongoDB Atlas |
DB_CLUSTER | cluster0.xxxxx.mongodb.net | مضيف مجموعة MongoDB Atlas (المستخدم في URI mongodb+srv://) |
BETTER_AUTH_SECRET | (تم إنشاؤها) | سر بحجم 32 بايت لتوقيع الجلسة |
S3_SECRET_ACCESS_KEY | (تم إنشاؤها) | السر الخاص بـ MinIO المضمن |
RESEND_API_KEY | (مفتاحك) | البريد الإلكتروني المعاملاتي عبر Resend. مطلوب لإعداد التشغيل الأول إلا إذا قمت بتكوين mailer SMTP عام (انظر Global mailer) |
المطلوبة (مولّدة تلقائياً أو مطلوبة)
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| المتغير | مثال | الوصف |
|---|---|---|
NODE_ENV | production | بيئة وقت التشغيل |
PORT | 3100 | منفذ استماع الخادم الخلفي |
BACKEND_URL | http://localhost:3100 | عنوان URL العام لواجهة برمجة تطبيقات الخادم الخلفي |
APP_URL | http://localhost:3000 | عنوان URL العام للوحة التحكم |
DOMAIN | localhost | نطاق ملفات تعريف الارتباط |
MONGODB_URI | mongodb://mongo:27017/intlayer?replicaSet=rs0 | عنوان URI الكامل لاتصال MongoDB |
REDIS_URL | redis://redis:6379 | عنوان URL لاتصال Redis |
BETTER_AUTH_SECRET | (مولّد تلقائياً) | سر من 32 بايت لتوقيع الجلسة |
MAIL_PROVIDER | smtp | بروتوكول البريد: smtp أو resend |
MAIL_SMTP_HOST | mailpit | اسم المضيف SMTP (اسم حاوية Mailpit) |
MAIL_SMTP_PORT | 1025 | منفذ SMTP |
MAIL_FROM | Intlayer <no-reply@localhost> | عنوان المرسل |
S3_ENDPOINT | http://minio:9000 | نقطة نهاية متوافقة مع S3 |
S3_PUBLIC_URL | http://localhost:9000/intlayer | عنوان URL العام لتحميل الأصول في المتصفح |
S3_BUCKET_NAME | intlayer | اسم الدلو (Bucket) |
S3_ACCESS_KEY_ID | (مولّد تلقائياً) | مفتاح وصول MinIO |
S3_SECRET_ACCESS_KEY | (مولّد تلقائياً) | مفتاح سر MinIO |
VITE_BACKEND_URL | http://localhost:3100 | عنوان URL الخادم الخلفي المضمّن في لوحة التحكم عند البناء |
VITE_DOMAIN | localhost | النطاق المضمّن في لوحة التحكم عند البناء |
اختيارية (تتدهور الميزات بشكل سلس عند غيابها)
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| المتغير | الميزة |
|---|---|
OPENAI_API_KEY | الترجمة بمساعدة الذكاء الاصطناعي ومراجعة المحتوى |
STRIPE_SECRET_KEY، STRIPE_WEBHOOK_SECRET، STRIPE_* | إدارة الفواتير والاشتراكات |
RESEND_API_KEY | البريد الإلكتروني التفاعلي عبر Resend (يتجاوز Mailpit عند الضبط) |
GITHUB_CLIENT_ID، GITHUB_CLIENT_SECRET | تسجيل الدخول عبر OAuth لـ GitHub |
GOOGLE_CLIENT_ID، GOOGLE_CLIENT_SECRET | تسجيل الدخول عبر OAuth لـ Google |
GITLAB_CLIENT_ID، GITLAB_CLIENT_SECRET | تسجيل الدخول عبر OAuth لـ GitLab |
MICROSOFT_CLIENT_ID، MICROSOFT_CLIENT_SECRET | تسجيل الدخول عبر OAuth لـ Microsoft |
LINKEDIN_CLIENT_ID، LINKEDIN_CLIENT_SECRET | تسجيل الدخول عبر OAuth لـ LinkedIn |
ATLASSIAN_CLIENT_ID، ATLASSIAN_CLIENT_SECRET | تسجيل الدخول عبر OAuth لـ Atlassian |
بريد عام
بشكل افتراضي، يتم إرسال جميع رسائل البريد الإلكترونية للمعاملات عبر Resend باستخدام RESEND_API_KEY. يمكن للنشرات ذاتية الاستضافة بدلاً من ذلك توجيه كل بريد إلكتروني — بما في ذلك رسائل البريد الإلكترونية غير المتعلقة بالمنظمة مثل إعادة تعيين كلمات المرور والروابط السحرية — عبر بريد عام مُعد باستخدام متغيرات البيئة.
عيّن MAIL_PROVIDER لتفعيله. عند عدم التعيين، يتم استخدام بريد Resend الافتراضي.
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| المتغير | مثال | الوصف |
|---|---|---|
MAIL_PROVIDER | smtp | النقل العام: smtp أو resend. اترك بدون تعيين لاستخدام الإعدادات الافتراضية |
MAIL_FROM | Intlayer <no-reply@acme.com> | رأس المُرسل. يقبل عنوان مجرد أو تنسيق Name <email> |
MAIL_SMTP_HOST | smtp.acme.com | مضيف SMTP (مطلوب عند MAIL_PROVIDER=smtp) |
MAIL_SMTP_PORT | 587 | منفذ SMTP (الافتراضي 587) |
MAIL_SMTP_SECURE | false | TLS ضمني. عيّن true للمنفذ 465 |
MAIL_SMTP_USER | (اسم المستخدم الخاص بك) | اسم مستخدم SMTP (اختياري؛ تجاهل للمرحلات غير المصرح بها) |
MAIL_SMTP_PASSWORD | (كلمة المرور الخاصة بك) | كلمة مرور SMTP |
الأولوية: بريد المنظمة الخاص بها (المُعد من لوحة المعلومات Organization) له الأولوية على البريد العام، والذي له بدوره الأولوية على مفتاح Resend الافتراضي.
ربط مشروعك بـ Intlayer
بمجرد تشغيل المكدس، وجّه مشروعك نحو الخادم الخلفي ولوحة التحكم المستضافَين ذاتياً بدلاً من intlayer.org.
تهيئة المشروع
نسخ الكود إلى الحافظة
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
editor: {
clientId: process.env.INTLAYER_CLIENT_ID,
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
/**
* عنوان URL للوحة تحكم CMS المستضافة ذاتياً.
* الافتراضي: https://app.intlayer.org
*/
cmsURL: process.env.INTLAYER_CMS_URL, // e.g. http://localhost:3000
/**
* عنوان URL لواجهة برمجة تطبيقات الخادم الخلفي المستضافة ذاتياً.
* الافتراضي: https://back.intlayer.org
*/
backendURL: process.env.INTLAYER_BACKEND_URL, // e.g. http://localhost:3100
},
};
export default config;
اضبط متغيرات البيئة في ملف .env الخاص بمشروعك:
نسخ الكود إلى الحافظة
أنشئ بيانات اعتماد الوصول في لوحة التحكم المستضافة ذاتياً ضمن المشاريع ← مفاتيح الوصول على http://localhost:3000/projects.
SDK الخاص بـ @intlayer/api
عند استخدام SDK الخاص بـ @intlayer/api برمجياً، مرّر backendURL بشكل صريح:
نسخ الكود إلى الحافظة
الترقية
يجلب هذا الأمر أحدث الصور ويعيد تشغيل الحاويات باستخدام docker compose pull && docker compose up -d. يتم الاحتفاظ بالأحجام الموجودة (mongo-data، redis-data، minio-data) — دون فقدان للبيانات.
نسخ الكود إلى الحافظة
النسخ الاحتياطي والاستعادة
تعيش جميع البيانات الدائمة في ثلاثة أحجام Docker مسماة.
النسخ الاحتياطي
نسخ الكود إلى الحافظة
الاستعادة
نسخ الكود إلى الحافظة
القيود
- MongoDB يجب أن يكون خارجياً (Atlas). يتصل الخادم الخلفي فقط عبر
mongodb+srv://(مبني منDB_ID/DB_MDP/DB_CLUSTER)، لذا لا يمكن استخدامmongodb://host:27017العادي — بما في ذلكmongodالمدمج في الحاوية الخاصة — لا يمكن استخدامه. قدم مجموعة MongoDB Atlas. - لا توجد نطاقات مخصصة. جميع عناوين URL الموجهة للمتصفح
VITE_*مدرجة مباشرة في التطبيق وقت البناء، والصورة المنشورة تأتي مع قيمlocalhost. يجب الوصول إلى لوحة التحكم علىhttp://localhost:3000؛ تقديمها على نطاق عام سيتطلب إعادة بناء الصورة مع عناوين URL المستهدفة المدمجة فيها وليس مدعوماً بشكل افتراضي. - البريد الإلكتروني يتطلب خادم بريد يعمل. إعداد التشغيل الأول يفرض التحقق من البريد الإلكتروني، لذا يجب تكوين إما
RESEND_API_KEYأو خادم SMTP عام (MAIL_PROVIDER=smtp+MAIL_SMTP_*). بعد دخول المسؤول الأول، يمكن لكل منظمة أيضاً تكوين خادم SMTP أو Resend الخاص بها من لوحة التحكم.
استكشاف الأخطاء وإصلاحها
الخادم الخلفي يتعطل عند الإقلاع
يجب أن يكون MongoDB وRedis في حالة صحية قبل بدء تشغيل الخادم الخلفي. يستخدم ملف compose depends_on مع condition: service_healthy. إذا رأيت إعادات تشغيل متكررة للخادم الخلفي، تحقق من اجتياز فحوصات صحة mongo وredis:
نسخ الكود إلى الحافظة
ابحث عن MongoDB connection error بالقرب من أعلى السجل.
لوحة التحكم لا تستطيع الوصول إلى API
تحقق من أن VITE_BACKEND_URL يطابق عنوان URL حيث يمكن الوصول إلى الخادم الخلفي من المتصفح (ليس شبكة Docker). إذا غيّرت منفذ الخادم الخلفي أو أضفت وكيلاً عكسياً، أعد بناء صورة لوحة التحكم:
دلو MinIO مفقود
إذا لم تُشغَّل خدمة minio-init المؤقتة (أو شُغّلت قبل أن يكون MinIO جاهزاً)، أنشئ الدلو يدوياً:
نسخ الكود إلى الحافظة
