guides

دليل Strapi 5: الإعداد، واجهة برمجة التطبيقات، الإضافات، والنشر (2026)

بقلم Mert Batur
Apr 6, 2026
15 قراءة
دليل Strapi 5: الإعداد، واجهة برمجة التطبيقات، الإضافات، والنشر (2026)

Strapi نظام إدارة محتوى مفتوح المصدر يعمل بـ Node.js، يمنحك سيطرة كاملة على الـ API، وقاعدة البيانات، وبيئة النشر. بعكس المنصات المُستضافة التي تدفع فيها مقابل الوصول إلى بنية تحتية يملكها شخص آخر، يعمل Strapi على خوادمك الخاصة، ويُنشئ نقاط نهاية REST وGraphQL من مخططات المحتوى تلقائياً، ويتيح لك تخصيص كل طبقة من طبقات الواجهة الخلفية بـ JavaScript أو TypeScript.

هذا الدليل يُغطي Strapi 5 تحديداً — من أول أمر npx create-strapi حتى النشر على Railway أو Strapi Cloud. جميع أمثلة الكود جاهزة للنسخ والاستخدام ومُختبرة على Strapi 5.x.

الحقلالقيمة
النوعنظام إدارة محتوى headless مفتوح المصدر
اللغةJavaScript / TypeScript (Node.js)
الإصدار الحاليStrapi 5
الرخصةMIT (مجتمعية) / خاصة (مؤسسية)
قواعد البيانات المدعومةPostgreSQL، MySQL، MariaDB، SQLite
أنواع الـ APIREST + GraphQL (كلاهما مدمج)
الاستضافةذاتية أو Strapi Cloud
تسعير السحابةطبقة مجانية، ثم 18$/شهر+
نجوم GitHub+65,000
الأنسب لـالفرق التي تريد ملكية كاملة للكود وتخصيص الـ API

ما هو Strapi وكيف يعمل؟

Strapi نظام إدارة محتوى مُستضاف ذاتياً يضع الـ API في مقدمة أولوياته، ويفصل الواجهة الخلفية للمحتوى عن الواجهة الأمامية. تُعرّف مخططات المحتوى من خلال منشئ بصري أو بالكود، وينشئ Strapi تلقائياً نقاط نهاية CRUD لكل من REST وGraphQL يمكن لأي إطار عمل للواجهة الأمامية استهلاكها. لوحة الإدارة هي واجهة React يُنشئ فيها محررو المحتوى المدخلات ويديرونها دون لمس الكود، وفق ما تنص عليه توثيق Strapi الرسمي.

نظام إدارة المحتوى Headless مقابل التقليدي

نظام إدارة المحتوى التقليدي كـ WordPress يربط محتواك بطبقة العرض. تعيش مشاركات مدونتك وصفحاتك وملفاتك الإعلامية في نفس النظام الذي يُصيّر HTML للزوار. يسير هذا بشكل جيد حتى تحتاج إلى نفس المحتوى في تطبيق جوال وموقع تسويقي مصغّر وبوابة توثيق في الوقت ذاته.

نظام إدارة المحتوى الـ headless يتخلى تماماً عن الواجهة الأمامية. يخزّن Strapi محتواك ويُقدّمه بصيغة JSON عبر نقاط نهاية API. موقعك Next.js وتطبيق React Native وداشبورد إنترنت الأشياء — كلها تسحب من نفس الواجهة الخلفية Strapi. مصدر حقيقة واحد، مستهلكون متعددون.

إن كنت تُقيّم خيارات غير Strapi، تجدها في مقارنتنا لأنظمة إدارة المحتوى الـ headless جنباً إلى جنب.

معمارية Strapi

مكدّس Strapi واضح: خادم Node.js يقع بين قاعدة بياناتك (PostgreSQL أو MySQL أو SQLite) وتطبيقات واجهتك الأمامية. لوحة الإدارة — تطبيق React وحيد الصفحة — تتصل بنفس الـ API الذي تستخدمه الواجهات الأمامية، لكن بصلاحيات أعلى.

إليك التدفق: قاعدة بياناتك تحتضن المحتوى. طبقة ORM في Strapi (المبنية على Knex.js) تستعلم منها. طبقة الـ API تكشف نقاط نهاية REST وGraphQL. واجهاتك الأمامية — سواء كانت Next.js أو Nuxt أو Astro أو Gatsby أو تطبيق جوال — تجلب JSON من تلك النقاط. Strapi نفسه لا يُصيّر HTML للمستخدمين النهائيين قط.

يمتلك مستودع Strapi على GitHub أكثر من 65,000 نجمة، مما يجعله من أكثر مشاريع CMS مفتوح المصدر شعبية على المنصة.

ما الجديد في Strapi 5؟

Strapi 5 إعادة كتابة جذرية تستبدل Entity Service API بـ Document Service API الجديدة، وتنتقل من Webpack إلى Vite لبناء لوحة الإدارة، وتُدخل TypeScript كلغة افتراضية للمشاريع الجديدة. هذه ليست تحديثات تدريجية — تغيّرت المعمارية الداخلية بشكل كبير، كما يوضح صفحة نظرة عامة على Strapi 5.

