شغّل Kinora محليًا
شغّل حزمتك على جهازك باستخدام Docker.
لحزمة الحزمة الكاملة
قبل أن تبدأ: ثبّت Docker Desktop وافتحه، أو Docker Engine مع Compose.
اطّلع على المتطلباتنزّل قالبك
افتح صفحة «قوالبي» ونزّل ملف ZIP الخاص بحزمتك.
النتيجة المتوقعة: يوجد ملف باسم مثل
kinora-fitness-full-stack-main-….zipفي مجلد التنزيلات.فك الضغط وافتح المجلد
فك ضغط ملف ZIP وافتح الطرفية في المجلد
kinora-fitness-full-stack. على Windows، فك الضغط في File Explorer، ثم افتح الطرفية في المجلد.الطرفيةunzip kinora-fitness-full-stack-*.zip cd kinora-fitness-full-stackالنتيجة المتوقعة: يعرض المجلد
تواجه مشكلة؟back-endوdashboardوdocker-compose.yml.شغّل التطبيقات
ابنِ واجهة API ولوحة التحكم وشغّلهما. لا يلزم ضبط أي شيء أولًا. يبني التشغيل الأول صورتين ويملأ قاعدة البيانات بالبيانات التجريبية، ويستغرق ذلك بضع دقائق؛ أما التشغيلات اللاحقة فتستغرق ثوانيَ.
الطرفيةفيkinora-fitness-full-stackdocker compose up --buildالمنفذ مستخدم بالفعل؟
إذا توقف التشغيل بالرسالة
المنفذ مستخدم بالفعلports are not available ... address already in use، فهناك برنامج آخر يستخدم 3030 أو 8000. إما أن توقفه، أو تنشئ ملفًا باسم.envفي المجلدkinora-fitness-full-stackيحتوي على المنفذ الذي تحتاجه، مثلDASHBOARD_PORT=3040(وAPI_PORTلواجهة API). شغّلdocker compose up --buildمرة أخرى وافتح لوحة التحكم على منفذها الجديد.النتيجة المتوقعة: تبقى الخدمتان قيد التشغيل ويتوقف السجل عن التمرير. اترك هذه الطرفية مفتوحة.
تواجه مشكلة؟سجّل الدخول بصفتك المدرب
افتح localhost:3030محلي. نموذج تسجيل الدخول معبّأ ببيانات المدرب الرئيسي:
headcoach@example.comمع كلمة المرورCoach@123. الواجهة العربية على/ar.النتيجة المتوقعة: تُفتح نظرة المدرب العامة: قائمة العملاء، والعملاء الذين توقفوا، والمتابعات التي تنتظر ردًا، والعمل المسند لليوم.
تواجه مشكلة؟سجّل الدخول بصفتك العضو
سجّل الخروج، ثم افتح localhost:3030/en/auth/login?as=clientمحلي. النموذج معبّأ ببيانات العضو:
member@example.comمع كلمة المرورMember@123.النتيجة المتوقعة: تُفتح النظرة العامة للعضو، مع الحلقات والسعرات والنوم ومعدل ضربات القلب وتمارين الأسبوع.
تواجه مشكلة؟
جولة سريعة
هكذا يبدو العرض التجريبي عندما يعمل كل شيء.

