كيفية نشر NestJS على استضافة Namecheap المشتركة
إن نشر NestJS على استضافة Namecheap المشتركة لا يشبه نشر موقع ثابت أو تطبيق PHP. لا يمكنك ببساطة رفع الملفات وتوقع أن تعمل.
يجب عليك تحويل TypeScript إلى JavaScript، وتثبيت تبعيات الإنتاج (production dependencies)، واستخدام cPanel لإدارة العملية عبر Passenger.
لقد واجهت مجلدات فارغة، وملفات بناء مفقودة، واتصالات Redis معطلة قبل أن أجد الطريقة الصحيحة. إليك سير العمل المثبت.
منطق الإعداد يتبع الطلب هذا المسار: • المتصفح أو عميل API • النطاق (Domain) و HTTPS • Apache / Passenger على Namecheap • app.js (الجسر) • dist/main.js (الكود المترجم) • تطبيق NestJS
المتطلبات الأساسية • حساب استضافة Namecheap يدعم Node.js • الوصول إلى cPanel و SSH/Terminal • مشروع NestJS يعمل بشكل صحيح • بيانات اعتماد الإنتاج لقاعدة البيانات أو Redis الخاصة بك
الخطوة 1: تجهيز الكود الخاص بك لا تستخدم منفذًا (port) مكتوبًا بشكل ثابت. في ملف src/main.ts، استخدم process.env.PORT:
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(process.env.PORT || 4000);
}
الخطوة 2: تنظيم التبعيات
انقل حزم وقت التشغيل (runtime packages) مثل @nestjs/common و @nestjs/core إلى قسم dependencies في ملف package.json. إذا بقيت في devDependencies، فسيتعطل تطبيقك في بيئة الإنتاج.
الخطوة 3: البناء وإنشاء الجسر
تقوم Namecheap بتشغيل JavaScript وليس TypeScript.
• قم بتشغيل npm run build محليًا.
• تأكد من وجود ملف dist/main.js.
• أنشئ ملف app.js في جذر المشروع (project root) يحتوي على هذا السطر: require('./dist/main');
يعمل ملف app.js هذا كنقطة دخول لـ Passenger.
الخطوة 4: استراتيجية النشر
الطريقة الأكثر أمانًا هي البناء محليًا ورفع المخرجات (artifacts):
• ارفع ملف app.js
• ارفع مجلد dist/
• ارفع ملفي package.json و package-lock.json
• على Namecheap، قم بتشغيل: npm ci --omit=dev
لا ترفع مجلد node_modules المحلي أبدًا. الوحدات الأصلية (Native modules) التي تم بناؤها على جهاز الكمبيوتر الخاص بك لن تعمل على خادم Linux.
الخطوة 5: تهيئة cPanel
انتقل إلى Setup Node.js App في cPanel:
• اختر إصدار Node.js الصحيح.
• اضبط الوضع (mode) على Production.
• اضبط Application root على المجلد الخاص بك.
• اضبط Application startup file على app.js.
الخطوة 6: متغيرات البيئة
أضف بياناتك السرية (مثل DATABASE_URL أو مفاتيح API) مباشرة في واجهة Node.js في cPanel. يمكنك أيضًا استخدام ملف .env في الجذر، ولكن تأكد من أنه ليس داخل مجلد dist. أعد تشغيل التطبيق بعد إجراء التغييرات.
استكشاف الأخطاء وإصلاحها الشائعة
• EADDRINUSE: من المحتمل أن هناك عملية يدوية تعمل. اترك Passenger يدير التطبيق.
• Cannot find module: ملف البناء مفقود أو المسار في app.js غير صحيح.
• Redis connection failed: تحقق مما إذا كانت Namecheap تسمح بالاتصالات الصادرة (outbound connections) عبر منفذ Redis الخاص بك. قد تحتاج إلى طلب فتح المنفذ من دعم Namecheap.
المصدر: https://dev.to/adesoji/how-to-deploy-and-run-a-nestjs-app-on-namecheap-shared-hosting-5c45