إليك التغييرات الأكثر أهمية للمطورين، وفق سجل تغييرات Strapi 5 للمطورين:

  • Document Service API تحلّ محل Entity Service API — توقيعات وظائف أنظف، أنواع TypeScript أفضل، واجهة موحدة لعمليات CRUD
  • إعادة تصميم Draft & Publish — نظام ذو تبويبين في لوحة الإدارة يفصل بين حالتَي المسودة والمنشور
  • Content History — عرض الإصدارات السابقة لأي مدخل واستعادتها مباشرة من لوحة الإدارة
  • ميزة المعاينة — معاينة المحتوى في واجهتك الأمامية الفعلية قبل النشر، تُضبط لكل نوع محتوى
  • Vite يحل محل Webpack — بناءات لوحة الإدارة أسرع ملحوظاً (شهدنا تحسناً ~60% في أوقات البناء)
  • نهج TypeScript أولاً — المشاريع الجديدة تُنشأ بـ TypeScript افتراضياً
  • AI Content-Type Builder — توليد مخططات المحتوى من أوصاف باللغة الطبيعية أو تصاميم Figma. هذا جديد في 2026 ولا يُقدّمه أي نظام CMS headless آخر حتى الآن
  • استجابات API مبسّطة — بنية JSON أكثر تسطيحاً لكل من REST وGraphQL
  • Plugin SDK الجديد — واجهة برمجية مُبسّطة لبناء إضافات Strapi وتوزيعها
الميزةStrapi 4Strapi 5
خدمة الـ APIEntity ServiceDocument Service
أداة البناءWebpackVite
اللغة الافتراضيةJavaScriptTypeScript
نظام المسودةمفتاح تبديل واحدتبويبان (مسودة/منشور)
سجل المحتوىيحتاج إضافةمدمج
معاينة الواجهة الأماميةغير متاحواجهة برمجة معاينة أصلية
تنسيق استجابة الـ APIمتداخل بعمقبنية مسطّحة
توليد المخططيدوي فقطAI + يدوي

كيفية تثبيت Strapi 5 وإعداده

إعداد مشروع Strapi 5 يستغرق دقيقتين تقريباً. تحتاج Node.js 18 أو أحدث، وأحد هذه: npm أو yarn أو pnpm. يُنشئ Strapi مشروعاً كاملاً بلوحة إدارة واتصال بقاعدة بيانات وطبقة API من أمر واحد، وفق دليل البدء السريع لـ Strapi.

المتطلبات الأساسية

  • Node.js 18+ (يُوصى بـ 20 LTS)
  • npm 6+، yarn، أو pnpm
  • قاعدة بيانات: SQLite تعمل خارج الصندوق للتطوير؛ PostgreSQL للإنتاج

إنشاء مشروعك الأول

bash
npx create-strapi@latest my-project

# الخيارات التفاعلية:
# ? Choose your preferred language: TypeScript
# ? Choose your default database client: sqlite
# ? Start with an example structure?: Yes (recommended for first-timers)

cd my-project
npm run develop

يبدأ Strapi على http://localhost:1337. زيارتك الأولى تطلب منك إنشاء حساب مدير. بعدها، أنت في لوحة الإدارة — جاهز لبناء أنواع المحتوى.

نظرة عامة على بنية المشروع

text
my-project/
├── config/
│   ├── database.ts          # اتصال قاعدة البيانات
│   ├── server.ts             # المضيف، المنفذ، مفاتيح التطبيق
│   ├── admin.ts              # ضبط لوحة الإدارة
│   └── plugins.ts            # ضبط الإضافات
├── src/
│   ├── api/                  # أنواع المحتوى تعيش هنا
│   │   └── article/
│   │       ├── content-types/
│   │       │   └── article/schema.json
│   │       ├── controllers/article.ts
│   │       ├── routes/article.ts
│   │       └── services/article.ts
│   ├── plugins/              # الإضافات المخصصة
│   └── index.ts              # تهيئة التطبيق/دورة حياته
├── public/                   # الملفات الثابتة
├── .env                      # متغيرات البيئة
└── package.json

كل نوع محتوى يحصل على مجلده الخاص تحت src/api/ مع ملف مخطط ووحدة تحكم ومسار وخدمة. يُنشئها Strapi تلقائياً حين تُنشئ نوع محتوى عبر لوحة الإدارة، لكن يمكنك أيضاً إنشاؤها يدوياً.

بناء أنواع المحتوى وإدارة المحتوى

أنواع المحتوى هي قلب Strapi — تُعرّف مخطط بياناتك وتُنشئ تلقائياً نقاط نهاية API ونماذج لوحة الإدارة وجداول قاعدة البيانات. يدعم Strapi نوعين رئيسيين: أنواع المجموعة (كمشاركات المدونة أو المنتجات، حيث توجد مدخلات متعددة) وأنواع المفرد (كالصفحة الرئيسية أو إعدادات الموقع، حيث توجد مدخلة واحدة فقط).

جولة في Content-Type Builder

يُتيح لك Content-Type Builder في لوحة إدارة Strapi تعريف المخططات بصرياً. تختار أنواع الحقول — نص، نص غني، وسائط، رقم، منطقي، علاقة، مكوّن، منطقة ديناميكية، JSON، وغيرها — ويكتب Strapi ملف المخطط عنك.

إليك ما يبدو عليه مخطط نوع محتوى Article تحت الغطاء:

