انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

نشر تطبيق Node.js: دليل PM2 و Nginx

دليل شامل لنشر تطبيقات Node.js على VPS. تثبيت Node.js عبر nvm، مدير العمليات PM2، وكيل Nginx العكسي، شهادة SSL وإدارة متغيرات البيئة.

وقت القراءة: 15 دقيقة استضافة الويب / التطبيقات
nodejspm2nginxdeployvpsjavascriptreverse proxyssl

جدول المحتويات

نشر تطبيق Node.js: دليل PM2 و Nginx

نشر تطبيقات Node.js في بيئة الإنتاج هو عملية منهجية مع الأدوات والإعدادات الصحيحة. يغطي هذا الدليل كل شيء من تثبيت Node.js عبر nvm إلى مدير العمليات PM2، وإعداد وكيل Nginx العكسي وتثبيت شهادة SSL.

تثبيت Node.js (عبر nvm)

nvm (Node Version Manager) يتيح إدارة إصدارات متعددة من Node.js ويُوصى به لبيئات الإنتاج.

hljs bash
# تنزيل وتشغيل سكريبت تثبيت nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# إعادة تحميل الشل
source ~/.bashrc

# التحقق من إصدار nvm
nvm --version

# تثبيت أحدث إصدار LTS
nvm install --lts

# تثبيت إصدار محدد
nvm install 20.11.0

# تعيين الإصدار الافتراضي
nvm use --lts
nvm alias default node

# التحقق من إصدارات Node.js و npm
node --version
npm --version

استخدم دائماً إصدار LTS (الدعم طويل الأمد) في الإنتاج. تحصل إصدارات LTS على تحديثات أمنية لفترة أطول.

نقل التطبيق إلى الخادم

الاستنساخ عبر Git

hljs bash
# إنشاء مجلد التطبيق
sudo mkdir -p /var/www/myapp
sudo chown $USER:$USER /var/www/myapp

# استنساخ المستودع
cd /var/www
git clone https://github.com/user/myapp.git
cd myapp

# تثبيت التبعيات (للإنتاج)
npm install --production

متغيرات البيئة (.env)

hljs bash
# إنشاء ملف .env
nano /var/www/myapp/.env
hljs env
NODE_ENV=production
PORT=3000
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
JWT_SECRET=مفتاحك-السري-هنا
REDIS_URL=redis://localhost:6379
hljs bash
# تأمين ملف .env
chmod 600 /var/www/myapp/.env

لا تضف ملف .env إلى مستودع Git أبداً. أضف .env إلى ملف .gitignore.

مدير العمليات PM2

PM2 هو الأداة الأكثر شيوعاً لإدارة تطبيقات Node.js في الإنتاج. يوفر إعادة التشغيل التلقائية وإدارة السجلات ووضع الكتلة.

تثبيت PM2

hljs bash
# تثبيت PM2 عالمياً
npm install -g pm2

# التحقق من إصدار PM2
pm2 --version

تشغيل التطبيق مع PM2

hljs bash
# تشغيل بسيط
pm2 start app.js --name myapp

# عبر npm start
pm2 start npm --name myapp -- start

# وضع الكتلة (نسخ بعدد أنوية CPU)
pm2 start app.js --name myapp -i max

ملف النظام البيئي لـ PM2

hljs javascript
module.exports = {
  apps: [
    {
      name: 'myapp',
      script: './app.js',
      instances: 'max',
      exec_mode: 'cluster',
      env_production: {
        NODE_ENV: 'production',
        PORT: 3000
      },
      error_file: '/var/log/pm2/myapp-error.log',
      out_file: '/var/log/pm2/myapp-out.log',
      max_memory_restart: '500M',
      autorestart: true
    }
  ]
};
hljs bash
# التشغيل مع ملف النظام البيئي
pm2 start ecosystem.config.js --env production

# أوامر PM2 الأساسية
pm2 list              # قائمة التطبيقات قيد التشغيل
pm2 logs myapp        # عرض السجلات
pm2 restart myapp     # إعادة التشغيل
pm2 reload myapp      # إعادة التحميل بدون توقف
pm2 stop myapp        # إيقاف
pm2 monit             # المراقبة في الوقت الفعلي

التشغيل التلقائي لـ PM2 عند بدء النظام

hljs bash
# توليد سكريبت بدء التشغيل
pm2 startup

# تنفيذ الأمر الناتج
# حفظ قائمة PM2 الحالية
pm2 save

إعداد وكيل Nginx العكسي

hljs bash
# تثبيت Nginx
sudo apt update
sudo apt install nginx -y

# إنشاء ملف الإعداد
sudo nano /etc/nginx/sites-available/myapp
hljs nginx
server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}
hljs bash
# تفعيل الموقع
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

شهادة SSL (Let's Encrypt)

hljs bash
# تثبيت Certbot
sudo apt install certbot python3-certbot-nginx -y

# الحصول على شهادة SSL
sudo certbot --nginx -d example.com -d www.example.com

# اختبار التجديد التلقائي
sudo certbot renew --dry-run

سير عمل النشر

hljs bash
# جلب الكود الجديد
cd /var/www/myapp
git pull origin main

# تحديث التبعيات
npm install --production

# إعادة التشغيل بدون توقف عبر PM2
pm2 reload myapp

# فحص السجلات
pm2 logs myapp --lines 50

على خوادم REXE، يمكنك إغلاق المنفذ 3000 عبر Path Panel. بما أن Nginx يوجه الحركة من المنفذين 80/443، لا يلزم الوصول الخارجي لمنفذ Node.js.

الخلاصة

تطبيق Node.js الخاص بك يعمل الآن في بيئة إنتاج مُدارة بواسطة PM2، خلف وكيل Nginx العكسي ومؤمّن بـ SSL. مع وضع الكتلة في PM2 يمكنك الاستفادة الكاملة من أنوية CPU، ومع pm2 reload يمكنك إجراء تحديثات بدون توقف.