شغّل المطعم محليًا
ثبّت كل تطبيق وشغّله باستخدام Node.js و Yarn، بطرفية مستقلة لكل تطبيق.
لحزمة الحزمة الكاملة
قبل أن تبدأ: ثبّت Node.js 24 أو أحدث وشغّل corepack enable مرة واحدة. لا تحتاج إلى خادم قاعدة بيانات.
افتح كل طرفية في المكان الذي تتوقعه الأوامر أدناه: داخل food-studio-full-stack للحزمة الكاملة، أو بجوار مجلد التطبيق لحزمة التطبيق الواحد.
| التطبيق | المجلد | العنوان |
|---|---|---|
| API | back-end | localhost:8000محلي |
| موقع الطلبات | storefront | localhost:3030محلي |
| لوحة تحكم الفريق | admin-dashboard | localhost:3031محلي |
شغّل واجهة API أولًا: تقرأ الواجهتان الأماميتان كل بياناتهما منها.
شغّل واجهة API
ثبّت واضبط الإعداد
يعمل
.env.exampleكما هو للتطوير المحلي: SQLite على المنفذ8000.تواجه مشكلة؟الطرفيةcorepack enable cd back-end yarn install cp .env.example .envأنشئ قاعدة البيانات
ينشئ
yarn seedالملفdatabase.sqliteوجداوله والمطعم التجريبي: ثماني فئات، و64 طبقًا مع صورها، والكومبو، وأربعة مطابخ، والفريق، وستة أسابيع من الطلبات والتقييمات ونقاط المكافآت. تشغيله مرة أخرى يضيف ما هو ناقص فقط.الطرفيةفيback-endyarn seedشغّل الخادم
الطرفيةفيback-endyarn devالنتيجة المتوقعة: يجيب localhost:8000/api/healthمحلي بـ
تواجه مشكلة؟{"success":true,"data":{"status":"ok","database":"up"},"message":""}.
شغّل واجهة API
ثبّت واضبط الإعداد
يعمل
.env.exampleكما هو للتطوير المحلي: SQLite على المنفذ8000.تواجه مشكلة؟الطرفيةcorepack enable cd food-studio-backend yarn install cp .env.example .envأنشئ قاعدة البيانات
ينشئ
yarn seedالملفdatabase.sqliteوجداوله والمطعم التجريبي: ثماني فئات، و64 طبقًا مع صورها، والكومبو، وأربعة مطابخ، والفريق، وستة أسابيع من الطلبات والتقييمات ونقاط المكافآت. تشغيله مرة أخرى يضيف ما هو ناقص فقط.الطرفيةفيfood-studio-backendyarn seedشغّل الخادم
الطرفيةفيfood-studio-backendyarn devالنتيجة المتوقعة: يجيب localhost:8000/api/healthمحلي بـ
تواجه مشكلة؟{"success":true,"data":{"status":"ok","database":"up"},"message":""}.
شغّل موقع الطلبات
في طرفية ثانية:
ثبّت واضبط الإعداد
يوجّه ملف
.envالمنسوخ الموقعَ إلى واجهة API على المنفذ8000.الطرفيةcd storefront yarn install cp .env.example .envشغّله
الطرفيةفيstorefrontyarn devالنتيجة المتوقعة: يفتح localhost:3030محلي الموقع بالإنجليزية مع القائمة التجريبية؛ والنسخة العربية على
تواجه مشكلة؟/ar.
شغّل موقع الطلبات
واجهة API ليست جزءًا من هذه الحزمة. شغّلها أولًا؛ يتوقعها ملف .env المنسوخ على http://localhost:8000/api.
ثبّت واضبط الإعداد
إذا كانت واجهة API تعمل في مكان آخر، اضبط
NEXT_PUBLIC_API_BASE_URLفي.envعلى عنوانها، مع/api.تواجه مشكلة؟الطرفيةcorepack enable cd food-studio-website yarn install cp .env.example .envشغّله
الطرفيةفيfood-studio-websiteyarn devالنتيجة المتوقعة: يفتح localhost:3030محلي الموقع مع القائمة القادمة من واجهة API الخاصة بك؛ والنسخة العربية على
تواجه مشكلة؟/ar.
شغّل لوحة تحكم الفريق
في طرفية ثالثة:
ثبّت واضبط الإعداد
يوجّه ملف
.envالمنسوخ لوحة التحكم إلى واجهة API وإشعاراتها المباشرة على المنفذ8000.الطرفيةcd admin-dashboard yarn install cp .env.example .envشغّلها وسجّل الدخول
الطرفيةفيadmin-dashboardyarn devالنتيجة المتوقعة: يفتح localhost:3031محلي نموذج تسجيل الدخول. سجّل الدخول بـ
تواجه مشكلة؟owner@foodstudio.exampleوكلمة المرورFoodDemo2026!.
شغّل لوحة تحكم الفريق
واجهة API ليست جزءًا من هذه الحزمة. شغّلها أولًا؛ يتوقعها ملف .env المنسوخ على http://localhost:8000/api.
ثبّت واضبط الإعداد
إذا كانت واجهة API تعمل في مكان آخر، اضبط
NEXT_PUBLIC_API_BASE_URL(مع/api) وNEXT_PUBLIC_WEBSOCKET_BASE_URL(من دونه) في.envعلى عنوانها.تواجه مشكلة؟الطرفيةcorepack enable cd food-studio-staff-dashboard yarn install cp .env.example .envشغّلها وسجّل الدخول
الطرفيةفيfood-studio-staff-dashboardyarn devالنتيجة المتوقعة: يفتح localhost:3031محلي نموذج تسجيل الدخول. سجّل الدخول بحساب المالك
تواجه مشكلة؟owner@foodstudio.exampleوكلمة المرورFoodDemo2026!، وهو حساب تقبله واجهة API بعد تعبئة بياناتها.
بناء الإنتاج
المجلدات نفسها، تُبنى مرة واحدة ثم تُشغَّل. اضبط أولًا ملف .env الخاص بواجهة API للإنتاج: مع NODE_ENV=production لا تنشئ واجهة API أي جداول عند بدء التشغيل، وترفض أن تبدأ ما دام JWT_SECRET فارغًا أو بقيمة المثال، أو ما دام CORS_ORIGIN فارغًا.
NODE_ENV=production
JWT_SECRET=paste-the-generated-secret-here
CORS_ORIGIN=http://localhost:3030,http://localhost:3031
FRONTEND_URL=http://localhost:3031
STOREFRONT_URL=http://localhost:3030ولّد السر بالأمر node -e "console.log(require('crypto').randomBytes(48).toString('hex'))". ثم، داخل مجلد واجهة API، ابنِها، وأنشئ جداولها مرة واحدة، وشغّلها. يضيف yarn seed:prod المطعم التجريبي وحساباته؛ أما yarn db:sync:prod بدلًا منه فينشئ جداول فارغة من دون حسابات.
yarn build
yarn seed:prod
yarn start:prodبناء الإنتاج للواجهات الأمامية
في مجلد كل واجهة أمامية، ابنِ مرة واحدة ثم شغّل. يعمل الموقع على 3030 ولوحة التحكم على 3031.
yarn build
yarn startتُضمِّن الواجهات الأمامية ملف .env الخاص بها وقت البناء، لذلك شغّل yarn build مجددًا بعد تغييره. قبل النشر في أي مكان عام، اقرأ قائمة التحقق الخاصة بالإطلاق.
ابدأ من جديد ببيانات تجريبية جديدة
أوقف واجهة API، ثم احذف ملف قاعدة البيانات واملأه بالبيانات مرة أخرى، داخل مجلد واجهة API. هذا يحذف كل ما أنشأته.
rm -f database.sqlite* && yarn seedفي PowerShell:
Remove-Item database.sqlite*; yarn seed