دليل PM2 الكامل لـ JavaScript (Node.js) مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

PM2 لـ JavaScript (Node.js): دليل كامل مع أمثلة

1. ما هو PM2 ولماذا تحتاجه

PM2 (Process Manager 2) هو مدير عمليات قوي لتطبيقات Node.js، مصمم للاستخدام في بيئة الإنتاج (Production). يتيح لك تشغيل وإيقاف وإعادة تحميل ومراقبة تطبيقات Node.js، مما يضمن توفرها العالي وتحملها للأعطال. يقوم PM2 تلقائيًا بإعادة تشغيل العمليات المتوقفة، ويوزع الحمل بين عدة نسخ من التطبيق (التجميع أو Clustering)، ويوفر موازن تحميل مدمج، ويدعم إعادة التحميل السلسة (Graceful Reload) دون توقف.

في بيئة الإنتاج، غالبًا ما تواجه تطبيقات Node.js أخطاء غير متوقعة أو تسربًا في الذاكرة أو أحمالًا زائدة. يحل PM2 هذه المشكلات من خلال العمل كـ"شيفرة حارسة": فهو يراقب حالة كل عملية، ويسجل مخرجات stdout/stderr، ويوفر مقاييس أداء (المعالج، الذاكرة)، ويتيح لك إدارة التطبيق عبر واجهة الأوامر (CLI) أو API. بدون PM2، سيضطر المطور إلى كتابة نصوص برمجية يدويًا لإعادة التشغيل والمراقبة والتوسع — PM2 يؤتمت كل هذه المهام.

تشمل الإمكانيات الرئيسية لـ PM2: التجميع (تشغيل عدة عمال على جميع أنوية المعالج)، إعادة التحميل بدون توقف (Zero-downtime)، إدارة البيئة (تطوير/إنتاج)، مراقبة مدمجة (pm2 monit)، دعم ملفات الإعدادات (ecosystem.config.js)، والتكامل مع أنظمة التشغيل (systemd, upstart) للتشغيل التلقائي عند بدء تشغيل الخادم.

2. التثبيت

يتم تثبيت PM2 عالميًا عبر npm (Node Package Manager). الأمر الدقيق:

npm install -g pm2

لتثبيت إصدار معين:

npm install -g pm2@5.3.0

بعد التثبيت، تحقق من الإصدار:

pm2 --version

3. البداية السريعة — مثال عملي بسيط

أنشئ تطبيق Node.js بسيطًا باسم app.js:

// app.js
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('مرحبًا من PM2!\n');
});

const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
  console.log(`الخادم يعمل على المنفذ ${PORT}`);
});

شغّل التطبيق عبر PM2:

pm2 start app.js --name my-app

تحقق من الحالة:

pm2 status

أوقف التطبيق:

pm2 stop my-app

4. أهم الأوامر والوظائف

4.1. pm2.start() — تشغيل التطبيق

التوقيع: pm2.start(script, options, callback)

الوظيفة: تشغيل السكريبت المحدد كعملية PM2 مع الخيارات المعطاة (الاسم، عدد النسخ، متغيرات البيئة).

مثال عملي:

const pm2 = require('pm2');

pm2.connect((err) => {
  if (err) {
    console.error(err);
    process.exit(2);
  }

  pm2.start({
    script: 'app.js',
    name: 'my-app',
    instances: 2, // تشغيل نسختين
    exec_mode: 'cluster', // وضع التجميع
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    }
  }, (err, apps) => {
    if (err) {
      console.error(err);
      return pm2.disconnect();
    }
    console.log('تم تشغيل التطبيق:', apps);
    pm2.disconnect();
  });
});

4.2. pm2.stop() — إيقاف العملية

التوقيع: pm2.stop(process, callback)

الوظيفة: إيقاف العملية المحددة (بالاسم، أو المعرف، أو جميع العمليات).

مثال عملي:

const pm2 = require('pm2');

pm2.connect((err) => {
  if (err) {
    console.error(err);
    process.exit(2);
  }

  // إيقاف التطبيق بالاسم
  pm2.stop('my-app', (err, proc) => {
    if (err) {
      console.error(err);
      return pm2.disconnect();
    }
    console.log('تم إيقاف التطبيق:', proc);
    pm2.disconnect();
  });
});

توصيات