انتقل إلى المقال
Aniq-UI

Northstackشغّل Northstack محليًا

شغّل Northstack محليًا

شغّل حزمتك على جهازك باستخدام Docker.

لحزمة الحزمة الكاملة

قبل أن تبدأ: ثبّت Docker Desktop وافتحه، أو Docker Engine مع Compose.

اطّلع على المتطلبات
  1. نزّل قالبك

    افتح صفحة «قوالبي» ونزّل ملف ZIP الخاص بحزمتك.

    النتيجة المتوقعة: يوجد في التنزيلات ملف باسم يشبه northstack-full-stack-….zip.

  2. فك الضغط وافتح المجلد

    افتح طرفية في المكان الذي فيه ملف ZIP، وفك ضغطه وانتقل إلى المجلد northstack-full-stack. على Windows يمكنك فك الضغط في مستكشف الملفات بدلًا من ذلك، ثم فتح طرفية داخل المجلد.

    الطرفية
    unzip -q northstack-full-stack-*.zip
    cd northstack-full-stack
    ls

    النتيجة المتوقعة: يعرض المجلد back-end وdashboard وwebsite وdocker-compose.yml، بجانب README.md وQUICKSTART.md وLICENSE.md.

    تواجه مشكلة؟
  3. شغّل التطبيقات

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

    الطرفيةفي northstack-full-stack
    docker compose up --build

    المنفذ مستخدم بالفعل؟

    إذا توقف التشغيل برسالة ports are not available أو address already in use أو port is already allocated، فهناك برنامج آخر يستخدم 3030 أو 3031 أو 8000. أوقفه، أو أنشئ ملفًا باسم .env في المجلد northstack-full-stack بجانب docker-compose.yml يحمل المنفذ الذي تحتاج إليه، مثل ADMIN_PORT=3041 (وSITE_PORT للموقع وAPI_PORT لواجهة API). شغّل docker compose up --build مرة أخرى وافتح التطبيق على منفذه الجديد.

    المنفذ مستخدم بالفعل

    النتيجة المتوقعة: تبقى الخدمات الثلاث قيد التشغيل ويتوقف السجل عن التمرير. اترك هذه الطرفية مفتوحة.

    تواجه مشكلة؟
  4. افتح الموقع العام

    افتح localhost:3030محلي. الإنجليزية على /en والعربية على /ar. ليس للموقع حسابات خاصة به: أزرار «جرّب العرض الحي» فيه تفتح تسجيل الدخول إلى لوحة التحكم.

    النتيجة المتوقعة: يفتح الموقع على صفحته الرئيسية. تبيع صفحة الأسعار الترخيصين عبر الدفع الخاص بالموقع، الذي لا يحاسب أحدًا إلى أن تحمل واجهة API مفاتيح الدفع.

    تواجه مشكلة؟
  5. سجّل الدخول إلى لوحة التحكم

    افتح localhost:3031محلي. سجّل الدخول بالبريد owner@northstack.example وكلمة المرور NorthstackDemo26!. كل حساب تجريبي يستخدم كلمة المرور هذه؛ غيّرها قبل أن يصبح المشروع متاحًا من الإنترنت.

    النتيجة المتوقعة: تفتح لوحة التحكم على «نظرة عامة على مساحة العمل» الخاصة بـ Forma Studio، مع مشاريعها واستخدام هذا الشهر ومخطط نشاط المشاريع وقائمة الإطلاق.

    تواجه مشكلة؟

جولة سريعة

شكل مساحة العمل التجريبية عندما يعمل كل شيء.

الحسابالبريد الإلكترونيالمكان
مالك Forma Studio: كل صفحات مساحة العمل وإجراءاتها، والفوترة، ومصفوفة الأدوار، وحذف مساحة العمل؛ وهو أيضًا مسؤول في Monogramowner@northstack.exampleلوحة التحكم
مسؤول: المشاريع، والفريق والدعوات، وإعدادات مساحة العمل، ومفاتيح API، وسجل النشاط؛ والأدوار للقراءة فقط، ولا فوترةadmin@northstack.exampleلوحة التحكم
عضو: المشاريع والمهام، والمساعد؛ والفريق والأدوار والإعدادات للقراءة، ولا فوترةmember@northstack.exampleلوحة التحكم
الفوترة: الاشتراك، وتغيير الخطط، والفواتير؛ والفريق والأدوار والإعدادات للقراءة؛ ولا مشاريع (النظرة العامة تستبعدها أيضًا) ولا مساعدbilling@northstack.exampleلوحة التحكم
مسؤول المنصة: كل مؤسسة ومستخدم وعضو في فريق المنصة ودور منصة وإعدادplatform@northstack.exampleلوحة التحكم
الدعم: كل صفحات المنصة للقراءة فقط، وتصدير التقاريرsupport@northstack.exampleلوحة التحكم

