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

نشر تطبيق PHP: دليل LAMP و LEMP Stack

دليل شامل لنشر تطبيقات PHP على VPS. مقارنة LAMP و LEMP، إعداد Apache/Nginx + PHP-FPM + MySQL، تهيئة المضيف الافتراضي وإدارة إصدارات PHP.

وقت القراءة: 18 دقيقة استضافة الويب / التطبيقات
phplamplempapachenginxmysqlphp-fpmdeploylinux
الكاتب
REXE Teknoloji Network & Security Team
المحرر
REXE Teknoloji Technical Editorial
أول نشر
آخر تحديث

نشر تطبيق PHP: دليل LAMP و LEMP Stack

PHP هو أحد ركائز تطوير الويب، ويشغّل ملايين المواقع حول العالم. يقارن هذا الدليل بين حزمتي LAMP (Linux + Apache + MySQL + PHP) و LEMP (Linux + Nginx + MySQL + PHP)، ويغطي خطوات التثبيت ونشر تطبيق PHP.

مقارنة LAMP و LEMP

الميزةLAMPLEMP
خادم الويبApacheNginx
الأداءمتوسط-عالٍعالٍ
استخدام الذاكرةأكثرأقل
.htaccessمدعومغير مدعوم
تكامل PHPmod_php أو PHP-FPMPHP-FPM (مطلوب)
الملفات الثابتةجيدممتاز

يوفر LEMP Stack أداءً أفضل لتطبيقات PHP مثل WordPress و Laravel. قد يُفضَّل LAMP للتطبيقات القديمة التي تتطلب .htaccess.

تثبيت LEMP Stack

1. تثبيت Nginx

hljs bash
# تحديث قائمة الحزم
sudo apt update && sudo apt upgrade -y

# تثبيت Nginx
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

2. تثبيت MySQL/MariaDB

hljs bash
# تثبيت MariaDB
sudo apt install mariadb-server mariadb-client -y
sudo systemctl start mariadb
sudo systemctl enable mariadb

# إعداد الأمان
sudo mysql_secure_installation
hljs sql
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'كلمة-مرور-قوية';
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

3. تثبيت PHP و PHP-FPM

hljs bash
# إضافة مستودع PHP
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

# تثبيت PHP 8.2 والإضافات الشائعة
sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-xml php8.2-curl \
  php8.2-mbstring php8.2-zip php8.2-gd php8.2-bcmath php8.2-intl -y

sudo systemctl start php8.2-fpm
sudo systemctl enable php8.2-fpm
php --version

4. إعداد PHP

hljs ini
; حد الذاكرة
memory_limit = 256M

; الحجم الأقصى للرفع
upload_max_filesize = 64M
post_max_size = 64M

; الحد الأقصى لوقت التنفيذ
max_execution_time = 300

; عرض الأخطاء (معطّل في الإنتاج)
display_errors = Off
log_errors = On

; OPcache (للأداء)
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000

إعداد المضيف الافتراضي Nginx (لـ PHP)

hljs bash
sudo mkdir -p /var/www/myapp/public
sudo chown -R www-data:www-data /var/www/myapp
sudo nano /etc/nginx/sites-available/myapp
hljs nginx
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/myapp/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    client_max_body_size 64M;
}
hljs bash
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

نشر التطبيق (مثال Laravel)

hljs bash
cd /var/www
git clone https://github.com/user/myapp.git
cd myapp

composer install --no-dev --optimize-autoloader
cp .env.example .env
php artisan key:generate
php artisan migrate --force
php artisan config:cache
php artisan route:cache

sudo chown -R www-data:www-data /var/www/myapp
sudo chmod -R 775 /var/www/myapp/storage

شهادة SSL

hljs bash
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot renew --dry-run

على خوادم REXE، تأكد من فتح المنفذين 80 و 443 عبر Path Panel. أبقِ منفذ MySQL 3306 مغلقاً للخارج.

الخلاصة

تطبيق PHP الخاص بك يعمل الآن على LEMP أو LAMP Stack. يوفر مزيج Nginx + PHP-FPM أداءً عالياً، بينما يخزّن OPcache كود PHP مؤقتاً لتنفيذ أسرع بكثير.

الأسئلة الشائعة

هل أستخدم LAMP أم LEMP؟

يُوصى بـ LEMP (Nginx + PHP-FPM) للمشاريع الجديدة؛ يستخدم ذاكرة أقل ويوفر أداءً أعلى. لكن LAMP (Apache) أسهل في الإعداد للتطبيقات القديمة أو WordPress التي تستخدم .htaccess.

ما هو PHP-FPM ولماذا أستخدمه؟

PHP-FPM (FastCGI Process Manager) يشغّل PHP كعملية منفصلة مُدارة بشكل مستقل عن خادم الويب. مقارنةً بـ mod_php، يستخدم ذاكرة أقل ويوفر أداءً أفضل ويتيح استخدام إصدارات PHP مختلفة لمواقع مختلفة.

كيف أشغّل إصدارات PHP متعددة على نفس الخادم؟

يمكن تثبيت إصدارات PHP متعددة عبر مستودع Ondrej PPA. يعمل خدمة PHP-FPM منفصلة لكل إصدار. في Nginx، يمكن تعيين إصدارات PHP مختلفة لمواقع مختلفة باستخدام مقابس PHP-FPM مختلفة.

تطبيق PHP بطيء، كيف أسرّعه؟

فعّل OPcache (opcache.enable=1)، زد عدد عمال PHP-FPM، أضف رؤوس التخزين المؤقت للملفات الثابتة في Nginx. لـ Laravel/Symfony نفّذ 'php artisan config:cache' و 'php artisan route:cache'. حسّن إدارة الجلسات والتخزين المؤقت مع Redis.

مقالات ذات صلة

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

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

15 دقيقة
nodejspm2nginx

تثبيت WordPress وتحسينه: دليل VPS

دليل تثبيت وتحسين WordPress على VPS. إعداد LEMP Stack، إعدادات wp-config.php، صلاحيات الملفات، SSL، تحسين أداء OPcache وتعزيز الأمان.

20 دقيقة
wordpressvpslemp

نشر Python/Django: بيئة إنتاج مع Gunicorn و Nginx

دليل نشر تطبيقات Python/Django على VPS. إعداد virtualenv، إعدادات Django للإنتاج، خادم Gunicorn WSGI، وكيل Nginx العكسي، خدمة systemd وإدارة الملفات الثابتة.

18 دقيقة
pythondjangogunicorn
حركة الشبكةالداخل Gbpsالخارج Gbps