إعداد حزمة LAMP على سيرفر Linux - تشغيل تطبيقات PHP الكلاسيكية
المنتجات المثالية لهذا الدليل
ابدأ على الفور — اطلب المنتج المناسب واتبع هذا الدليل خطوة بخطوة.
مقدمة
حزمة LAMP هي مجموعة شهيرة من البرمجيات مفتوحة المصدر التي تُثبت معًا للسماح باستضافة مواقع ويب ديناميكية بسهولة، مع تركيز خاص على مواقع وتطبيقات PHP. الاختصار يعني: Linux كنظام تشغيل، Apache كسيرفر ويب، MySQL كقاعدة بيانات وأخيرًا PHP للمعالجة. في هذا الدليل، سنغطي عملية إعداد حزمة LAMP على VPS Linux، مع شرح تفصيلي ومثال لإنشاء موقع قائمة مهام.
التحضير
ابدأ بالاتصال بسيرفرك عبر SSH. إذا لم تكن تعرف كيف تفعل ذلك، يرجى الاطلاع على دليلنا الوصول الأولي (SSH).
في هذا الدليل، سنستخدم Ubuntu كتوزيعة Linux. التعليمات هي نفسها لـ Debian ويجب أن تكون مشابهة للتوزيعات الأخرى، لكن قد تختلف صياغة الأوامر قليلاً. تأكد من تثبيت نظام تشغيل وأنك متصل بالسيرفر عبر SSH.
كالعادة، قبل المتابعة بالتثبيت، تأكد من تحديث جميع الحزم عبر الأمر التالي:
// Ubuntu & Debian
sudo apt update
// CentOS
sudo yum update
// OpenSUSE
sudo zypper up
// Fedora
sudo dnf upgrade --refresh
التثبيت
يمكن تقسيم التثبيت بسهولة إلى كل مكون أساسي من حزمة LAMP، بدءًا بسيرفر الويب Apache، يليه قاعدة بيانات MySQL وأخيرًا PHP. خلال التثبيت، سنقوم بإعداد موقع ويب تجريبي مكتوب بـ PHP ويتصل بقاعدة بيانات MySQL. وأخيرًا، سيتم معالجة كل طلب ويب وتقديمه عبر سيرفر Apache.
إعداد Apache
Apache هو سيرفر الويب الذي سيُستخدم لمعالجة طلبات الويب الواردة وتقديم الردود. قم بتثبيته بالأمر التالي.
sudo apt install apache2
بعد التثبيت، يجب التأكد من إنشاء قواعد جدار ناري مناسبة لضمان وصول سيرفر الويب إلى الإنترنت. في هذا المثال، سنستخدم جدار ناري UFW لأن Apache لديه تطبيق مسجل له.
إذا كنت تستخدم جدار ناري مختلف، تأكد من السماح بالمنفذ 80 (HTTP) عبر الجدار الناري. يمكنك معرفة المزيد عن الجدران النارية في Linux عبر دليلنا إدارة الجدار الناري.
تأكد من تفعيل جدار ناري UFW وأيضًا من إنشاء قاعدة لـ SSH.
# إنشاء قاعدة للسماح بـ SSH
sudo ufw allow OpenSSH
# تفعيل جدار ناري UFW
sudo ufw enable
تأكد من وجود قاعدة لـ SSH إذا كنت تستخدم جدار ناري UFW! إذا لم تفعل، فلن تتمكن من الاتصال بالسيرفر عبر SSH مرة أخرى إذا فقدت الاتصال بجلسة العمل الحالية!
الآن أنشئ القاعدة للسماح لـ Apache ثم تحقق من وجود القواعد.
# إنشاء قاعدة للسماح لـ Apache
sudo ufw allow in "Apache Full"
# التحقق من قواعد جدار ناري UFW
sudo ufw status
يمكنك عرض الملفات الشخصية المتاحة عبر الأمر ufw app list. في المثال أعلاه، استخدام Apache Full يعني إنشاء قواعد لكل من HTTP (المنفذ 80) و HTTPS (المنفذ 443).
يجب أن ترى قواعد Apache و Apache (v6) مع إجراءات ALLOW، مما يؤكد أن الجدار الناري جاهز. يجب أن ترى أيضًا قواعد أخرى قد تكون أنشأتها مسبقًا، بما في ذلك قاعدة SSH.
مع فتح الجدار الناري لـ Apache، يجب الآن التأكد من أن Apache يعمل بشكل صحيح. يمكنك فعل ذلك بمحاولة الوصول إلى عنوان IP الخاص بك عبر المتصفح، كالتالي: http://[your_ipaddress]
إذا كان يعمل، سترى صفحة ترحيب افتراضية. إذا لم تتمكن، تحقق من حالة الخدمة باستخدام الأمر: systemctl status apache2
إعداد MySQL
الآن ستقوم بتثبيت وإعداد سيرفر MySQL الذي سيعمل كقاعدة بيانات لتخزين البيانات بشكل دائم بطريقة علاقاتية. قم بتثبيته بالأمر التالي.
sudo apt install mysql-server
بعد الانتهاء، يُنصح بتشغيل سكربت التثبيت الآمن الذي يضمن بقاء سيرفر MySQL الخاص بك آمنًا. هذا اختياري لكنه موصى به بشدة. يمكنك تشغيله عبر الأمر sudo mysql_secure_installation.
سيأخذك هذا خلال إعداد تفاعلي. أولًا، سيُطلب منك اختيار التحقق من كلمات المرور. نوصي باختيار Y لضمان قبول كلمات مرور آمنة فقط في المستقبل، ثم اختيار إما MEDIUM عبر 1 أو STRONG عبر 2.
بعدها سيُطلب منك إزالة المستخدم anonymous ومنع تسجيل دخول root عن بُعد. نوصي بشدة بالموافقة على كلا الخيارين عبر Y لأسباب أمنية. هذا يضمن إزالة المستخدم التجريبي وأن مستخدم root الرئيسي يمكن استخدامه فقط محليًا عبر SSH وليس من أي مكان آخر، مما يقلل المخاطر.
أخيرًا، سيُطلب منك إزالة قاعدة البيانات test وإعادة تحميل جداول الصلاحيات. مرة أخرى نوصي بالموافقة عبر Y لأن جدول الاختبار غير ضروري ويجب إعادة تحميل جداول الصلاحيات لتطبيق التعديلات.
الآن تحقق مما إذا كانت قاعدة بيانات MySQL تعمل باستخدام الأمر التالي لتسجيل الدخول: sudo mysql -u root. إذا نجحت، سترى رسالة ترحيب. يمكنك الخروج باستخدام الأمر quit عند الانتهاء.
إعداد PHP
المكون الأخير في حزمة LAMP هو PHP وهذا بسيط جدًا للتثبيت. الأمر التالي يثبت PHP مع إضافة لـ Apache و MySQL، للسماح لـ Apache بالعمل مع PHP وللسماح لـ PHP باستخدام MySQL.
sudo apt install php libapache2-mod-php php-mysql
تأكد من نجاح التثبيت عبر التحقق من الإصدار. إذا ظهر إصدار، فهذا يعني أن PHP يعمل بشكل صحيح.
php -v
لحالات الاستخدام المتقدمة، قد تحتاج إلى امتدادات PHP إضافية للسماح بوظائف إضافية. يمكنك عرض قائمة بهذه الامتدادات عبر الأمر apt search php- | less.
استخدم الأسهم للتصفح واضغط Q للخروج. لتثبيت حزمة امتداد، استخدم أمر apt install كما يلي. يمكنك إدخال عدة امتدادات مرة واحدة مفصولة بمسافة لتسريع التثبيت.
sudo apt install [php_extension] [...]
ننصح بتعديل ترتيب ملفات الفهرس لضمان أن ملفات index.php تأتي قبل ملفات .html الافتراضية. افتح الملف باستخدام الأمر التالي.
sudo nano /etc/apache2/mods-enabled/dir.conf
في محرر nano، احذف index.php وانقله إلى بداية القائمة، كما يلي:
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
احفظ الملف واخرج من nano باستخدام CTRL + X، ثم Y للتأكيد وأخيرًا ENTER. الآن أعد تشغيل Apache لتطبيق التغييرات باستخدام sudo systemctl restart apache2.
إنشاء موقع ويب تجريبي
مع اكتمال تثبيت كل مكون من مكونات LAMP، سنقوم الآن بإنشاء موقع ويب تجريبي لعرض كيفية عمل حزمة LAMP معًا لتشكيل حل رائع لمواقع الويب الديناميكية. هذا اختياري تمامًا، لكنه مفيد لفهم كيفية استخدام هذه الأدوات لإعداد مواقعك الخاصة.
في هذا المثال، سننشئ موقع قائمة مهام صغير عبر PHP يسترجع ويعرض عناصر المهام. سيتم تخزينها في جدول قاعدة بيانات MySQL وسيتم تقديمها عبر Apache.
سنستخدم أيضًا نطاقًا تجريبيًا zapdocs.example.com طوال الوقت، لأنه في سيناريو حقيقي من المحتمل أن تستخدم نطاقًا. يجب عليك إعداد سجل DNS من نوع A للنطاق يشير إلى عنوان IP الخاص بسيرفرك. إذا كنت تحتاج مساعدة في ذلك، يرجى تصفح دليلنا سجلات النطاق.
يمكنك اختيار عدم استخدام نطاق واستبدال ذكر [your_domain] باسم عادي. عندها ستصل إلى الموقع عبر عنوان IP. لكن لاحظ أنه عند إنشاء ملف المضيف الافتراضي لاحقًا، يجب إزالة معلمة ServerName.
إعداد Apache
عادةً، يتم تخزين جميع ملفات وبيانات المواقع تحت مجلد /var/www. بشكل افتراضي، يأتي Apache مع مجلد html يحتوي على صفحة افتراضية. لضمان التنظيم خاصة عند استضافة عدة مواقع على نفس Apache، نوصي بإعداد كل موقع في مجلد منفصل.
للقيام بذلك، يمكنك ببساطة إنشاء مجلد جديد في /var/www/[your_domain] لكل نطاق موقع. في هذا المثال، سيكون /var/www/zapdocs.example.com.
sudo mkdir /var/www/[your_domain]
الآن ستنشئ ملف إعداد مضيف افتراضي جديد لـ Apache في مجلد sites-available لهذا النطاق والمجلد.
sudo nano /etc/apache2/sites-available/[your_domain].conf
استخدم القالب أدناه وانسخه في محرر nano، مع استبدال [your_domain] بالنطاق الذي تستخدمه.
<VirtualHost *:80>
ServerName [your_domain]
ServerAlias www.[your_domain]
ServerAdmin webmaster@localhost
DocumentRoot /var/www/[your_domain]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
هذا الملف الجديد للمضيف الافتراضي يتعامل مع طلبات المنفذ 80 (HTTP) ويتحقق مما إذا كان الطلب يطابق ServerName المحدد، في هذه الحالة نطاقك. كما يشير إلى أن المجلد /var/www/[your_domain] الذي أنشأته سابقًا يجب استخدامه لتقديم الملفات.
احفظ الملف واخرج من nano باستخدام CTRL + X، ثم Y للتأكيد وأخيرًا ENTER. نوصي باستخدام الأمر sudo apache2ctl configtest للتأكد من عدم وجود أخطاء في الصياغة.
الخطوة الأخيرة في إعداد Apache هي تفعيل المضيف الافتراضي الجديد باستخدام a2ensite.
sudo a2ensite [your_domain]
إذا كنت لا تستخدم نطاقًا، قم بإزالة سطر ServerName أو علقه بوضع # في بدايته. كما سيتوجب عليك تعطيل المضيف الافتراضي الافتراضي باستخدام الأمر sudo a2dissite 000-default.
أخيرًا، أعد تشغيل Apache لتطبيق المضيف الافتراضي الجديد باستخدام الأمر: sudo systemctl restart apache2.
إنشاء الموقع
بعد تكوين Apache عبر المضيف الافتراضي الجديد ومجلد المستندات، حان الوقت لإنشاء الموقع الفعلي الذي سيتم تقديمه. حاليًا، المجلد فارغ لذلك لن يتم تقديم أي شيء. سننشئ موقع قائمة مهام صغير كما ذكرنا سابقًا لهذا النطاق.
تحضير قاعدة البيانات
لنبدأ بإنشاء قاعدة بيانات جديدة وجدول لتخزين كل عنصر في القائمة. سجل دخولك إلى سيرفر MySQL.
sudo mysql -u root
الآن لننشئ قاعدة بيانات todowebsite وجدول todoitems داخلها.
# إنشاء قاعدة البيانات
CREATE DATABASE todowebsite;
# استخدام قاعدة البيانات الجديدة
USE todowebsite;
# إنشاء جدول جديد للعناصر في قاعدة البيانات
CREATE TABLE todoitems (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
is_completed BOOLEAN DEFAULT FALSE,
creation_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
مع جاهزية الجدول، لننشئ بعض الإدخالات التجريبية الآن.
INSERT INTO todoitems (name, is_completed) VALUES ('إنشاء دليل ZAP-Docs', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('شراء سيرفر من ZAP-Hosting', 1);
INSERT INTO todoitems (name, is_completed) VALUES ('الانضمام إلى Discord الخاص بـ ZAP-Hosting', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('أتمنى لك يومًا رائعًا!', 0);
أخيرًا، لننشئ مستخدمًا مخصصًا todo سيُستخدم خصيصًا لهذا الموقع.
# إنشاء مستخدم مخصص
# استبدل [your_password] بكلمة المرور الخاصة بك
CREATE USER todo@localhost IDENTIFIED BY '[your_password]';
# تعيين الصلاحيات للمستخدم (انسخ كأمر واحد)
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER
ON todowebsite.*
TO todo@localhost;
# إعادة تحميل الصلاحيات
FLUSH PRIVILEGES;
مع تحضير قاعدة البيانات والمستخدم، يمكنك الخروج من طرفية MySQL باستخدام الأمر quit عند الانتهاء.
ملفات موقع PHP
الجزء الأخير من هذا المثال هو إعداد ملف موقع PHP الفعلي لصفحة المهام. سيتم ذلك عبر ملف جديد index.php في مجلد /var/www/[your_domain] الذي أنشأته سابقًا. افتح محرر nano لإنشاء الملف هناك.
sudo nano /var/www/[your_domain]/index.php
فيما يلي شفرة بسيطة يمكنك وضعها في محرر nano لصفحة مهام أساسية تعرض العناصر المخزنة في قاعدة البيانات. القسم الأول من PHP ينشئ اتصال MySQL بقاعدة بياناتك.
يجب عليك تغيير حقل [your_password] إلى كلمة المرور التي عينتها للمستخدم todo سابقًا.
القسم التالي من HTML يحتوي على الصفحة الرئيسية التي تنشئ قائمة غير مرتبة، وتكرر عبر كل النتائج.
<?php
// إعداد اتصال MySQL
$servername = "localhost";
$username = "todo";
$password = "[your_password]";
$dbname = "todowebsite";
// إنشاء الاتصال
$conn = new mysqli($servername, $username, $password, $dbname);
// التحقق من نجاح الاتصال، وإلا عرض خطأ
if ($conn->connect_error) {
die("فشل الاتصال: " . $conn->connect_error);
}
// تنفيذ استعلام SQL لإرجاع الإدخالات وتعيينها في متغير النتيجة
$sql = "SELECT id, name, is_completed, creation_date FROM todoitems ORDER BY creation_date DESC";
$result = $conn->query($sql);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF--8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>قائمة المهام</title>
</head>
<body>
<h1>قائمة مهام رائعة :D</h1>
<p>لدليل ZAP-Hosting الرائع: <a href="https://zap-hosting.com/guides/docs/vserver-linux-lamp-stack">https://zap-hosting.com/guides/docs/vserver-linux-lamp-stack</a></p>
<ul>
<?php
// التحقق من وجود نتائج
if ($result->num_rows > 0) {
// التكرار عبر كل عنصر من النتائج
foreach ($result as $entry) {
echo "<li>";
// عرض الاسم واستخدام htmlspecialchars لمنع XSS (حقن السكربتات)
echo htmlspecialchars($entry["name"]);
// عرض حالة الإنجاز
if ($entry["is_completed"]) {
echo " <strong>(مكتمل)</strong>";
} else {
echo " <strong>(غير مكتمل)</strong>";
}
// عرض تاريخ الإنشاء
echo " - تاريخ الإنشاء: " . htmlspecialchars($entry['creation_date']);
echo "</li>";
}
} else {
// إذا لم توجد عناصر، عرض رسالة افتراضية
echo "<li>لا توجد عناصر في قائمة المهام.</li>";
}
?>
</ul>
</body>
</html>
<?php
// إغلاق اتصال قاعدة البيانات
$conn->close();
?>
بعد نسخ هذا في محرر nano، احفظ الملف واخرج باستخدام CTRL + X، ثم Y للتأكيد وأخيرًا ENTER.
اختبار الموقع
لقد اتبعت الخطوات بنجاح وأعددت موقع قائمة مهام تجريبي يستخدم كل مكونات حزمة LAMP!
يجب أن تكون قادرًا الآن على الوصول إلى الموقع عبر النطاق (باستخدام http/المنفذ 80) الذي حددته سابقًا في ملف المضيف الافتراضي، والذي في هذا المثال هو zapdocs.example.com. النتيجة النهائية يجب أن تبدو كما يلي:
الخاتمة
تهانينا، لقد قمت بتثبيت وإعداد حزمة LAMP بنجاح! كخطوة تالية، نوصي بشدة بإعداد نطاق وشهادة SSL لضمان نقل البيانات بأمان إلى مواقعك. يرجى الاطلاع على دليلنا Certbot مع التركيز على إضافة Apache واتباع الإعداد التفاعلي لإعداد شهادة بسرعة وسهولة لنطاقك المختار.
لأي أسئلة أو مساعدة إضافية، لا تتردد في التواصل مع فريق الدعم لدينا، المتوفر يوميًا لمساعدتك! 🙂