json
{
  "kind": "collectionType",
  "collectionName": "articles",
  "info": {
    "singularName": "article",
    "pluralName": "articles",
    "displayName": "Article"
  },
  "attributes": {
    "title": {
      "type": "string",
      "required": true
    },
    "slug": {
      "type": "uid",
      "targetField": "title"
    },
    "content": {
      "type": "richtext"
    },
    "coverImage": {
      "type": "media",
      "allowedTypes": ["images"]
    },
    "category": {
      "type": "relation",
      "relation": "manyToOne",
      "target": "api::category.category"
    },
    "publishedAt": {
      "type": "datetime"
    }
  }
}

يمكنك أيضاً استخدام AI Content-Type Builder الجديد لتوليد المخططات من وصف باللغة العادية مثل "أحتاج مدونة بمقالات لها عناوين وـ slugs ومحتوى نص غني وصور غلاف وفئات." يُنشئ Strapi مخطط JSON ويُنشئ جدول قاعدة البيانات. مفيد فعلاً للنمذجة السريعة.

المكوّنات والمناطق الديناميكية

المكوّنات مجموعات حقول قابلة لإعادة الاستخدام. فكّر فيها كمكوّنات React لكن لبنية المحتوى. مكوّن "SEO" يحتوي حقول metaTitle وmetaDescription وcanonicalUrl يمكن إرفاقه بأي نوع محتوى.

المناطق الديناميكية تأخذ هذا أبعد — تُتيح لمحرري المحتوى الاختيار من قائمة مكوّنات لبناء تخطيطات صفحات مرنة. قد تحتوي صفحة هبوط على مكوّن Hero، ثم شبكة ميزات، ثم شريط شهادات، كلها تُختار وتُرتّب من قِبل المحرر. هذا النمط شائع في مواقع التسويق حيث لكل صفحة بنية مختلفة.

إدارة المحتوى مع Draft & Publish

أعاد Strapi 5 تصميم نظام Draft & Publish. بدلاً من مفتاح تبديل واحد، الآن لديك تبويبان منفصلان في Content Manager — أحدهما لإصدار المسودة والآخر للمنشور. يمكن للمحررين تعديل المسودة بحرية دون التأثير على المحتوى المباشر. حين يكونون جاهزين، ينشرون، وتصبح المسودة الإصدار المنشور الجديد. Content History يتيح لك الرجوع لأي حالة سابقة إن أخطأت.

العمل مع Strapi API (REST وGraphQL)

يُنشئ Strapi تلقائياً نقاط نهاية REST وGraphQL لكل نوع محتوى تُنشئه. REST API متاح فوراً — لا حاجة لأي ضبط. GraphQL يتطلب تفعيل الإضافة المدمجة لكنه يستغرق 30 ثانية للإعداد. كلا الـ API يدعم التصفية والترتيب والترقيم واختيار الحقول وتعبئة العلاقات، وفق توثيق Strapi REST API.

استعلامات REST API

كل نوع مجموعة يحصل على نقاط نهاية عند /api/{pluralName}. إليك كيفية جلب المقالات مع فلاتر وتعبئة علاقات:

javascript
// جلب المقالات المنشورة، مرتبة حسب التاريخ، مع تعبئة الفئة
const response = await fetch(
  'http://localhost:1337/api/articles?' + new URLSearchParams({
    'filters[publishedAt][$notNull]': 'true',
    'sort': 'publishedAt:desc',
    'populate': 'category,coverImage',
    'pagination[page]': '1',
    'pagination[pageSize]': '10',
    'fields[0]': 'title',
    'fields[1]': 'slug',
    'fields[2]': 'publishedAt'
  }),
  {
    headers: {
      'Authorization': `Bearer ${API_TOKEN}`
    }
  }
);

const { data, meta } = await response.json();
// data: مصفوفة من المقالات
// meta.pagination: { page, pageSize, pageCount, total }

Strapi 5 سطّح تنسيق الاستجابة. في الإصدار 4، كنت تحفر عبر data.attributes.title. في الإصدار 5، هو ببساطة data.title. تغيير صغير، تحسين كبير في جودة الحياة.

إعداد GraphQL والاستعلامات

فعّل GraphQL بتثبيت الإضافة:

bash
npm run strapi install graphql

ثم استعلم عند /graphql:

graphql
query GetArticles {
  articles(
    filters: { publishedAt: { notNull: true } }
    sort: "publishedAt:desc"
    pagination: { page: 1, pageSize: 10 }
  ) {
    title
    slug
    publishedAt
    category {
      name
    }
    coverImage {
      url
      alternativeText
    }
  }
}

GraphQL مفيد بشكل خاص حين تحتاج واجهتك الأمامية إلى علاقات متداخلة عميقاً. بدلاً من استدعاءات REST متعددة بمعاملات populate مختلفة، استعلام GraphQL واحد يجلب ما تحتاجه بالضبط.

جلب محتوى Strapi في Next.js

إليك مثالاً عملياً لجلب محتوى Strapi في صفحة Next.js App Router — هذا أحد أكثر أزواج Strapi وإطار العمل للواجهة الأمامية شيوعاً:

