تخطي إلى المحتوى الرئيسي

إعداد حزمة LAMP على سيرفر Linux - تشغيل تطبيقات PHP الكلاسيكية

المنتجات المثالية لهذا الدليل

ابدأ على الفور — اطلب المنتج المناسب واتبع هذا الدليل خطوة بخطوة.

مقدمة

حزمة LAMP هي اختيار شائع لمجموعة برامج مفتوحة المصدر تُثبت معًا للسماح باستضافة مواقع ويب ديناميكية بسيطة، مع تركيز خاص على مواقع وتطبيقات PHP. الاختصار يعني: Linux كنظام تشغيل، Apache كسيرفر ويب، MySQL كقاعدة بيانات وأخيرًا PHP للمعالجة. في هذا الدليل، سنغطي عملية إعداد حزمة LAMP على سيرفر 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

لحالات الاستخدام المتقدمة، قد تحتاج إلى امتدادات 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 ('Create ZAP-Docs Guide', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('Buy a ZAP-Hosting Server', 1);
INSERT INTO todoitems (name, is_completed) VALUES ('Join ZAP-Hosting Discord', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('Have a great day!', 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 بقاعدة البيانات.

important

يجب عليك تغيير حقل [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("Connection failed: " . $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>To-Do List</title>
</head>
<body>
<h1>Awesome To-Do List :D</h1>
<p>For our awesome ZAP-Hosting guide: <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>(Completed)</strong>";
} else {
echo " <strong>(Incomplete)</strong>";
}

// عرض تاريخ الإنشاء
echo " - Creation Date: " . htmlspecialchars($entry['creation_date']);
echo "</li>";
}
} else {
// إذا لم توجد عناصر، عرض رسالة افتراضية
echo "<li>No to-do items found.</li>";
}
?>
</ul>
</body>
</html>

<?php
// إغلاق اتصال قاعدة البيانات
$conn->close();
?>

بعد نسخ هذا في محرر nano، احفظ الملف واخرج باستخدام CTRL + X، ثم Y للتأكيد وأخيرًا ENTER.

اختبار الموقع

لقد نجحت في اتباع الخطوات وإعداد موقع قائمة مهام تجريبي يستخدم كل مكونات حزمة LAMP!

يجب أن تتمكن الآن من الوصول إلى الموقع عبر النطاق (باستخدام http/المنفذ 80) الذي عرّفته سابقًا في ملف المضيف الافتراضي، والذي في هذا المثال هو zapdocs.example.com. النتيجة النهائية يجب أن تبدو كما يلي:

الخاتمة

تهانينا، لقد قمت بتثبيت وإعداد حزمة LAMP بنجاح! كخطوة تالية، نوصي بشدة بإعداد نطاق وشهادة SSL لضمان نقل البيانات بأمان إلى مواقعك. يرجى الاطلاع على دليلنا Certbot مع التركيز على إضافة Apache واتباع الإعداد التفاعلي لإعداد شهادة بسرعة وسهولة لنطاقك المختار.

لأي أسئلة أو مساعدة إضافية، لا تتردد في التواصل مع فريق الدعم لدينا، المتوفر يوميًا لمساعدتك! 🙂