انتقل إلى المقال

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

شغّل Kinora محليًا

ثبّت كل تطبيق وشغّله باستخدام Node.js و Yarn، بطرفية مستقلة لكل تطبيق.

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

قبل أن تبدأ: ثبّت Node.js 22.9 أو أحدث (22 لحزمة Backend وحدها) وشغّل corepack enable مرة واحدة. لا حاجة إلى خادم قاعدة بيانات.

اطّلع على المتطلبات

افتح كل طرفية في المكان الذي تتوقعه الأوامر أدناه: داخل kinora-fitness-full-stack للحزمة الكاملة، أو بجوار مجلد التطبيق لحزمة التطبيق الواحد.

التطبيقالمجلدالعنوان
APIback-endlocalhost:8000محلي
لوحة التحكمdashboardlocalhost:3030محلي

شغّل واجهة API أولًا: مع الخطوات أدناه تقرأ لوحة التحكم كل بياناتها منها.

شغّل واجهة API

  1. ثبّت واضبط الإعداد

    يعمل .env.example كما هو للتطوير المحلي.

    الطرفية
    corepack enable
    cd back-end
    yarn install
    cp .env.example .env
    تواجه مشكلة؟
  2. أنشئ قاعدة البيانات

    ينشئ yarn seed الملف database.sqlite وجداوله والبيانات التجريبية. تشغيله مرة أخرى يضيف ما ينقص فقط.

    الطرفيةفي back-end
    yarn seed
  3. شغّل الخادم

    الطرفيةفي back-end
    yarn dev

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

    تواجه مشكلة؟

شغّل واجهة API

  1. ثبّت واضبط الإعداد

    يعمل .env.example كما هو للتطوير المحلي.

    الطرفية
    corepack enable
    cd kinora-fitness-backend
    yarn install
    cp .env.example .env
    تواجه مشكلة؟
  2. أنشئ قاعدة البيانات

    ينشئ yarn seed الملف database.sqlite وجداوله والبيانات التجريبية. تشغيله مرة أخرى يضيف ما ينقص فقط.

    الطرفيةفي kinora-fitness-backend
    yarn seed
  3. شغّل الخادم

    الطرفيةفي kinora-fitness-backend
    yarn dev

    النتيجة المتوقعة: يجيب localhost:8000/api/healthمحلي بـ {"status":"ok"}. وقد طبع أمر الزرع الحسابات التي تسجّل الدخول بها.

    تواجه مشكلة؟

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

في طرفية ثانية:

  1. ثبّت واضبط الإعداد

    الطرفية
    cd dashboard
    yarn install
    cp .env.example .env
  2. وجّهها إلى واجهة API

    افتح dashboard/.env واملأ سطري واجهة API، وهما فارغان في المثال. إذا تُركا فارغين، تعمل لوحة التحكم على بياناتها التجريبية المدمجة بدلًا من واجهة API.

    dashboard/.env
    NEXT_PUBLIC_API_BASE_URL=http://localhost:8000/api
    NEXT_PUBLIC_WEBSOCKET_BASE_URL=http://localhost:8000
  3. شغّلها وسجّل الدخول

    الطرفيةفي dashboard
    yarn dev

    النتيجة المتوقعة: يفتح localhost:3030محلي نموذج تسجيل الدخول معبّأً ببيانات المدرب الرئيسي: headcoach@example.com مع كلمة المرور Coach@123. يملأ /en/auth/login?as=client بيانات العضو: member@example.com مع Member@123. الواجهة العربية على /ar.

    تواجه مشكلة؟

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

واجهة API ليست جزءًا من هذه الحزمة. لا تنشئ ملف .env بعد: من دونه تعمل لوحة التحكم على بياناتها التجريبية المدمجة.

  1. التثبيت

    الطرفية
    corepack enable
    cd kinora-fitness-dashboard
    yarn install
    تواجه مشكلة؟
  2. شغّلها وسجّل الدخول

    الطرفيةفي kinora-fitness-dashboard
    yarn dev

    النتيجة المتوقعة: يفتح localhost:3030محلي نموذج تسجيل الدخول مع تنبيه «بيانات تجريبية». لا يُتحقق من كلمة المرور (مع أن النموذج يطلب 6 أحرف على الأقل)، وتُحفظ تغييراتك في المتصفح.

