انشره على الإنترنت
انشر لوحة التحكم وواجهة API على خادم باستخدام Docker، أو لوحة التحكم على Vercel أو أي استضافة Node.js.
لحزمة واجهة + خلفية
قبل النشر
قبل الإطلاق. كل seed (yarn seed وyarn seed:prod والتشغيل الأول في Docker) ينشئ مشرفين نموذجيين تظهر كلمات مرورهم في الأدلة. غيّر كلمات مرورهم أو احذفهم، واضبط JWT_SECRET الخاص بك، قبل أن يصبح بإمكان أي شخص آخر الوصول إلى لوحة التحكم.
- شغّل واجهة API مع
NODE_ENV=productionوJWT_SECRETخاص بك، وضبطCORS_ORIGINوFRONTEND_URLعلى العنوان العام للوحة التحكم. ترفض واجهة API في الإنتاج البدء من دون أول متغيرين. - خلف وكيل عكسي (Nginx أو Caddy أو موزّع أحمال)، اضبط
TRUST_PROXY=1ليحسب حد تسجيل الدخول الزوار بدلًا من الوكيل. - اترك
DEMO_MODEوNEXT_PUBLIC_DEMO_MODEمعطلين، إلا إذا كان النشر نسخة تجريبية عامة.
قبل النشر
عند البناء من دون عنوان واجهة API، تعمل لوحة التحكم على واجهتها التجريبية: الحسابات النموذجية موجودة في كود التطبيق ويجري التحقق منها في المتصفح، فيستطيع أي شخص قراءتها وتسجيل الدخول بها، ويبقى كل تغيير في متصفح الزائر. وجّهها إلى واجهة API الخاصة بك قبل أن يصل إليها مستخدمون حقيقيون أو بيانات حقيقية.
واجهة API التجريبية المدمجةاترك NEXT_PUBLIC_DEMO_MODE معطلًا إلا إذا كان النشر نسخة تجريبية عامة.
التطبيقان على خادم واحد باستخدام Docker
ملف docker-compose.yml الذي يشغّل القالب محليًا يشغّله أيضًا على خادم. أعطِ كل تطبيق نطاقه الخاص خلف خادم ويب يضيف HTTPS، مثل Caddy أو Nginx، يوجّه نطاق لوحة التحكم إلى المنفذ 3030 ونطاق واجهة API إلى المنفذ 8000.
حدّد العنوانين
أنشئ
.envفي المجلدdashboard-2-full-stackبجوارdocker-compose.yml. تضمّن لوحة التحكم عنوان واجهة API في كود JavaScript الخاص بها، وتسمح واجهة API بعنوان لوحة التحكم فيCORS_ORIGINوFRONTEND_URL، وكلاهما من هذين السطرين.dashboard-2-full-stack/.envDASHBOARD_URL=https://admin.your-domain.com API_URL=https://api.your-domain.comأضف مفاتيحك
تقرأ واجهة API أيضًا الملف
back-end/.envإن وُجد، لمفاتيح مزوّدي الذكاء الاصطناعي وR2 ومفتاح MCP. أنشئه من.env.exampleوأضفTRUST_PROXY=1خلف خادم الويب. يضبط ملف compose قاعدة البيانات والمنفذ وNODE_ENV=productionبنفسه، وتولّد واجهة API قيمةJWT_SECRETداخل وحدة تخزين البيانات إذا لم تحدد واحدة.الطرفيةفيdashboard-2-full-stackcp back-end/.env.example back-end/.envشغّلها في الخلفية
الطرفيةفيdashboard-2-full-stackdocker compose up --build -dالنتيجة المتوقعة: يجيب
https://api.your-domain.com/api/healthبـ"status":"ok"، ويفتح نطاق لوحة التحكم صفحة تسجيل الدخول.
تُعاد الخدمات إلى العمل مع الخادم. تقع قاعدة البيانات في وحدة التخزين dashboard-2-data. بعد تغيير DASHBOARD_URL أو API_URL أو أحد المنافذ، نفّذ docker compose up --build -d مرة أخرى: فيجب بناء لوحة التحكم بالعنوان الجديد.
واجهة API وحدها
لـ back-end ملف Dockerfile خاص به، فيستطيع أي مستضيف يبني من Dockerfile تشغيل واجهة API وحدها. تحفظ الحاوية قاعدة بيانات SQLite في /data: اربط وحدة تخزين هناك، وإلا ضاعت البيانات مع الحاوية. وعلى وحدة تخزين جديدة تنشئ قاعدة البيانات بالبيانات النموذجية مرة واحدة.
back-enddocker build -t dashboard-api .
docker run -d --restart unless-stopped -p 8000:8000 -v dashboard-data:/data -e CORS_ORIGIN=https://admin.your-domain.com -e FRONTEND_URL=https://admin.your-domain.com dashboard-apiتعمل الصورة أصلًا مع NODE_ENV=production وملف SQLite في /data. مرّر فقط القيم التي تحتاج إليها، كلًّا منها بـ -e، مثل -e GOOGLE_API_KEY=.... وما زالت الطريقة المعتادة لتشغيل واجهة API هي docker compose up --build في جذر الحزمة، فيشغّلها مع لوحة التحكم.
على مستضيف Node.js من دون Docker، أمر البناء هو yarn build وأمر التشغيل yarn start:prod، ويُنفَّذ yarn seed:prod مرة واحدة لإنشاء الجداول. يحتاج ملف SQLite إلى قرص دائم هناك؛ وعلى مستضيف لا يوفره استخدم MySQL.
لوحة التحكم على Vercel
ضع لوحة التحكم في مستودع Git خاص
ادفع مجلد لوحة التحكم (
front-endفي الحزمة الكاملة، وdashboard-2-front-endفي حزمة لوحة الإدارة) إلى مستودع خاص على GitHub أو GitLab أو Bitbucket. لا يسمح رخصتك بمشاركة الكود المصدري علنًا.استورده في Vercel
أضف مشروعًا جديدًا من ذلك المستودع. يكتشف Vercel أن المشروع Next.js؛ فأبقِ إعدادات البناء الافتراضية. في مستودع الحزمة الكاملة، اضبط المجلد الجذر للمشروع على
front-end.أضف متغيرات البيئة
أضف
ENABLE_EXPERIMENTAL_COREPACKبالقيمة1، ليثبّت Vercel بإصدار Yarn الذي يحددهpackage.json. ثمNEXT_PUBLIC_API_BASE_URL(واجهة API مع/api) وNEXT_PUBLIC_WEBSOCKET_BASE_URL(العنوان نفسه من دون/api) وNEXT_PUBLIC_BASE_URL(عنوان لوحة التحكم نفسها). أماWEATHER_API_KEYفاختياري.انشر
ابدأ النشر، ثم أضف نطاقك في إعدادات النطاقات (Domains) للمشروع، وأضف ذلك العنوان إلى
CORS_ORIGINوFRONTEND_URLفي واجهة API.النتيجة المتوقعة: يفتح نطاقك صفحة تسجيل الدخول.
بعد تغيير أي متغير NEXT_PUBLIC_*، انشر مرة أخرى: فالتطبيق الذي يعمل يحتفظ بالقيم التي بُني بها.
لوحة التحكم على خادم Node.js
بعد ضبط إعداداتك في ملف .env الخاص بلوحة التحكم، ثبّت ثم ابنِ ثم شغّل:
corepack enable
yarn install
yarn build
yarn startتجيب على المنفذ 3030، أو على PORT عندما تحدده الاستضافة. ضع خادم ويب أمامها لنطاقك وHTTPS، وأبقِ yarn start قيد التشغيل بمدير عمليات أو بخدمة نظام.
لوحة التحكم كصورة Docker
يبني Dockerfile الخاص بلوحة التحكم خادمًا مستقلًا على المنفذ 3030، ويعمل بمستخدم من دون صلاحيات إدارية. عنوان واجهة API وسيط بناء:
docker build -t dashboard-2 --build-arg NEXT_PUBLIC_API_BASE_URL=https://api.your-domain.com/api --build-arg NEXT_PUBLIC_WEBSOCKET_BASE_URL=https://api.your-domain.com --build-arg NEXT_PUBLIC_BASE_URL=https://admin.your-domain.com .
docker run -d --restart unless-stopped -p 3030:3030 dashboard-2تُقرأ WEATHER_API_KEY عند تشغيل الحاوية: أضف -e WEATHER_API_KEY=... إلى docker run.
بعد أن يصبح على الإنترنت
- سجّل الدخول على عنوان لوحة التحكم، مع
/enو/ar، وتحقق من اللغتين. - تطلب كل صفحة من محركات البحث ألا تفهرسها، عبر ترويسة
X-Robots-Tag: noindex, nofollowالمضبوطة فيnext.config.js، لأن لوحة تحكم يُسجَّل الدخول إليها لا مكان لها في نتائج البحث.