كل حساب يسجّل الدخول بكلمة المرور NorthstackDemo26!. هذه حسابات تجريبية محلية فقط: على الخادم ابدأ فارغًا بـ SEED_SAMPLE_DATA=false ومسؤول منصة خاص بك (البدء فارغًا).

تضيف البيانات الأولية Forma Studio على خطة Pro، مع 12 مشروعًا ولوحات مهامها، و8 أعضاء، ودعوتين مفتوحتين، وثلاث فواتير، ومفتاح API، ونشاط الأسابيع الماضية، وثلاث محادثات سابقة مع المساعد؛ ومساحة عمل ثانية هي Monogram ينتقل إليها المالك من مبدّل مساحات العمل. وخلف إدارة المنصة 732 مؤسسة في المجموع، فتفتح كل قائمة ورقم ممتلئة. الحساب الجديد الذي يُنشأ في صفحة إنشاء الحساب يمر بالإعداد الأولي وينشئ مساحة عمله الخاصة.

أوقف التطبيقات وأعد تشغيلها

اضغط Ctrl+C في الطرفية لإيقاف التطبيقات، أو شغّل هذا من المجلد northstack-full-stack. تُحفظ بياناتك، أي قاعدة البيانات والملفات المرفوعة، في وحدة التخزين northstack-data.

الطرفيةفي northstack-full-stack
docker compose down

أعد التشغيل بالأمر نفسه في الخطوة 3. من دون --build يعيد استخدام الصور التي بنيتها مسبقًا.

الطرفيةفي northstack-full-stack
docker compose up

حافظ على بياناتك

يحذف docker compose down -v وحدة تخزين البيانات أيضًا. يملأ التشغيل التالي نسخة جديدة من مساحات العمل التجريبية، ويضيع كل ما أنشأته.

شغّل الموقع العام

هذه الحزمة هي الموقع العام وحده. من دون واجهة API يعمل ببياناته التجريبية المدمجة: نموذج التواصل ودفع الترخيص يجيبان داخل المتصفح، ولا يُرسَل شيء إلى أي مكان. لاستخدام واجهة Northstack API بدلًا من ذلك، ابنه بعنوان واجهة API. واجهة API حزمة منفصلة وليست في هذا التنزيل.

  1. نزّل قالبك

    افتح صفحة «قوالبي» ونزّل ملف ZIP لموقع SaaS.

  2. فك الضغط وافتح المجلد

    الطرفية
    unzip -q northstack-website-*.zip
    cd northstack-website
    ls

    النتيجة المتوقعة: في المجلد Dockerfile وpackage.json ودليل QUICKSTART.md.

    تواجه مشكلة؟
  3. ابنِ الصورة

    بمفرده ومن دون واجهة API: يبني NEXT_PUBLIC_API_BASE_URL الفارغ الموقع على بياناته التجريبية.

    الطرفيةفي northstack-website
    docker build -t northstack-website --build-arg NEXT_PUBLIC_API_BASE_URL= .

    مع Northstack API على http://localhost:8000/api ولوحة التحكم على http://localhost:3031، ابنِ من دون معاملات:

    الطرفيةفي northstack-website
    docker build -t northstack-website .

    مع واجهة API ونطاقاتك الخاصة، تُدمج قيم NEXT_PUBLIC_* في JavaScript الذي يحمّله المتصفح، لذلك هي معاملات بناء:

    الطرفيةفي northstack-website
    docker build -t northstack-website --build-arg NEXT_PUBLIC_SITE_URL=https://www.your-domain.com --build-arg NEXT_PUBLIC_API_BASE_URL=https://api.your-domain.com/api --build-arg NEXT_PUBLIC_DASHBOARD_URL=https://app.your-domain.com .
    تواجه مشكلة؟
  4. شغّله

    إذا كان المنفذ 3030 مشغولًا، غيّر الرقم على يسار -p، مثل -p 3040:3030، وافتح ذلك المنفذ بدلًا منه. ومع واجهة API ابنِ أيضًا بـ NEXT_PUBLIC_SITE_URL=http://localhost:3040، وأضف هذا العنوان إلى CORS_ORIGIN وWEBSITE_URL في واجهة API.

    الطرفيةفي northstack-website
    docker run -p 3030:3030 northstack-website

    النتيجة المتوقعة: يفتح localhost:3030محلي الموقع. الإنجليزية على /en والعربية على /ar. وعند البناء من دون واجهة API يظهر إشعار «بيانات تجريبية» أسفل كل صفحة ليخبرك بذلك.

    تواجه مشكلة؟

