نشر تطبيق PHP: دليل LAMP و LEMP Stack
دليل شامل لنشر تطبيقات PHP على VPS. مقارنة LAMP و LEMP، إعداد Apache/Nginx + PHP-FPM + MySQL، تهيئة المضيف الافتراضي وإدارة إصدارات PHP.
دليل شامل لنشر تطبيقات Node.js على VPS. تثبيت Node.js عبر nvm، مدير العمليات PM2، وكيل Nginx العكسي، شهادة SSL وإدارة متغيرات البيئة.
نشر تطبيقات Node.js في بيئة الإنتاج هو عملية منهجية مع الأدوات والإعدادات الصحيحة. يغطي هذا الدليل كل شيء من تثبيت Node.js عبر nvm إلى مدير العمليات PM2، وإعداد وكيل Nginx العكسي وتثبيت شهادة SSL.
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 على تحديثات أمنية لفترة أطول.
# إنشاء مجلد التطبيق
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
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 هو الأداة الأكثر شيوعاً لإدارة تطبيقات Node.js في الإنتاج. يوفر إعادة التشغيل التلقائية وإدارة السجلات ووضع الكتلة.
# تثبيت PM2 عالمياً
npm install -g pm2
# التحقق من إصدار PM2
pm2 --version
# تشغيل بسيط
pm2 start app.js --name myapp
# عبر npm start
pm2 start npm --name myapp -- start
# وضع الكتلة (نسخ بعدد أنوية CPU)
pm2 start app.js --name myapp -i max
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 startup
# تنفيذ الأمر الناتج
# حفظ قائمة PM2 الحالية
pm2 save
# تثبيت 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
# تثبيت 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 يمكنك إجراء تحديثات بدون توقف.
تحقق من سجلات PM2 بالأمر 'pm2 logs myapp'. الأسباب الشائعة: متغيرات بيئة مفقودة، تعارض في المنافذ، أو خطأ في الصياغة. راقب استخدام CPU/RAM في الوقت الفعلي مع 'pm2 monit'. في حالة تسرب الذاكرة، أضف معامل 'max_memory_restart' إلى ecosystem.config.js.
هذا الخطأ يعني عادةً أن تطبيق Node.js لا يعمل. تحقق من أن التطبيق في حالة 'running' بالأمر 'pm2 status'. راجع رسائل الخطأ عبر 'pm2 logs'. تحقق من أن Nginx يوكّل إلى المنفذ الصحيح بـ 'sudo nginx -t'.
يجب أن يستخدم كل تطبيق منفذاً مختلفاً (3000، 3001، 3002 إلخ). أعطِ كل تطبيق اسماً فريداً في PM2. أنشئ كتلة خادم منفصلة في Nginx لكل نطاق ووكّل إلى المنفذ المقابل. ستكون جميع التطبيقات متاحة عبر المنفذين 80/443 من خلال Nginx.
كن حذراً عند تبديل الإصدارات مع nvm. ثبّت الإصدار الجديد، اختبر تطبيقك، ثم حدّث الافتراضي بـ 'nvm alias default'. قد تحتاج أيضاً إلى إعادة توليد سكريبت بدء تشغيل PM2 بمسار Node.js الجديد.
دليل شامل لنشر تطبيقات PHP على VPS. مقارنة LAMP و LEMP، إعداد Apache/Nginx + PHP-FPM + MySQL، تهيئة المضيف الافتراضي وإدارة إصدارات PHP.
دليل تثبيت وتحسين WordPress على VPS. إعداد LEMP Stack، إعدادات wp-config.php، صلاحيات الملفات، SSL، تحسين أداء OPcache وتعزيز الأمان.
دليل نشر تطبيقات Python/Django على VPS. إعداد virtualenv، إعدادات Django للإنتاج، خادم Gunicorn WSGI، وكيل Nginx العكسي، خدمة systemd وإدارة الملفات الثابتة.