typescript
// app/blog/page.tsx
async function getArticles() {
  const res = await fetch(
    `${process.env.STRAPI_URL}/api/articles?populate=category,coverImage&sort=publishedAt:desc`,
    {
      headers: {
        Authorization: `Bearer ${process.env.STRAPI_TOKEN}`,
      },
      next: { revalidate: 60 }, // ISR: إعادة التحقق كل 60 ثانية
    }
  );

  if (!res.ok) throw new Error('Failed to fetch articles');
  const { data } = await res.json();
  return data;
}

export default async function BlogPage() {
  const articles = await getArticles();

  return (
    <main>
      {articles.map((article) => (
        <article key={article.documentId}>
          <h2>{article.title}</h2>
          <span>{article.category?.name}</span>
        </article>
      ))}
    </main>
  );
}

لاحظ documentId في الإصدار 5 — يحلّ محل الرقمي id من الإصدار 4. هذه إحدى تفاصيل الترحيل التي ستُعاني منها إن أغفلتها.

وحدات التحكم والخدمات والمسارات المخصصة في Strapi

وحدات التحكم المخصصة هي المكان الذي يُميّز Strapi فعلاً عن منصات CMS headless كـ Contentful أو Sanity. لأن Strapi يعمل على خادمك كتطبيق Node.js، يمكنك تجاوز أي نقطة نهاية مُولَّدة تلقائياً بمنطق عملك الخاص — التحقق من المدخلات، تحويل البيانات، استدعاءات API خارجية، مشغّلات الإشعارات، أي شيء تفعله في تطبيق Express.js. وجدت أن هذه هي الميزة التي تجعل الفرق تختار Strapi على البدائل المُستضافة.

يُغطي توثيق Strapi Controllers الـ API الكامل. إليك الأنماط التي أستخدمها أكثر، استناداً لـ أمثلة الخدمات ووحدات التحكم الرسمية.

توسيع وحدات التحكم الأساسية

يُوفّر Strapi مصنع createCoreController. تُوسّعه بتجاوز إجراءات محددة (find وfindOne وcreate وupdate وdelete) مع الإبقاء على بقية السلوك المُولَّد تلقائياً:

typescript
// src/api/article/controllers/article.ts
import { factories } from '@strapi/strapi';

export default factories.createCoreController(
  'api::article.article',
  ({ strapi }) => ({
    // تجاوز find الافتراضي لإضافة تصفية مخصصة
    async find(ctx) {
      // التحقق من الاستعلام الوارد وتطهيره
      const sanitizedQuery = await this.sanitizeQuery(ctx);

      // أضف منطقك المخصص — مثلاً، إرجاع المقالات
      // المنتمية لمنظمة المستخدم المصادق عليه فقط
      const user = ctx.state.user;
      if (user?.organization) {
        sanitizedQuery.filters = {
          ...sanitizedQuery.filters,
          organization: user.organization.id,
        };
      }

      const { results, pagination } = await strapi
        .service('api::article.article')
        .find(sanitizedQuery);

      const sanitizedResults = await this.sanitizeOutput(results, ctx);
      return this.transformResponse(sanitizedResults, { pagination });
    },
  })
);

كتابة خدمات مخصصة

الخدمات تحتضن منطق العمل القابل لإعادة الاستخدام الذي يمكن لوحدات التحكم (والخدمات الأخرى) استدعاؤه. اجعل وحدات التحكم نحيلة وخدماتك سمينة:

typescript
// src/api/article/services/article.ts
import { factories } from '@strapi/strapi';

export default factories.createCoreService(
  'api::article.article',
  ({ strapi }) => ({
    // وظيفة مخصصة: نشر المقال وإشعار المشتركين
    async publishAndNotify(documentId: string) {
      const article = await strapi.documents('api::article.article').update({
        documentId,
        data: { publishedAt: new Date() },
        status: 'published',
      });

      // استدعاء خدمة إشعار خارجية
      const subscribers = await strapi
        .service('api::subscriber.subscriber')
        .find({ filters: { active: true } });

      await Promise.allSettled(
        subscribers.results.map((sub) =>
          fetch(process.env.NOTIFICATION_WEBHOOK, {
            method: 'POST',
            body: JSON.stringify({
              email: sub.email,
              article: article.title,
            }),
          })
        )
      );

      return article;
    },
  })
);

إضافة مسارات مخصصة

سجّل مسارات مخصصة جنباً إلى جنب مع مسارات CRUD المُولَّدة تلقائياً:

typescript
// src/api/article/routes/custom-article.ts
export default {
  routes: [
    {
      method: 'POST',
      path: '/articles/:id/publish-notify',
      handler: 'article.publishAndNotify',
      config: {
        policies: ['admin::isAuthenticatedAdmin'],
      },
    },
  ],
};

ثم أضف المعالج إلى وحدة التحكم:

typescript
async publishAndNotify(ctx) {
  const { id } = ctx.params;
  const article = await strapi
    .service('api::article.article')
    .publishAndNotify(id);
  return this.transformResponse(article);
}

هذا النوع من تخصيص الواجهة الخلفية ببساطة مستحيل مع Contentful أو Sanity — ستحتاج دالة serverless منفصلة أو طبقة وسيطة. مع Strapi، كل شيء في قاعدة كود واحدة.

منظومة الإضافات وبناء إضافتك الخاصة

سوق إضافات Strapi يحتوي على 500+ إضافة تغطي كل شيء من بيانات وصفية SEO إلى مدفوعات Stripe. بعضها رسمي (تُصونه فريق Strapi)، والبعض الآخر من بناء المجتمع. الجودة تتفاوت — تماماً كحزم npm — لذا تحقق من نجوم GitHub والـ commits الأخيرة وتوافق Strapi 5 قبل التثبيت.