مع واجهة API على جهازك، يكون localhost داخل الحاوية هو الحاوية نفسها. ما زال المتصفح يصل إلى واجهة API، لكن لكي يكتمل الدفع وإيصاله حين يعرضهما الخادم، أخبر خادم الموقع بمكان واجهة API. يجعل --add-host العنوان host.docker.internal يعمل على Linux؛ أما Docker Desktop فيملكه أصلًا.

الطرفيةفي northstack-website
docker run -p 3030:3030 -e API_INTERNAL_URL=http://host.docker.internal:8000/api --add-host=host.docker.internal:host-gateway northstack-website

شغّل لوحة تحكم مساحة العمل

هذه الحزمة هي لوحة تحكم مساحة العمل وحدها. من دون واجهة API تعمل ببياناتها التجريبية المدمجة داخل متصفحك، حيث يسجّل أي إدخال الدخول. لاستخدام واجهة Northstack API بدلًا من ذلك، ابنها بعنوان واجهة API. واجهة API حزمة منفصلة وليست في هذا التنزيل.

  1. نزّل قالبك

    افتح صفحة «قوالبي» ونزّل ملف ZIP للوحة تحكم مساحة العمل.

  2. فك الضغط وافتح المجلد

    الطرفية
    unzip -q northstack-dashboard-*.zip
    cd northstack-dashboard
    ls

    النتيجة المتوقعة: في المجلد Dockerfile وpackage.json ودليل QUICKSTART.md.

    تواجه مشكلة؟
  3. ابنِ الصورة

    بمفردها ومن دون واجهة API: يبني NEXT_PUBLIC_API_BASE_URL الفارغ لوحة التحكم على بياناتها التجريبية.

    الطرفيةفي northstack-dashboard
    docker build -t northstack-dashboard --build-arg NEXT_PUBLIC_API_BASE_URL= .

    مع Northstack API على http://localhost:8000/api (وتحديثاتها المباشرة على http://localhost:8000) والموقع على http://localhost:3030، ابنِ من دون معاملات:

    الطرفيةفي northstack-dashboard
    docker build -t northstack-dashboard .

    مع واجهة API ونطاقاتك الخاصة، أعطِ العناوين التي يصل بها المتصفح إليها:

    الطرفيةفي northstack-dashboard
    docker build -t northstack-dashboard --build-arg NEXT_PUBLIC_API_BASE_URL=https://api.your-domain.com/api --build-arg NEXT_PUBLIC_BASE_URL=https://app.your-domain.com --build-arg NEXT_PUBLIC_WEBSITE_URL=https://www.your-domain.com .
    تواجه مشكلة؟
  4. شغّلها وسجّل الدخول

    إذا كان المنفذ 3031 مشغولًا، غيّر الرقم على يسار -p، مثل -p 3041:3031، وافتح ذلك المنفذ بدلًا منه. ومع واجهة API ابنِ أيضًا بـ NEXT_PUBLIC_BASE_URL=http://localhost:3041، وأضف هذا العنوان إلى CORS_ORIGIN في واجهة API، واضبطه قيمةً لـ DASHBOARD_URL وFRONTEND_URL فيها.

    الطرفيةفي northstack-dashboard
    docker run -p 3031:3031 northstack-dashboard

    النتيجة المتوقعة: يفتح localhost:3031محلي نموذج تسجيل الدخول. على البيانات التجريبية يسجّل أي إدخال الدخول، ويفتح owner@northstack.example مساحة عمل المالك. ومع واجهة API مملوءة بالبيانات، سجّل الدخول بـ owner@northstack.example وكلمة المرور NorthstackDemo26!.

    تواجه مشكلة؟