| الحساب | البريد الإلكتروني | كلمة المرور | ما يراه |
|---|---|---|---|
| المدرب الرئيسي | headcoach@example.com | Coach@123 | كل شاشات الطاقم، مع أكبر قائمة عملاء |
| عضو | member@example.com | Member@123 | صفحات التدريب، تحت إشراف المدرب الرئيسي |
| مدرب شخصي | trainer@example.com | Trainer@123 | قائمة عملائه الخاصة وكتالوجات المحتوى |
توجد أحد عشر حسابًا آخر للطاقم على @staff.com بكلمة المرور staff123، بدور مدرب أو مدرب شخصي أو مدير النادي أو محرر أو مشاهد. ويوجد أعضاء آخرون على @example.com بكلمة المرور password123. هذه حسابات تجريبية محلية فقط: غيّر كلمات المرور قبل نشر أي شيء للعامة.
يملأ نموذج تسجيل الدخول نفسه بنفسه: /en/auth/login?as=coach (وهو الافتراضي أيضًا) للمدرب الرئيسي، و/en/auth/login?as=client للعضو.
أوقف التطبيقات وأعد تشغيلها
اضغط Ctrl+C في الطرفية لإيقاف التطبيقات، أو شغّل هذا الأمر من المجلد kinora-fitness-full-stack. تُحفظ بياناتك في وحدة التخزين kinora-data.
kinora-fitness-full-stackdocker compose downأعد التشغيل بالأمر نفسه في الخطوة 3. من دون --build يعيد استخدام الصور التي بنيتها مسبقًا.
kinora-fitness-full-stackdocker compose upحافظ على بياناتك
يحذف docker compose down -v أيضًا وحدة تخزين قاعدة البيانات. يزرع التشغيل التالي نسخة جديدة من البيانات التجريبية، ويضيع كل ما أنشأته.
شغّل لوحة التحكم
هذه الحزمة هي لوحة التحكم وحدها. من دون واجهة API تعمل على بيانات تجريبية مدمجة داخل المتصفح: يمكنك تسجيل الدخول، وتسجيل تمرين، وإنشاء عضو، وتعديل دور، وتُحفظ تغييراتك في المتصفح. واجهة API حزمة منفصلة وليست ضمن هذا التنزيل.
فك الضغط وافتح المجلد
الطرفيةunzip kinora-fitness-dashboard-*.zip cd kinora-fitness-dashboardالنتيجة المتوقعة: يحتوي المجلد على
تواجه مشكلة؟Dockerfileوpackage.json.ابنِ الصورة
قيم
NEXT_PUBLIC_*تُضمَّن في JavaScript الذي يحمّله المتصفح، لذا فهي وسائط بناء. اتركها لتعمل على البيانات التجريبية؛ ولاستخدام واجهة API الخاصة بالقالب، مرّر عنوانها وعنوان WebSocket الخاص بها (الخادم نفسه من دون/api).الطرفيةفيkinora-fitness-dashboarddocker build -t kinora-dashboard .مع واجهة API خاصة بك:
تواجه مشكلة؟الطرفيةفيkinora-fitness-dashboarddocker build -t kinora-dashboard --build-arg NEXT_PUBLIC_API_BASE_URL=http://localhost:8000/api --build-arg NEXT_PUBLIC_WEBSOCKET_BASE_URL=http://localhost:8000 .شغّلها وسجّل الدخول
إذا كان المنفذ
3030مشغولًا، غيّر الرقم على يسار-p، مثل-p 3040:3030، وافتح ذلك المنفذ بدلًا منه.الطرفيةفيkinora-fitness-dashboarddocker run -p 3030:3030 kinora-dashboardالنتيجة المتوقعة: يفتح localhost:3030محلي نموذج تسجيل الدخول معبّأً ببيانات المدرب الرئيسي. يشير تنبيه «بيانات تجريبية» في الأسفل إلى عدم ربط أي واجهة API. لا يُتحقق من كلمة المرور على البيانات التجريبية:
تواجه مشكلة؟member@example.comيسجّل الدخول بصفته العضو، وأي بريد إلكتروني لا تعرفه البيانات التجريبية يسجّل الدخول بصفته المدرب الرئيسي.
شغّل واجهة API
هذه الحزمة هي واجهة API المبنية على NestJS وحدها، على ملف SQLite محفوظ في وحدة تخزين Docker. لوحة التحكم حزمة منفصلة وليست ضمن هذا التنزيل.
فك الضغط وأنشئ ملف البيئة
يعمل
.env.exampleكما هو للتشغيل المحلي. نسخة.envهي المكان الذي تضع فيه مفاتيحك لاحقًا.تواجه مشكلة؟الطرفيةunzip kinora-fitness-backend-*.zip cd kinora-fitness-backend cp .env.example .envشغّلها مع البيانات التجريبية
تحصل وحدة التخزين الجديدة على جداول فارغة ما لم تطلب البيانات التجريبية. تحتفظ وحدة التخزين بقاعدة البيانات بين التشغيلات. إذا كان المنفذ
8000مشغولًا، غيّر الرقم على يسار-p، مثل-p 8010:8000، وستجيب واجهة API علىhttp://localhost:8010/apiبدلًا من ذلك.الطرفيةفيkinora-fitness-backenddocker run -p 8000:8000 -v kinora-data:/data -e SEED_DEMO_DATA=true kinora-apiالنتيجة المتوقعة: يجيب localhost:8000/api/healthمحلي بـ
تواجه مشكلة؟{"status":"ok"}.
لا تقرأ الحاوية ملف .env إلا عندما تضيف --env-file .env إلى docker run؛ وبهذه الطريقة تصل إليها مفاتيح التخزين والذكاء الاصطناعي و MCP. من دون JWT_SECRET خاص بك، أو مع القيمة الواردة في المثال، تولّد الحاوية سرًا وتحفظه في وحدة التخزين.
تسمح الصورة باستدعاءات المتصفح من http://localhost:3030. للوحة تحكم على عنوان آخر، مرّر -e CORS_ORIGIN= و-e FRONTEND_URL= مع ذلك العنوان.