الإضافات الأساسية

هذه تأتي مع Strapi أو على بُعد أمر تثبيت واحد:

  • GraphQL — يضيف نقطة نهاية /graphql وـ GraphQL Playground
  • i18n — دعم التدويل مع متغيرات المحتوى حسب اللغة
  • Users & Permissions — المصادقة والأدوار والوصول العام/المصادق عليه للـ API
  • Upload — مكتبة الوسائط مع مزودي التخزين المحلي أو AWS S3 أو Cloudinary
  • Email — البريد الإلكتروني عبر SendGrid أو Mailgun أو Amazon SES أو SMTP

إضافات مجتمعية تستحق المتابعة: @strapi/plugin-seo (علامات meta والبطاقات الاجتماعية)، strapi-plugin-sitemap (خرائط XML المُولَّدة تلقائياً)، وstrapi-plugin-content-versioning (التحكم الدقيق في الإصدارات ما وراء Content History المدمج).

بناء إضافة مخصصة (Strapi 5 SDK)

قدّم Strapi 5 Plugin SDK جديداً يُبسّط تطوير الإضافات. درس تعليمي رسمي للإضافات يستعرض العملية الكاملة، لكن الخلاصة:

  1. نفّذ npx @strapi/sdk-plugin init my-plugin للبناء الهيكلي
  2. عرّف أنواع محتوى إضافتك ووحدات التحكم وواجهة لوحة الإدارة
  3. ابنِ باستخدام npm run build وانشر على npm

القرار بين بناء إضافة مقابل كتابة وحدة تحكم مخصصة يعود إلى إمكانية إعادة الاستخدام. إن كان المنطق خاصاً بالمشروع، استخدم وحدة تحكم. إن أردت مشاركته عبر المشاريع أو مع المجتمع، عبّئه كإضافة.

ضبط قاعدة البيانات: PostgreSQL أم MySQL أم SQLite؟

يدعم Strapi PostgreSQL وMySQL وMariaDB وSQLite خارج الصندوق. SQLite هي الافتراضية للمشاريع الجديدة لأنها لا تحتاج إعداداً — ممتازة للتطوير والنمذجة السريعة. للإنتاج، PostgreSQL هو الاختيار الموصى به والذي يختبر فريق Strapi ضده بأكثر كثافة.

إليك ضبط PostgreSQL جاهز للإنتاج:

typescript
// config/database.ts
export default ({ env }) => ({
  connection: {
    client: 'postgres',
    connection: {
      host: env('DATABASE_HOST', 'localhost'),
      port: env.int('DATABASE_PORT', 5432),
      database: env('DATABASE_NAME', 'strapi'),
      user: env('DATABASE_USERNAME', 'strapi'),
      password: env('DATABASE_PASSWORD', ''),
      ssl: env.bool('DATABASE_SSL', false) && {
        rejectUnauthorized: env.bool('DATABASE_SSL_REJECT', true),
      },
    },
    pool: {
      min: env.int('DATABASE_POOL_MIN', 2),
      max: env.int('DATABASE_POOL_MAX', 10),
    },
  },
});

إن كنت تُقيّم خياراتك لقاعدة البيانات، تجد مقارنتنا بين PostgreSQL وMySQL الفروق مُغطّاة بعمق.

قاعدة البياناتالأنسب لـدعم Strapiجاهزة للإنتاج؟
PostgreSQLأحمال عمل الإنتاج، الاستعلامات المعقدة، حقول JSONأساسي (الأكثر اختباراً)نعم
MySQL 8+الفرق التي تعمل بالفعل على بنية MySQLدعم كاملنعم
MariaDBبديل متوافق مع MySQLدعم كاملنعم
SQLiteالتطوير المحلي، النمذجة السريعة، CI/CDدعم كامللا (كاتب واحد، لا وصول متزامن)

للتطبيقات الغنية بالمحتوى مع 10,000+ مدخلة، تتعامل PostgreSQL مع الضغط مع connection pooling (PgBouncer). تبدأ SQLite في إظهار مشاكل تنازع الكتابة عند بضع مئات من الطلبات المتزامنة — مقبولة لمدير مدونة، إشكالية لـ API عالي الحركة.

نشر Strapi على بيئة الإنتاج

النشر على الإنتاج هو المكان الذي تتوقف فيه معظم أدلة Strapi — وحيث يتعثر معظم المطورين. يحتاج Strapi خادم Node.js مستمراً (ليس موقعاً ثابتاً)، وقاعدة بيانات، وتخزيناً للوسائط، وضبطاً صحيحاً للبيئة. لديك مساران: Strapi Cloud (مُدار) أو الاستضافة الذاتية على منصات مثل Railway أو Render أو DigitalOcean، كما هو موضح في توثيق نشر Strapi.

Strapi Cloud (مُدار)

Strapi Cloud هو خيار الاستضافة الرسمي. يتولى توفير الخوادم وإدارة قاعدة البيانات وشبكة CDN والنسخ الاحتياطية. إليك الطبقات:

الطبقةالسعرالمشاريعاستدعاءات APIالمقاعدالتخزين
مجاني0$/شهر110 آلاف/شهر1500 ميغابايت
أساسي18$/شهر1500 آلاف/شهر325 جيجابايت
احترافي90$/شهرغير محدود2 مليون/شهر10100 جيجابايت
موسّع450$/شهرغير محدود10 ملايين/شهر25500 جيجابايت

Strapi Cloud هو أسرع مسار للإنتاج. لكنه لا يزال يكتسب النضج مقارنة باستضافة Contentful وSanity — مناطق أقل، وضوابط وصول أقل دقة، والطبقة المجانية مقيّدة جداً. للمشاريع الجانبية أو MVPs، الطبقة المجانية تفي بالغرض. للتطبيقات الإنتاجية التي تخدم حركة مرور حقيقية، ستحتاج على الأرجح الطبقة الأساسية أو الاحترافية.

الاستضافة الذاتية على Railway أو Render

من تجربتنا، Railway هو أسرع مسار لنسخة Strapi إنتاجية مُستضافة ذاتياً. تربط مستودع GitHub الخاص بك، تُعيّن متغيرات البيئة، ويتولى Railway الباقي. لمقارنة تفصيلية للمنصات، راجع مقارنتنا بين Railway وRender.

إليك ضبط بيئة الإنتاج:

bash
# .env.production
NODE_ENV=production
HOST=0.0.0.0
PORT=1337

# مفاتيح التطبيق (أنشئ قيماً فريدة!)
APP_KEYS=key1,key2,key3,key4
API_TOKEN_SALT=your-api-token-salt
ADMIN_JWT_SECRET=your-admin-jwt-secret
JWT_SECRET=your-jwt-secret
TRANSFER_TOKEN_SALT=your-transfer-token-salt

# قاعدة البيانات (Railway يوفر DATABASE_URL تلقائياً)
DATABASE_CLIENT=postgres
DATABASE_HOST=${PGHOST}
DATABASE_PORT=${PGPORT}
DATABASE_NAME=${PGDATABASE}
DATABASE_USERNAME=${PGUSER}
DATABASE_PASSWORD=${PGPASSWORD}
DATABASE_SSL=true

# تخزين الوسائط (متوافق مع S3)
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_REGION=us-east-1
AWS_BUCKET=your-strapi-uploads

إن كنت تُفضّل الحاويات، يمكنك إنشاء Docker image لـ Strapi ونشره في أي مكان — راجع دليلنا حول خيارات الحاويات. Railway يدعم أيضاً Nixpacks للبناء التلقائي بدون Dockerfile.

قائمة تحقق ما قبل الإنتاج

قبل الإطلاق المباشر، تحقق من هذه النقاط:

  • ابنِ لوحة الإدارة: نفّذ npm run build — هذا يُصرّف لوحة الإدارة React للإنتاج
  • مدير العمليات: استخدم PM2 للإبقاء على Strapi يعمل وإعادة التشغيل تلقائياً عند الأعطال
  • فحص الصحة: Strapi يكشف /_health (يُعيد HTTP 204) — اجعل موازن الحمل يشير إليه
  • تخزين الوسائط: انتقل من التحميلات المحلية إلى S3 أو Cloudinary — التخزين المحلي لا يستمر على معظم منصات PaaS
  • الوكيل العكسي: ضع Nginx أو Caddy أمام Strapi لإنهاء SSL وتخزين الملفات الثابتة
  • متغيرات البيئة: لا تُودع الأسرار في الكود أبداً. استخدم إدارة متغيرات البيئة الأصلية للمنصة

Strapi مقابل Sanity مقابل Contentful: أيها تختار؟

الاختيار بين Strapi وSanity وContentful يعتمد على ثلاثة أشياء: هل تحتاج استضافة ذاتية، كيف تتعاون فرقك على المحتوى، وقيود ميزانيتك. الثلاثة منصات CMS headless جاهزة للإنتاج، لكنها تُجري مقايضات جذرياً مختلفة. لتغطية أعمق، راجع دليلنا لـ Sanity ودليلنا لـ Contentful.

المعيارStrapiSanityContentful
مفتوح المصدرنعم (MIT)لا (خاص)لا (خاص)
الاستضافة الذاتيةنعم (مطلوبة أو Cloud)لا (مُستضاف فقط)لا (مُستضاف فقط)
التعاون الفوريلانعم (على طراز Google Docs)محدود
لغة الاستعلامREST + GraphQLGROQ + GraphQLREST + GraphQL
الطبقة المجانيةالإصدار المجتمعي (غير محدود)500 ألف طلب API/شهر5 مستخدمين، 25 ألف سجل
منطق الواجهة الخلفية المخصصوصول Node.js كاملدوال serverless فقطWebhooks فقط
حوكمة المؤسساتفي تنامٍقويةالأقوى
منحنى التعلممتوسط (معرفة Node.js مفيدة)متوسط (GROQ فريد)منخفض-متوسط

إطار القرار — اختر بناءً على قيدك الفعلي:

إن احتجت...اخترلأن
ملكية كاملة للكود + استضافة ذاتيةStrapiالخيار مفتوح المصدر الوحيد مع وصول كامل للواجهة الخلفية
تعاون تحريري فوريSanityتحرير متعدد اللاعبين على طراز Google Docs
امتثال مؤسسي (SOC2، HIPAA)Contentfulأنضج أدوات حوكمة وتدقيق
أضيق ميزانية (فريق صغير)Strapi Communityمجاني للأبد، مُستضاف ذاتياً
إدارة محتوى بلا كودWordPressالأسهل للمستخدمين غير التقنيين
منطق API مخصص بدون خدمات خارجيةStrapiوحدات التحكم والخدمات والمسارات في قاعدة كود واحدة

