نشر تطبيق Node.js: دليل PM2 و Nginx
دليل شامل لنشر تطبيقات Node.js على VPS. تثبيت Node.js عبر nvm، مدير العمليات PM2، وكيل Nginx العكسي، شهادة SSL وإدارة متغيرات البيئة.
جدول المحتويات
نشر تطبيق Node.js: دليل PM2 و Nginx
نشر تطبيقات Node.js في بيئة الإنتاج هو عملية منهجية مع الأدوات والإعدادات الصحيحة. يغطي هذا الدليل كل شيء من تثبيت Node.js عبر nvm إلى مدير العمليات PM2، وإعداد وكيل Nginx العكسي وتثبيت شهادة SSL.
تثبيت Node.js (عبر nvm)
nvm (Node Version Manager) يتيح إدارة إصدارات متعددة من Node.js ويُوصى به لبيئات الإنتاج.
# تنزيل وتشغيل سكريبت تثبيت 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
# إنشاء مجلد التطبيق
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)
# إنشاء ملف .env
nano /var/www/myapp/.env
NODE_ENV=production
PORT=3000
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
JWT_SECRET=مفتاحك-السري-هنا
REDIS_URL=redis://localhost:6379
# تأمين ملف .env
chmod 600 /var/www/myapp/.env
لا تضف ملف .env إلى مستودع Git أبداً. أضف .env إلى ملف .gitignore.
مدير العمليات PM2
PM2 هو الأداة الأكثر شيوعاً لإدارة تطبيقات Node.js في الإنتاج. يوفر إعادة التشغيل التلقائية وإدارة السجلات ووضع الكتلة.
تثبيت PM2
# تثبيت PM2 عالمياً
npm install -g pm2
# التحقق من إصدار PM2
pm2 --version
تشغيل التطبيق مع PM2
# تشغيل بسيط
pm2 start app.js --name myapp
# عبر npm start
pm2 start npm --name myapp -- start
# وضع الكتلة (نسخ بعدد أنوية CPU)
pm2 start app.js --name myapp -i max
ملف النظام البيئي لـ PM2
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
}
]
};
# التشغيل مع ملف النظام البيئي
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 عند بدء النظام
# توليد سكريبت بدء التشغيل
pm2 startup
# تنفيذ الأمر الناتج
# حفظ قائمة PM2 الحالية
pm2 save
إعداد وكيل Nginx العكسي
# تثبيت Nginx
sudo apt update
sudo apt install nginx -y
# إنشاء ملف الإعداد
sudo nano /etc/nginx/sites-available/myapp
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;
}
}
# تفعيل الموقع
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
شهادة SSL (Let's Encrypt)
# تثبيت 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
سير عمل النشر
# جلب الكود الجديد
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 يمكنك إجراء تحديثات بدون توقف.
مقالات ذات صلة
نشر تطبيق PHP: دليل LAMP و LEMP Stack
دليل شامل لنشر تطبيقات PHP على VPS. مقارنة LAMP و LEMP، إعداد Apache/Nginx + PHP-FPM + MySQL، تهيئة المضيف الافتراضي وإدارة إصدارات PHP.
تثبيت WordPress وتحسينه: دليل VPS
دليل تثبيت وتحسين WordPress على VPS. إعداد LEMP Stack، إعدادات wp-config.php، صلاحيات الملفات، SSL، تحسين أداء OPcache وتعزيز الأمان.
نشر Python/Django: بيئة إنتاج مع Gunicorn و Nginx
دليل نشر تطبيقات Python/Django على VPS. إعداد virtualenv، إعدادات Django للإنتاج، خادم Gunicorn WSGI، وكيل Nginx العكسي، خدمة systemd وإدارة الملفات الثابتة.