شغّل نشاط الحجز محليًا
ثبّت كل تطبيق وشغّله باستخدام Node.js و Yarn، بطرفية مستقلة لكل تطبيق.
لحزمة الحزمة الكاملة
قبل أن تبدأ: ثبّت Node.js 22 أو أحدث وشغّل corepack enable مرة واحدة (على Node.js 25 وما بعده، التي لا تضم Corepack، شغّل npm install -g corepack أولًا). لا حاجة إلى خادم قاعدة بيانات.
افتح كل طرفية في المكان الذي تتوقعه الأوامر أدناه: داخل hollina-vacation-rental-full-stack للحزمة الكاملة، أو بجوار مجلد التطبيق لحزمة تطبيق واحد.
| التطبيق | المجلد | العنوان |
|---|---|---|
| API | back-end | localhost:8000محلي |
| موقع الإقامات | storefront | localhost:3030محلي |
| لوحة تحكم الحجوزات | admin-dashboard | localhost:3031محلي |
شغّل واجهة API أولًا: تقرأ الواجهتان الأماميتان كل بياناتهما منها.
شغّل واجهة API
ثبّت واضبط الإعداد
يعمل
.env.exampleكما هو في التطوير المحلي: SQLite على المنفذ8000، وبلا مفاتيح دفع، فيقبل المحاكي المرفق كل حجز بالبطاقة أو PayPal.الطرفيةcorepack enable cd back-end yarn install cp .env.example .envتواجه مشكلة؟أنشئ قاعدة البيانات
يتحقق
yarn seedمن وجود كل صورة أولية، ثم ينشئdatabase.sqliteوجداولها والشركة التجريبية: 32 صلاحية، ودوري Super Admin وManager، والحسابين، و15 إعدادًا للشركة، و18 مرفقًا، و6 وجهات، و14 إقامة (12 منشورة ومسودتان) مع 42 صورة، و6 أسئلة للصفحة الرئيسية، و60 حجزًا، و8 نطاقات محظورة، و12 استفسارًا، و24 تقييمًا. تُحفظ التواريخ كإزاحات عن اليوم الذي تملأ فيه البيانات، فتجد وصولًا اليوم دائمًا.الطرفيةفيback-endyarn seedشغّل الخادم
الطرفيةفيback-endyarn devالنتيجة المتوقعة: يجيب localhost:8000/
تواجه مشكلة؟api/ healthمحلي بـ "status":"ok"و"database":"up".
شغّل واجهة API
ثبّت واضبط الإعداد
يعمل
.env.exampleكما هو في التطوير المحلي: SQLite على المنفذ8000، وبلا مفاتيح دفع، فيقبل المحاكي المرفق كل حجز بالبطاقة أو PayPal.الطرفيةcorepack enable cd hollina-backend yarn install cp .env.example .envتواجه مشكلة؟أنشئ قاعدة البيانات
يتحقق
yarn seedمن وجود كل صورة أولية، ثم ينشئdatabase.sqliteوجداولها والشركة التجريبية: 32 صلاحية، ودوري Super Admin وManager، والحسابين، و15 إعدادًا للشركة، و18 مرفقًا، و6 وجهات، و14 إقامة (12 منشورة ومسودتان) مع 42 صورة، و6 أسئلة للصفحة الرئيسية، و60 حجزًا، و8 نطاقات محظورة، و12 استفسارًا، و24 تقييمًا. تُحفظ التواريخ كإزاحات عن اليوم الذي تملأ فيه البيانات، فتجد وصولًا اليوم دائمًا.الطرفيةفيhollina-backendyarn seedشغّل الخادم
الطرفيةفيhollina-backendyarn devالنتيجة المتوقعة: يجيب localhost:8000/
تواجه مشكلة؟api/ healthمحلي بـ "status":"ok"و"database":"up".
تشغيل ملء البيانات مرة أخرى
يعيد الصفوف التجريبية
يطابق yarn seed كل صف يشحنه بمفتاح ثابت (S001 للإقامة، وB0001 للحجز، واسم الإعداد). تشغيله مرة أخرى لا يضيف شيئًا مرتين ولا يعيد ضبط أي كلمة مرور، لكنه يعيد كل إقامة ووجهة وحجز وفترة محظورة واستفسار وتقييم وسؤال للصفحة الرئيسية وإعداد للشركة إلى قيمه المرفقة، مع نقل التواريخ إلى اليوم الجديد، فيُستبدل اسم شركتك وبيانات التواصل وأي تعديل على إقامة تجريبية. أما الإقامات والحجوزات وكل ما أنشأته بنفسك فتبقى. شغّله مرة واحدة على قاعدة بيانات جديدة، لا على قاعدة صارت ملكك.
شغّل موقع الإقامات
في طرفية ثانية:
ثبّت واضبط الإعداد
يوجّه ملف
.envالمنسوخ الموقعَ إلى واجهة API على المنفذ8000.الطرفيةcd storefront yarn install cp .env.example .envشغّله
يبدأ
yarn devبنسخ عامل مكتبة الخرائط إلىpublic/maplibre/، ثم يشغّل الموقع.الطرفيةفيstorefrontyarn devالنتيجة المتوقعة: يفتح localhost:3030محلي الموقع بالإنجليزية مع الإقامات التجريبية؛ والعربية على
تواجه مشكلة؟/ar.
شغّل موقع الإقامات
واجهة API ليست جزءًا من هذه الحزمة. شغّلها أولًا؛ يتوقعها ملف .env المنسوخ على http://localhost:8000/api.
ثبّت واضبط الإعداد
إذا كانت واجهة API تعمل في مكان آخر، اضبط
NEXT_PUBLIC_API_BASE_URLفي.envعلى عنوانها، مع/api.الطرفيةcorepack enable cd hollina-website yarn install cp .env.example .envتواجه مشكلة؟شغّله
يبدأ
yarn devبنسخ عامل مكتبة الخرائط إلىpublic/maplibre/، ثم يشغّل الموقع.الطرفيةفيhollina-websiteyarn devالنتيجة المتوقعة: يفتح localhost:3030محلي الموقع مع الإقامات القادمة من واجهة API لديك؛ والعربية على
تواجه مشكلة؟/ar.
شغّل لوحة تحكم الحجوزات
في طرفية ثالثة:
ثبّت واضبط الإعداد
يوجّه ملف
.envالمنسوخ لوحة التحكم إلى واجهة API وإشعاراتها المباشرة على المنفذ8000.الطرفيةcd admin-dashboard yarn install cp .env.example .envشغّلها وسجّل الدخول
الطرفيةفيadmin-dashboardyarn devالنتيجة المتوقعة: يفتح localhost:3031محلي نموذج تسجيل الدخول. سجّل الدخول بـ
تواجه مشكلة؟admin@hollina.exampleوكلمة المرورAdmin@123.
شغّل لوحة تحكم الحجوزات
واجهة API ليست جزءًا من هذه الحزمة. شغّلها أولًا؛ يتوقعها ملف .env المنسوخ على http://localhost:8000/api.
ثبّت واضبط الإعداد
إذا كانت واجهة API تعمل في مكان آخر، اضبط
NEXT_PUBLIC_API_BASE_URL(مع/api) وNEXT_PUBLIC_WEBSOCKET_BASE_URL(من دونه) في.envعلى عنوانها.الطرفيةcorepack enable cd hollina-booking-dashboard yarn install cp .env.example .envتواجه مشكلة؟شغّلها وسجّل الدخول
الطرفيةفيhollina-booking-dashboardyarn devالنتيجة المتوقعة: يفتح localhost:3031محلي نموذج تسجيل الدخول. سجّل الدخول بـ
تواجه مشكلة؟admin@hollina.exampleوكلمة المرورAdmin@123، وتقبلهما واجهة API المعبأة بالبيانات.
منافذ أخرى
بدون Docker تكون المنافذ ثابتة في الملفات. يمرر سكربتا dev وstart للموقع في package.json الخيار -p 3030، ويمرر سكربتا لوحة التحكم الخيار -p 3031: غيّر الرقم هناك لنقل أحدهما، ثم أضف العنوان الجديد إلى CORS_ORIGIN في ملف .env لواجهة API؛ ولوحة التحكم اضبط FRONTEND_URL هناك عليه أيضًا، وللموقع SITE_URL. ولنقل واجهة API اضبط PORT وPUBLIC_MEDIA_URL في .env الخاص بها على الرقم نفسه، وNEXT_PUBLIC_API_BASE_URL في الواجهتين الأماميتين (وNEXT_PUBLIC_WEBSOCKET_BASE_URL في لوحة التحكم أيضًا).
بناء الإنتاج
المجلدات نفسها، تُبنى مرة واحدة ثم تُشغَّل. اضبط أولًا .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
SITE_URL=http://localhost:3030
PUBLIC_MEDIA_URL=http://localhost:8000/mediaولّد السر بالأمر 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