في Techsy، نبني معماريات CMS headless باستخدام Strapi وSanity وContentful. إن احتجت مساعدة في اختيار نظام CMS المناسب لمشروعك أو تريد إعداد Strapi جاهزاً للإنتاج، احصل على استشارة مجانية.

المزايا والعيوب الصريحة ومتى لا تستخدم Strapi

بعد اختبار Strapi 5 في ثلاثة مشاريع عملاء، إليك التقييم الصريح. Strapi ممتاز للفرق التي تريد سيطرة كاملة على الواجهة الخلفية، لكنه ليس الأداة المناسبة للجميع.

المزايا:

  • ملكية كاملة للكود — بياناتك، خادمك، قواعدك
  • رخصة MIT بدون تبعية لمورّد
  • TypeScript أولاً في الإصدار 5 مع استنتاج قوي للأنواع
  • نقاط نهاية REST وGraphQL مُولَّدة تلقائياً من مخططات المحتوى
  • مجتمع نشط: أكثر من 65,000 نجمة GitHub، Discord مع أكثر من 20,000 عضو
  • 500+ إضافة في السوق
  • وحدات التحكم المخصصة تمنحك مرونة الواجهة الخلفية بمستوى Express.js
  • Strapi Cloud يُقدّم خياراً مُداراً إن لم تُرد الاستضافة الذاتية

العيوب:

  • الاستضافة الذاتية تتطلب عمل تشغيلي — توقع 10-20 ساعة/شهر للتحديثات والمراقبة والنسخ الاحتياطية
  • لا تعاون فوري (يمكن لمحررَين الكتابة فوق تغييرات بعضهما)
  • الترحيل من Strapi 4 إلى 5 به احتكاك: Entity Service إلى Document Service، تنسيقات استجابة جديدة، فجوات توافق الإضافات
  • Strapi Cloud لا يزال يكتسب النضج مقارنة بمنصتَي Contentful وSanity المُستضافتين
  • تبني مؤسسي أضعف من Contentful — شهادات امتثال أقل
  • تخصيص لوحة الإدارة، رغم إمكانيته، يتطلب معرفة عميقة بـ APIs الداخلية لـ Strapi

متى لا تستخدم Strapi:

  • تحتاج تعاوناً فورياً — فريقك التحريري يعمل على المحتوى بالتزامن؟ استخدم Sanity. لا يوجد تحرير متعدد اللاعبين في Strapi.
  • تحتاج حوكمة مؤسسية وSOC2 — منظمة مشددة على الامتثال؟ Contentful لديها سبقة عقد في أدوات الحوكمة.
  • فريق غير تقني، بدون دعم مطور — Strapi يحتاج مطوراً للإعداد والنشر والصيانة. إن كان فريقك كله مسوّقين، فكّر في CMS SaaS أو WordPress.
  • معمارية serverless أولاً — Strapi يحتاج خادماً مستمراً. إن كنت تبني كلياً على edge functions وـ serverless، Sanity أو Contentful يناسبان أكثر.

الأسئلة الشائعة

ما هو Strapi وكيف يعمل؟

Strapi نظام إدارة محتوى مفتوح المصدر مبني على Node.js. تُعرّف أنواع المحتوى عبر منشئ بصري أو بالكود، وينشئ Strapi نقاط نهاية API لكل من REST وGraphQL تلقائياً. تطبيقات الواجهة الأمامية تجلب المحتوى بصيغة JSON من هذه النقاط. توفر لوحة الإدارة واجهة React لمحرري المحتوى لإدارة المدخلات دون كتابة كود.

هل Strapi مجاني للاستخدام؟

نعم. Strapi Community Edition مجاني ومفتوح المصدر برخصة MIT. يمكنك استضافته ذاتياً على خادمك الخاص بدون حدود للاستخدام ولا قيود على المقاعد ولا سقف لاستدعاءات API. Strapi Cloud (خيار الاستضافة المُدارة) لديه طبقة مجانية بـ 10,000 استدعاء API شهرياً، مع خطط مدفوعة تبدأ من 18$/شهر لحدود أعلى.

ما الفرق بين Strapi وContentful؟

Strapi مفتوح المصدر ومُستضاف ذاتياً، يمنحك وصولاً كاملاً للكود وملكية البيانات. Contentful منصة SaaS خاصة ذات حوكمة مؤسسية أقوى وشهادات امتثال ومجموعة أدوات تحريرية أكبر. اختر Strapi للسيطرة على الكود والمرونة في الميزانية. اختر Contentful لاحتياجات الامتثال المؤسسي والفرق التحريرية الكبيرة التي تحتاج بنية تحتية مُدارة.

هل Strapi مناسب للمبتدئين؟

Strapi مناسب للمبتدئين إن كانت لديك معرفة أساسية بـ Node.js وJavaScript. لوحة الإدارة وContent-Type Builder بصريان وبديهيان — لا يحتاجان كوداً لنمذجة المحتوى. النشر ومنطق الواجهة الخلفية المخصص يتطلبان خبرة مطور. للمبتدئين المطلقين بلا خلفية برمجية، WordPress أو CMS SaaS مُدار بالكامل سيكونان نقاط بداية أسهل.