شغّل واجهة API

هذه الحزمة هي واجهة NestJS API وحدها، على ملف SQLite محفوظ في وحدة تخزين Docker باسم northstack-api-data، مع الملفات المرفوعة. الموقع العام ولوحة تحكم مساحة العمل حزمتان منفصلتان وليستا في هذا التنزيل.

  1. نزّل قالبك

    افتح صفحة «قوالبي» ونزّل ملف ZIP الخاص بواجهة API.

  2. فك الضغط وافتح المجلد

    الطرفية
    unzip -q northstack-backend-*.zip
    cd northstack-backend
    ls

    النتيجة المتوقعة: في المجلد Dockerfile وdocker-entrypoint.sh وpackage.json ودليل QUICKSTART.md.

    تواجه مشكلة؟
  3. ابنِ الصورة

    الطرفيةفي northstack-backend
    docker build -t northstack-api .
    تواجه مشكلة؟
  4. شغّلها مع البيانات التجريبية

    تُملأ وحدة التخزين الجديدة مرة واحدة بمساحات العمل التجريبية والحسابات أدناه، وكل تشغيل لاحق يُبقي ما فيها. على الخادم شغّلها فارغة بدلًا من ذلك بـ -e SEED_SAMPLE_DATA=false (البدء فارغًا). إذا كان المنفذ 8000 مشغولًا، غيّر الرقم على يسار -p، مثل -p 8010:8000، وأضف -e PUBLIC_API_URL=http://localhost:8010 -e PUBLIC_MEDIA_URL=http://localhost:8010/media لتستخدم الروابط التي تكتبها (الوسائط وتنزيلات الفواتير) المنفذ الجديد أيضًا. ويجب حينها أن تشير واجهتاك الأماميتان إلى http://localhost:8010/api.

    الطرفيةفي northstack-backend
    docker run -p 8000:8000 -v northstack-api-data:/data northstack-api

    النتيجة المتوقعة: يجيب localhost:8000/api/healthمحلي بـ "status":"ok" و"database":"up".

    تواجه مشكلة؟

الحسابات التجريبية هي owner@northstack.example وadmin@northstack.example وmember@northstack.example وbilling@northstack.example وplatform@northstack.example وsupport@northstack.example، وكلها بكلمة المرور NorthstackDemo26!. سجّل الدخول عبر POST /api/auth/login، أو من لوحة تحكم Northstack.

تقبل الحاوية الموقع على http://localhost:3030 ولوحة التحكم على http://localhost:3031. على عناوين أخرى مرّر CORS_ORIGIN (الاثنين، مفصولين بفاصلة) وFRONTEND_URL وDASHBOARD_URL (لوحة التحكم) وWEBSITE_URL (الموقع) باستخدام -e. ومرّر مفاتيحك بالطريقة نفسها، فقط ما تحتاج إليه:

الطرفيةفي northstack-backend
docker run -p 8000:8000 -v northstack-api-data:/data -e GOOGLE_API_KEY=your-key northstack-api

لا تمرّر --env-file .env مع نسخة من .env.example: فهو يضبط NODE_ENV=development فوق القيمة الافتراضية للإنتاج في الصورة، مما يتيح لواجهة API تغيير مخطط قاعدة البيانات بنفسها عند كل تشغيل. ومن دون JWT_SECRET خاص بك، أو مع قيمة المثال، تولّد الحاوية سرًّا وتحفظه في وحدة التخزين، فتبقى جلسات الدخول بعد إعادة التشغيل.

للبدء من جديد ببيانات تجريبية جديدة، احذف الحاوية أولًا (docker rm -f مع اسمها)، ثم احذف وحدة التخزين بالأمر docker volume rm northstack-api-data.

التالي

توقفت عند خطوة؟

ابحث عن الحل قبل أن تبدأ من جديد.

حل المشكلات

تفضيلات ملفات تعريف الارتباط

نستخدم ملفات تعريف الارتباط لتعزيز تجربة التصفح الخاصة بك وتحليل حركة المرور على الموقع وتخصيص المحتوى. بالنقر على "قبول الكل"، فإنك توافق على استخدامنا لملفات تعريف الارتباط للتحليلات والإعلانات المخصصة.