شغّل Northstack محليًا
شغّل حزمتك على جهازك باستخدام Docker.
لحزمة الحزمة الكاملة
قبل أن تبدأ: ثبّت Docker Desktop وافتحه، أو Docker Engine مع Compose.
اطّلع على المتطلباتنزّل قالبك
افتح صفحة «قوالبي» ونزّل ملف ZIP الخاص بحزمتك.
النتيجة المتوقعة: يوجد في التنزيلات ملف باسم يشبه
northstack-full-stack-….zip.فك الضغط وافتح المجلد
افتح طرفية في المكان الذي فيه ملف 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.شغّل التطبيقات
ابنِ واجهة API والموقع العام ولوحة تحكم مساحة العمل وشغّلها. لا شيء يلزم ضبطه أولًا. يبني التشغيل الأول ثلاث صور ويملأ قاعدة البيانات بمساحات العمل التجريبية، وهذا يستغرق بضع دقائق؛ أما التشغيلات اللاحقة فتستغرق ثوانيَ.
الطرفيةفيnorthstack-full-stackdocker 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مرة أخرى وافتح التطبيق على منفذه الجديد.النتيجة المتوقعة: تبقى الخدمات الثلاث قيد التشغيل ويتوقف السجل عن التمرير. اترك هذه الطرفية مفتوحة.
تواجه مشكلة؟افتح الموقع العام
افتح localhost:3030محلي. الإنجليزية على
/enوالعربية على/ar. ليس للموقع حسابات خاصة به: أزرار «جرّب العرض الحي» فيه تفتح تسجيل الدخول إلى لوحة التحكم.النتيجة المتوقعة: يفتح الموقع على صفحته الرئيسية. تبيع صفحة الأسعار الترخيصين عبر الدفع الخاص بالموقع، الذي لا يحاسب أحدًا إلى أن تحمل واجهة API مفاتيح الدفع.
تواجه مشكلة؟سجّل الدخول إلى لوحة التحكم
افتح localhost:3031محلي. سجّل الدخول بالبريد
owner@northstack.exampleوكلمة المرورNorthstackDemo26!. كل حساب تجريبي يستخدم كلمة المرور هذه؛ غيّرها قبل أن يصبح المشروع متاحًا من الإنترنت.النتيجة المتوقعة: تفتح لوحة التحكم على «نظرة عامة على مساحة العمل» الخاصة بـ Forma Studio، مع مشاريعها واستخدام هذا الشهر ومخطط نشاط المشاريع وقائمة الإطلاق.
تواجه مشكلة؟
جولة سريعة
شكل مساحة العمل التجريبية عندما يعمل كل شيء.
| الحساب | البريد الإلكتروني | المكان |
|---|---|---|
| مالك Forma Studio: كل صفحات مساحة العمل وإجراءاتها، والفوترة، ومصفوفة الأدوار، وحذف مساحة العمل؛ وهو أيضًا مسؤول في Monogram | owner@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-stackdocker compose downأعد التشغيل بالأمر نفسه في الخطوة 3. من دون --build يعيد استخدام الصور التي بنيتها مسبقًا.
northstack-full-stackdocker compose upحافظ على بياناتك
يحذف docker compose down -v وحدة تخزين البيانات أيضًا. يملأ التشغيل التالي نسخة جديدة من مساحات العمل التجريبية، ويضيع كل ما أنشأته.
شغّل الموقع العام
هذه الحزمة هي الموقع العام وحده. من دون واجهة API يعمل ببياناته التجريبية المدمجة: نموذج التواصل ودفع الترخيص يجيبان داخل المتصفح، ولا يُرسَل شيء إلى أي مكان. لاستخدام واجهة Northstack API بدلًا من ذلك، ابنه بعنوان واجهة API. واجهة API حزمة منفصلة وليست في هذا التنزيل.
فك الضغط وافتح المجلد
الطرفيةunzip -q northstack-website-*.zip cd northstack-website lsالنتيجة المتوقعة: في المجلد
تواجه مشكلة؟Dockerfileوpackage.jsonودليلQUICKSTART.md.ابنِ الصورة
بمفرده ومن دون واجهة API: يبني
NEXT_PUBLIC_API_BASE_URLالفارغ الموقع على بياناته التجريبية.الطرفيةفيnorthstack-websitedocker build -t northstack-website --build-arg NEXT_PUBLIC_API_BASE_URL= .مع Northstack API على
http://localhost:8000/apiولوحة التحكم علىhttp://localhost:3031، ابنِ من دون معاملات:الطرفيةفيnorthstack-websitedocker build -t northstack-website .مع واجهة API ونطاقاتك الخاصة، تُدمج قيم
NEXT_PUBLIC_*في JavaScript الذي يحمّله المتصفح، لذلك هي معاملات بناء:الطرفيةفيnorthstack-websitedocker 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 .تواجه مشكلة؟شغّله
إذا كان المنفذ
3030مشغولًا، غيّر الرقم على يسار-p، مثل-p 3040:3030، وافتح ذلك المنفذ بدلًا منه. ومع واجهة API ابنِ أيضًا بـNEXT_PUBLIC_SITE_URL=http://localhost:3040، وأضف هذا العنوان إلىCORS_ORIGINوWEBSITE_URLفي واجهة API.الطرفيةفيnorthstack-websitedocker run -p 3030:3030 northstack-websiteالنتيجة المتوقعة: يفتح localhost:3030محلي الموقع. الإنجليزية على
تواجه مشكلة؟/enوالعربية على/ar. وعند البناء من دون واجهة API يظهر إشعار «بيانات تجريبية» أسفل كل صفحة ليخبرك بذلك.
مع واجهة API على جهازك، يكون localhost داخل الحاوية هو الحاوية نفسها. ما زال المتصفح يصل إلى واجهة API، لكن لكي يكتمل الدفع وإيصاله حين يعرضهما الخادم، أخبر خادم الموقع بمكان واجهة API. يجعل --add-host العنوان host.docker.internal يعمل على Linux؛ أما Docker Desktop فيملكه أصلًا.
northstack-websitedocker 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 حزمة منفصلة وليست في هذا التنزيل.
فك الضغط وافتح المجلد
الطرفيةunzip -q northstack-dashboard-*.zip cd northstack-dashboard lsالنتيجة المتوقعة: في المجلد
تواجه مشكلة؟Dockerfileوpackage.jsonودليلQUICKSTART.md.ابنِ الصورة
بمفردها ومن دون واجهة API: يبني
NEXT_PUBLIC_API_BASE_URLالفارغ لوحة التحكم على بياناتها التجريبية.الطرفيةفيnorthstack-dashboarddocker build -t northstack-dashboard --build-arg NEXT_PUBLIC_API_BASE_URL= .مع Northstack API على
http://localhost:8000/api(وتحديثاتها المباشرة علىhttp://localhost:8000) والموقع علىhttp://localhost:3030، ابنِ من دون معاملات:الطرفيةفيnorthstack-dashboarddocker build -t northstack-dashboard .مع واجهة API ونطاقاتك الخاصة، أعطِ العناوين التي يصل بها المتصفح إليها:
الطرفيةفيnorthstack-dashboarddocker 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 .تواجه مشكلة؟شغّلها وسجّل الدخول
إذا كان المنفذ
3031مشغولًا، غيّر الرقم على يسار-p، مثل-p 3041:3031، وافتح ذلك المنفذ بدلًا منه. ومع واجهة API ابنِ أيضًا بـNEXT_PUBLIC_BASE_URL=http://localhost:3041، وأضف هذا العنوان إلىCORS_ORIGINفي واجهة API، واضبطه قيمةً لـDASHBOARD_URLوFRONTEND_URLفيها.الطرفيةفيnorthstack-dashboarddocker run -p 3031:3031 northstack-dashboardالنتيجة المتوقعة: يفتح localhost:3031محلي نموذج تسجيل الدخول. على البيانات التجريبية يسجّل أي إدخال الدخول، ويفتح
تواجه مشكلة؟owner@northstack.exampleمساحة عمل المالك. ومع واجهة API مملوءة بالبيانات، سجّل الدخول بـowner@northstack.exampleوكلمة المرورNorthstackDemo26!.
شغّل واجهة API
هذه الحزمة هي واجهة NestJS API وحدها، على ملف SQLite محفوظ في وحدة تخزين Docker باسم northstack-api-data، مع الملفات المرفوعة. الموقع العام ولوحة تحكم مساحة العمل حزمتان منفصلتان وليستا في هذا التنزيل.
فك الضغط وافتح المجلد
الطرفيةunzip -q northstack-backend-*.zip cd northstack-backend lsالنتيجة المتوقعة: في المجلد
تواجه مشكلة؟Dockerfileوdocker-entrypoint.shوpackage.jsonودليلQUICKSTART.md.شغّلها مع البيانات التجريبية
تُملأ وحدة التخزين الجديدة مرة واحدة بمساحات العمل التجريبية والحسابات أدناه، وكل تشغيل لاحق يُبقي ما فيها. على الخادم شغّلها فارغة بدلًا من ذلك بـ
-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-backenddocker 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-backenddocker 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.