ما قاعدة البيانات التي يستخدمها Strapi؟

يدعم Strapi PostgreSQL وMySQL وMariaDB وSQLite. المشاريع الجديدة تفترض SQLite للتطوير بدون إعداد. PostgreSQL موصى بها لأحمال عمل الإنتاج — إنها قاعدة البيانات الأكثر اختباراً مع Strapi وتتعامل جيداً مع الوصول المتزامن والاستعلامات المعقدة وأنواع حقول JSON. تُضبط اتصال قاعدة البيانات في config/database.ts.

كيف تنشر Strapi على الإنتاج؟

يمكنك نشر Strapi على Strapi Cloud (استضافة مُدارة تبدأ من 18$/شهر)، أو الاستضافة الذاتية على منصات مثل Railway وRender وDigitalOcean وAWS. الاستضافة الذاتية تتطلب ضبط خادم Node.js وقاعدة بيانات PostgreSQL ومتغيرات البيئة وتخزين الوسائط (S3 أو Cloudinary) ومدير عمليات مثل PM2. نفّذ npm run build قبل النشر لتصريف لوحة الإدارة.

هل Strapi أفضل من WordPress؟

Strapi وWordPress يحلّان مشاكل مختلفة. Strapi نظام CMS headless يُقدّم JSON APIs لأي واجهة أمامية — مثالي للمطورين الذين يبنون تطبيقات مخصصة أو توصيل محتوى متعدد المنصات أو مواقع ثقيلة JavaScript. WordPress نظام CMS تقليدي يُصيّر صفحات HTML — أفضل للمستخدمين غير التقنيين الذين يريدون قوالب وبنّائين بالسحب والإفلات ومنظومة إضافات ضخمة بدون كتابة كود.

ما عيوب Strapi؟

العيوب الرئيسية هي التكلفة التشغيلية من الاستضافة الذاتية (التحديثات والمراقبة والنسخ الاحتياطية)، وغياب التعاون الفوري للفرق التحريرية، واحتكاك الترحيل بين الإصدارات الرئيسية (من v4 إلى v5 تطلّب تغييرات في الكود)، وعرض مؤسسي أقل نضجاً من Contentful. Strapi Cloud يعالج عبء الاستضافة لكنه لا يزال في مرحلة اللحاق في الميزات والتوافر العالمي.

هل يمكن لـ Strapi التعامل مع التطبيقات الكبيرة الحجم؟

نعم. يمكن لـ Strapi التعامل مع التطبيقات الكبيرة الحجم مع البنية التحتية المناسبة: PostgreSQL مع connection pooling، توسّع أفقي خلف موازن حمل، شبكة CDN للوسائط، وRedis للتخزين المؤقت. تستخدم شركات مثل IBM وNASA وToyota Strapi في الإنتاج. الاختناق عادةً في أداء قاعدة البيانات وضبط الاستضافة، لا في Strapi نفسه.

ما هو Strapi Cloud وكم يكلف؟

Strapi Cloud هو منصة الاستضافة المُدارة الرسمية لمشاريع Strapi. تتولى توفير الخوادم وإدارة قاعدة البيانات وشبكة CDN والنسخ الاحتياطية التلقائية. التسعير يبدأ بطبقة مجانية (مشروع واحد، 10 آلاف استدعاء API/شهر)، ثم أساسي بـ 18$/شهر، احترافي بـ 90$/شهر، وموسّع بـ 450$/شهر. كل طبقة تزيد حدود استدعاءات API ومقاعد الفريق وسعة التخزين.

الوسوم

strapi-guideheadless-cmsstrapi-5open-source-cmsnodejs-cms

شارك هذا المقال

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

المزيد في guides

guides
Jul 28, 2026

الـ9 مقاييس SaaS الوحيدة المهمة في 2026 (بمقارنة مرجعية مع أكثر من 1,300 شركة)

معظم أدلة مقاييس SaaS تستشهد بحدود وُضعت في 2021 ولا تنسبها لأحد. هذا الدليل ينشر تسعة مقاييس بوسطاء CY-2025 من تقارير إصدار 2026، ومقاطع الربع الأعلى، وحجم العينة وراء كل رقم، وستة مقاييس ينبغي التوقف عن تتبعها.

13 دقيقة قراءة قراءة
اقرأ
guides
Jul 28, 2026

قالب وثيقة متطلبات المنتج (PRD) + مثال عملي كامل يمكنك نسخه

معظم قوالب PRD تعطيك نموذجًا فارغًا وتتركك وحدك. هذا القالب يأتي بصيغة ماركداون جاهزة للنسخ، ويملأ الأقسام الاثني عشر جميعها بمثال بناء كامل لبوابة فواتير، ويوضح كيف تتغير الوثيقة نفسها حين يكون القارئ وكيل ذكاء اصطناعي مبرمجًا.

13 دقيقة قراءة قراءة
اقرأ
ابدأ مشروعك

هل أنت مستعد لبناء شيء استثنائي؟

دعنا نحول رؤيتك إلى واقع. فريقنا جاهز لمساعدتك في إنشاء برمجيات تصنع الفرق.