عندما تكون واجهة API الخاصة بالقالب قيد التشغيل، أنشئ .env من .env.example واضبط NEXT_PUBLIC_API_BASE_URL على عنوانها. هذا ما يوقف البيانات التجريبية.

الإعدادات

بناء الإنتاج

المجلدات نفسها، تُبنى مرة واحدة ثم تُشغَّل. اضبط أولًا back-end/.env للإنتاج. مع NODE_ENV=production لا تعيد واجهة API كتابة المخطط من تلقاء نفسها أبدًا: بل تشغّل عمليات الترحيل عند بدء تشغيلها. وترفض البدء ما دام JWT_SECRET فارغًا أو لا يزال بقيمة المثال، أو ما دام CORS_ORIGIN فارغًا.

back-end/.env
NODE_ENV=production
JWT_SECRET=<a long random string>
CORS_ORIGIN=http://localhost:3030
FRONTEND_URL=http://localhost:3030

ولّد السر بالأمر node -e "console.log(require('crypto').randomBytes(48).toString('hex'))". ثم ابنِ واجهة API، وأنشئ جداولها مرة واحدة، وشغّلها. ينشئ yarn db:sync:prod جداول فارغة؛ ويضيف yarn seed:prod بدلًا منه، أو بعده، البيانات التجريبية وحساباتها.

الطرفيةفي back-end
yarn build
yarn db:sync:prod
yarn start:prod

ثم لوحة التحكم، على 3030:

الطرفيةفي dashboard
yarn build
yarn start

تُضمّن لوحة التحكم ملف .env الخاص بها وقت البناء، لذا شغّل yarn build مرة أخرى بعد تغييره. قبل النشر في أي مكان عام، اقرأ قائمة التحقق للإنتاج.

بناء الإنتاج

تُبنى مرة واحدة ثم تُشغَّل. اضبط أولًا .env للإنتاج. مع NODE_ENV=production لا تعيد واجهة API كتابة المخطط من تلقاء نفسها أبدًا: بل تشغّل عمليات الترحيل عند بدء تشغيلها. وترفض البدء ما دام JWT_SECRET فارغًا أو لا يزال بقيمة المثال، أو ما دام CORS_ORIGIN فارغًا.

.env
NODE_ENV=production
JWT_SECRET=<a long random string>
CORS_ORIGIN=https://app.your-domain.com

ولّد السر بالأمر node -e "console.log(require('crypto').randomBytes(48).toString('hex'))". يسرد CORS_ORIGIN عناوين لوحات التحكم التي تستدعي واجهة API، مفصولة بفواصل. ثم ابنِ، وأنشئ الجداول مرة واحدة، وشغّل. ينشئ yarn db:sync:prod جداول فارغة؛ ويضيف yarn seed:prod بدلًا منه، أو بعده، البيانات التجريبية وحساباتها.

الطرفيةفي kinora-fitness-backend
yarn build
yarn db:sync:prod
yarn start:prod

بناء الإنتاج

تُبنى مرة واحدة، ثم تُشغَّل على 3030. من دون .env تعمل نسخة الإنتاج على البيانات التجريبية تمامًا كما يفعل yarn dev.

الطرفيةفي kinora-fitness-dashboard
yarn build
yarn start

تُضمّن لوحة التحكم ملف .env الخاص بها وقت البناء، لذا شغّل yarn build مرة أخرى بعد تغييره.

ابدأ من جديد ببيانات تجريبية جديدة

أوقف واجهة API، ثم احذف ملف قاعدة البيانات وازرعها مرة أخرى، في مجلد واجهة API. هذا يحذف كل ما أنشأته.

الطرفية
rm -f database.sqlite* && yarn seed

في PowerShell:

الطرفية
Remove-Item database.sqlite*; yarn seed

التالي

هل كان هذا مفيدًا؟

تمت مراجعته على إصدار 2026-10-08

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

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

حل المشكلات

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

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