حزمة LAMP (Linux وApache وMariaDB وPHP) هي الأساس التقليدي لـ WordPress وLaravel ومعظم تطبيقات PHP. في هذا الدليل ستبنيها خطوة بخطوة على VPS Linux Infrawire جديد بنظام Ubuntu 24.04، مع مضيف افتراضي مخصص وجدار حماية لا يكشف سوى المنافذ الضرورية.
📋 المتطلبات المسبقة
- خادم VPS من نوع KVM بنظام Ubuntu 24.04 (عنوان IP وكلمة مرور root متوفران في مساحة العميل)
- وصول SSH بحساب root أو بمستخدم يملك صلاحيات
sudo - نطاق
example.comتشير سجلات A (وAAAA) الخاصة به إلىVPS_IP
تفترض الأوامر أدناه أنك root. وإلا فأضف sudo في بدايتها.
1. تحديث النظام
Bashapt update && apt upgrade -y
2. تثبيت Apache
Bashapt install -y apache2 systemctl enable --now apache2 apache2 -v
تبدأ الخدمة فورًا وتعمل تلقائيًا عند كل إقلاع.
3. تثبيت MariaDB
تتوفر MariaDB في مستودعات Ubuntu وتحل محل MySQL دون تغييرات. إن كنت تفضّل MySQL من Oracle فثبّت mysql-server بدلًا منها، ولكن لا تثبّت الاثنتين معًا على الجهاز نفسه.
Bashapt install -y mariadb-server systemctl enable --now mariadb mysql_secure_installation
في المعالج، أبقِ مصادقة unix_socket للمستخدم root، وحدّد كلمة مرور قوية إن طُلبت، واحذف المستخدمين المجهولين، وامنع دخول root عن بُعد، واحذف قاعدة بيانات الاختبار. ثم أنشئ قاعدة بيانات ومستخدمًا مخصصين لتطبيقك:
Bashmariadb
SQL1CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 2CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; 3GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost'; 4FLUSH PRIVILEGES; 5EXIT;
4. تثبيت PHP 8.3
يوفّر Ubuntu 24.04 الإصدار PHP 8.3 في مستودعاته الافتراضية، لذا لا حاجة إلى PPA إضافي.
Bashapt install -y php libapache2-mod-php php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip php-intl php -v
تحوّل الحزمة libapache2-mod-php خادم Apache تلقائيًا إلى MPM من نوع prefork وتحمّل وحدة PHP.
5. إنشاء مضيف افتراضي وتفعيل mod_rewrite
Bashmkdir -p /var/www/example.com/public_html chown -R www-data:www-data /var/www/example.com nano /etc/apache2/sites-available/example.com.conf
Apache1<VirtualHost *:80> 2 ServerName example.com 3 ServerAlias www.example.com 4 DocumentRoot /var/www/example.com/public_html 5 6 <Directory /var/www/example.com/public_html> 7 AllowOverride All 8 Require all granted 9 </Directory> 10 11 ErrorLog ${APACHE_LOG_DIR}/example.com-error.log 12 CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined 13</VirtualHost>
يفعّل AllowOverride All ملفات .htaccess التي تعتمد عليها الروابط الجميلة في WordPress وLaravel. فعّل الآن الوحدة والموقع، وعطّل الصفحة الافتراضية:
Basha2enmod rewrite a2ensite example.com.conf a2dissite 000-default.conf apache2ctl configtest systemctl reload apache2
يجب أن يعرض configtest الرسالة Syntax OK قبل إعادة التحميل.
6. إعداد جدار الحماية
اسمح بـ SSH أولًا، وإلا ستحجب نفسك عن الخادم عند تفعيل جدار الحماية.
Bashufw allow OpenSSH ufw allow 'Apache Full' ufw enable ufw status
يفتح الملف التعريفي Apache Full المنفذين 80 و443. لا تفتح المنفذ 3306: تحتاج MariaDB إلى الاستماع محليًا فقط.
7. اختبار PHP ثم حذف ملف الاختبار
Bashecho '<?php phpinfo();' > /var/www/example.com/public_html/info.php curl -sI http://example.com/info.php | head -n 1
يجب أن تحصل على HTTP/1.1 200 OK. افتح http://example.com/info.php في المتصفح لرؤية صفحة إعدادات PHP. تكشف صفحة phpinfo() الإصدارات والمسارات والوحدات، لذا احذفها فورًا:
Bashrm /var/www/example.com/public_html/info.php
تحقق أيضًا من بقية المكونات:
Bashapache2ctl -M | grep -E 'rewrite|php' php -m | grep -E 'mysqli|pdo_mysql' systemctl is-active apache2 mariadb
🛠️ استكشاف الأخطاء وإصلاحها
ما زالت صفحة Apache الافتراضية تظهر. الموقع الافتراضي لا يزال مفعّلًا أو لم ينتشر DNS بعد. نفّذ a2dissite 000-default.conf وأعد تحميل Apache واختبر عبر curl -I -H 'Host: example.com' http://VPS_IP/.
403 Forbidden. تأكد من وجود Require all granted في كتلة المجلد، ومن أن www-data يستطيع قراءة الملفات (ls -ld /var/www/example.com/public_html)، وراجع السجل /var/log/apache2/example.com-error.log.
المتصفح يحمّل ملف PHP بدل تنفيذه. وحدة PHP غير محمّلة. نفّذ apache2ctl -M | grep php ثم systemctl restart apache2. وإن لم يظهر شيء فأعد تثبيت libapache2-mod-php.
قواعد إعادة الكتابة متجاهَلة (خطأ 404 في الروابط الجميلة). تأكد من تنفيذ a2enmod rewrite ومن أن كتلة <Directory> تحتوي على AllowOverride All.
🎉 حزمة LAMP جاهزة: Apache وMariaDB وPHP 8.3 مستعدة لاستضافة موقعك الأول.