VPS: إعداد حزمة LAMP - لينكس، أباتشي، ماي إس كيو إل، بي إتش بي
تم إنشاء هذا الدليل باستخدام المنتجات التالية:
(قد تختلف التفاصيل مع المنتجات من مزودين مختلفين ولكن المفاهيم الرئيسية تظل كما هي)
مقدمة
حزمة LAMP هي مجموعة شهيرة من البرمجيات مفتوحة المصدر التي تُثبت معًا للسماح باستضافة مواقع ديناميكية بسهولة، مع تركيز خاص على مواقع وتطبيقات PHP. الاختصار يعني: Lينكس كنظام تشغيل، Aباتشي كسيرفر ويب، Mي إس كيو إل كقاعدة بيانات وأخيرًا PHP للمعالجة. في هذا الدليل، سنغطي عملية إعداد حزمة LAMP على VPS لينكس، مع شرح مفصل ومثال لإنشاء موقع قائمة مهام.
التحضير
ابدأ بالاتصال بسيرفرك عبر SSH. إذا لم تكن تعرف كيف تفعل ذلك، يرجى مراجعة دليلنا الوصول الأولي (SSH).
في هذا الدليل، سنستخدم أوبونتو كتوزيعة لينكس. التعليمات هي نفسها بالنسبة لدبيان ويجب أن تكون مشابهة لتوزيعات أخرى، لكن قد تختلف صياغة الأوامر قليلاً. تأكد من تثبيت نظام تشغيل وأنك متصل بالسيرفر عبر SSH.
كالعادة، قبل المتابعة بالتثبيت، تأكد من تحديث جميع الحزم عبر الأمر التالي:
// أوبونتو و دبيان
sudo apt update
// سنت أو إس
sudo yum update
// أوبن سوزي
sudo zypper up
// فيدورا
sudo dnf upgrade --refresh
التثبيت
يمكن تقسيم التثبيت بسهولة إلى كل مكون أساسي من حزمة LAMP، بدءًا بسيرفر الويب أباتشي، يليه قاعدة بيانات ماي إس كيو إل وأخيرًا PHP. خلال التثبيت، سنقوم بإعداد موقع اختبار مكتوب بـ PHP ويتصل بقاعدة بيانات MySQL. وأخيرًا، سيتم معالجة كل طلب ويب وتقديمه عبر سيرفر أباتشي.
إعداد أباتشي
أباتشي هو سيرفر الويب الذي سيُستخدم لمعالجة طلبات الويب الواردة وتقديم الاستجابات. قم بتثبيته بالأمر التالي.
sudo apt install apache2
بعد التثبيت، يجب التأكد من إنشاء قواعد جدار ناري مناسبة لضمان وصول سيرفر الويب إلى الإنترنت. في هذا المثال، سنستخدم جدار ناري UFW لأن أباتشي لديه تطبيق مسجل له.
إذا كنت تستخدم جدار ناري مختلف، تأكد من السماح للمنفذ 80 (HTTP) عبر الجدار الناري. يمكنك معرفة المزيد عن الجدران النارية في لينكس عبر دليلنا إدارة الجدار الناري.
تأكد من تفعيل جدار ناري UFW وأيضًا من إنشاء قاعدة لـ SSH.
# إنشاء قاعدة للسماح بـ SSH
sudo ufw allow OpenSSH
# تفعيل جدار ناري UFW
sudo ufw enable
تأكد من وجود قاعدة لـ SSH إذا كنت تستخدم جدار ناري UFW! إذا لم تفعل، فلن تتمكن من الاتصال بالسيرفر عبر SSH مرة أخرى إذا فقدت الاتصال بجلسة العمل الحالية!
الآن أنشئ القاعدة للسماح لأباتشي ثم تحقق من وجود القواعد.
# إنشاء قاعدة للسماح لأباتشي
sudo ufw allow in "Apache Full"
# التحقق من قواعد جدار ناري UFW
sudo ufw status
يمكنك عرض الملفات الشخصية المتاحة عبر الأمر ufw app list
. في المثال أعلاه، استخدام Apache Full
يعني إنشاء قواعد لكل من HTTP (المنفذ 80) و HTTPS (المنفذ 443).
يجب أن ترى قواعد Apache
و Apache (v6)
مع إجراءات ALLOW
، مما يؤكد أن الجدار الناري جاهز. يجب أن ترى أيضًا قواعد أخرى قد تكون أنشأتها سابقًا، بما في ذلك قاعدة SSH.
مع فتح الجدار الناري لأباتشي، يجب الآن التأكد من أن أباتشي يعمل بشكل صحيح. يمكنك فعل ذلك بمحاولة الوصول إلى عنوان 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 مع إضافة لأباتشي وMySQL، للسماح لأباتشي بالعمل مع 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
. الآن أعد تشغيل أباتشي لتطبيق التغييرات باستخدام sudo systemctl restart apache2
.
إنشاء موقع اختبار
بعد الانتهاء من تثبيت كل مكونات LAMP، سنقوم الآن بإنشاء موقع اختبار لعرض كيف تعمل حزمة LAMP معًا لتشكيل حل رائع لمواقع ديناميكية. هذا اختياري تمامًا، لكنه مفيد لفهم كيفية استخدام هذه الأدوات لإعداد مواقعك الخاصة.
في هذا المثال، سننشئ موقع قائمة مهام صغير عبر PHP يسترجع ويعرض عناصر المهام. سيتم تخزينها في جدول قاعدة بيانات MySQL وسيتم تقديمها عبر أباتشي.
سنستخدم أيضًا نطاق اختبار zapdocs.example.com
طوال الوقت، لأنه في سيناريو حقيقي من المحتمل أن تستخدم نطاقًا. يجب أن تقوم بإعداد سجل DNS من نوع A
للنطاق يشير إلى عنوان IP الخاص بسيرفرك. إذا كنت تحتاج مساعدة في ذلك، يرجى مراجعة دليلنا سجلات النطاق.
يمكنك اختيار عدم استخدام نطاق واستبدال ذكر [your_domain]
باسم عادي. عندها ستصل للموقع عبر عنوان IP. لكن لاحظ أنه عند إنشاء ملف المضيف الافتراضي لاحقًا، يجب إزالة معلمة ServerName
.
إعداد أباتشي
عادةً، يتم تخزين جميع ملفات ومحتويات المواقع تحت مجلد /var/www
. بشكل افتراضي، يأتي أباتشي مع مجلد html
يحتوي على صفحة افتراضية. لضمان التنظيم خاصة عند استضافة عدة مواقع على نفس سيرفر أباتشي، نوصي بإعداد كل موقع في مجلد منفصل.
للقيام بذلك، يمكنك ببساطة إنشاء مجلد جديد في /var/www/[your_domain]
لكل نطاق موقع. في هذا المثال، سيكون /var/www/zapdocs.example.com
.
sudo mkdir /var/www/[your_domain]
الآن ستنشئ ملف إعداد مضيف افتراضي جديد لأباتشي في مجلد 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
للتأكد من عدم وجود أخطاء في الصياغة.
الخطوة الأخيرة في إعداد أباتشي هي تفعيل المضيف الافتراضي الجديد باستخدام a2ensite
.
sudo a2ensite [your_domain]
إذا كنت لا تستخدم نطاقًا، قم بإزالة سطر ServerName
أو علقه بإضافة #
في بدايته. كما ستحتاج لتعطيل المضيف الافتراضي الافتراضي باستخدام الأمر sudo a2dissite 000-default
.
أخيرًا، أعد تشغيل أباتشي لتفعيل المضيف الافتراضي الجديد باستخدام الأمر: sudo systemctl restart apache2
.
إنشاء الموقع
بعد تكوين أباتشي عبر المضيف الافتراضي الجديد ومجلد المستندات، حان الوقت لإنشاء الموقع الفعلي الذي سيتم تقديمه. حاليًا، المجلد فارغ لذلك لن يتم تقديم أي شيء. سننشئ موقع قائمة مهام صغير كما ذكرنا سابقًا لهذا النطاق.
تحضير قاعدة البيانات
لنبدأ بإنشاء قاعدة بيانات جديدة وجدول لتخزين كل عنصر في القائمة. سجل دخولك إلى سيرفر 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 ('الانضمام إلى ديسكورد 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="ar">
<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 مع التركيز على إضافة أباتشي واتباع الإعداد التفاعلي لتثبيت شهادة بسرعة وسهولة للنطاق الذي تختاره.
لأي أسئلة أو مساعدة إضافية، لا تتردد في التواصل مع فريق الدعم لدينا، المتوفر يوميًا لمساعدتك! 🙂