حزمة LEMP هي مجموعة من البرامج التي يمكن استخدامها لتٌقدّم صفحات الويب الديناميكية وتطبيقات الويب. وهو عبارة عن اختصار يصف نظام تشغيل لينكس مع خادم Nginx (يُنطق "Engine-X"). البيانات الخلفية تكون مخزنة في قاعدة بيانات MySQL وتقوم PHP بالمعالجة الديناميكية.
يشرح هذا المقال كيفية تثبيت حزمة LEMP على خادم أوبونتو 18.04. يتكفل نظام أوبونتو بالمتطلب الأول. سنشرح هنا كيفية تجهيز باقي المكونات وتشغيلها.
المتطلبات
قبل البدء، تحتاج لمستخدم عادي غير مسؤول بصلاحيات sudo
. يمكنك إعداد ذلك باتباع مقال الإعداد الأولي لخادم أوبونتو 18.04.
عندما تنتهي من تجهيز المستخدم، يمكنك بدء الخطوات التالية.
خطوة 1 - تثبيت خادم الويب Nginx
كي نتمكن من عرض صفحات الويب لزوار الموقع، سنثبِّت خادم الويب الحديث والفعال Nginx.
جميع البرامج المستخدمة في هذا المقال متوفرة في مخزن حزم أوبونتو الافتراضي. ما يعني أنه يمكننا استخدام نظام إدارة الحزم apt
لإنهاء التثبيتات الهامة.
في أول مرة نَستخدم فيها apt
في أي جلسة، نبدأ بتحديث محتوى الحزمة ثم نثبت الخادم:
$ sudo apt update
$ sudo apt install nginx
Nginx مُعد كي يعمل تلقائيا بعد التثبيت على أوبونتو 18.04.
إن كان جدار حماية ufw
يعمل لديك كما تم الشرح في مقال الإعداد الأولي، فستحتاج للسماح باتصالات Nginx. يُسجل Nginx في ufw
تلقائيا خلال التثبيت ما يجعل العملية أسهل.
يُستحسن السماح للمنفذ الذي سيتيح لحركة المرور بالوصول مع أعلى قيود ممكنة. لأننا لم نقم بإعداد SSL بعد، فستحتاج لإتاحة حركة المرور في المنفذ 80 فقط.
لتفعيل ذلك:
$ sudo ufw allow 'Nginx HTTP'
للتأكد من التغييرات:
$ sudo ufw status
سَتعرض مخرجات هذا الأمر أن حركة المرور خلال HTTP متاحة:
المخرجات:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
بعد إضافة هذا الإعداد إلى جدار الحماية يمكنك اختبار إن كان الخادم يعمل عبر الدخول إلى اسم نطاق الخادم أو عنوان بروتوكول الإنترنت العام للخادم عبر المتصفح.
إن كنت لا تملك اسم نطاق محدد للخادم وكنت لا تعلم عنوان بروتوكول الإنترنت العام للخادم يمكنك إيجاده من خلال تنفيذ لأمر:
$ ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
هذا الأمر سيزودك بمجموعة من عناوين بروتوكول الإنترنت، يمكنك تجريبها على متصفحك.
كطريقة بديلة، يمكنك التحقق إن كان عنوان بروتوكول الإنترنت متاح من مكان آخر على الإنترنت:
$ curl -4 icanhazip.com
أدخِل عنوان بروتوكول الإنترنت الذي حصلت عليه في متصفحك، وستظهر لك صفحة Nginx الرئيسية:
http://server_domain_or_IP
(صورة)
إن رأيت الصفحة التي في الأعلى، فإن Nginx مُثبّت بنجاح.
خطوة 2 - تثبيت MySQL لإدارة بيانات الموقع
الآن وبما أنه أصبح لديك خادم ويب، ستحتاج لِتثبيت MySQL (نظام إدارة قواعد بيانات) وإدارة بيانات الموقع.
ثبّت MySQL باستخدام الأمر:
$ sudo apt install mysql-server
تم تثبيت قاعدة بيانات MySQL لكن إعدادها لم يكتمل بعد.
لتأمين التثبيت، تُرفق MySQL بسكربت يسألك إن كنت تريد تغيير الإعدادات الافتراضية الغير آمنة. لبدء السكربت:
$ sudo mysql_secure_installation
سيسألك السكربت إن كنت تريد إعداد VALIDATE PASSWORD PLUGIN
.
تحذير: يجب أن تفهم هذه الميزة قبل تفعيلها. فعند تفعيل هذه الميزة، سيرفض MySQL أي كلمة مرور لا تطابق معاييره المحددة وسيظهر خطأ. مما يتسبب في بعض المشاكل في حال كنت تستخدم كلمة مرور ضعيفة بالإضافة إلى برنامج يُعِد بيانات مستخدمي MySQL تلقائيا مثل حزمة phpMyAdmin. يُفضل عدم تفعيل هذا الأمر لتفادي مثل هذه الأخطاء. لكن، يُفضَّل أن تستخدم كلمات مرور قوية وفريدة لمستخدمي قواعد البيانات دائما.
أجب Y
للتفعيل أو أي حرف آخر للاستمرار بدون تفعيل الإضافة.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
في حال اخترت تفعيل التحقق، فَسَيسألك السكربت لاختيار مستوى تحقق كلمة المرور. تذكر أنه إن اخترت 2 -أقوى مستوى - فسترى بعض الأخطاء عند إدخال كلمة مرور لا تحتوي على أرقام، أحرف كبيرة وصغيرة، ورموز أو أي كلمة اعتيادية من قاموس اللغة.
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
ثم سيُطلب منك إدخال وتأكيد كلمة مرور مستخدم مسؤول:
Please set the password for root here.
New password:
Re-enter new password:
لباقي الأسئلة قم بالضغط على Y
ثم ENTER
في كل شاشة. بهذه الطريقة، سيتم حذف بعض المستخدمين المجهولين، وفحص قاعدة البيانات، وتعطيل تسجيل دخول المستخدمين المسؤولين عن بعد، ويعيد تحميل الإعدادات الجديدة كي يقوم MySQL بتطبيقها مبشرة.
لاحظ أنه في اصدارات MySQL 5.7 وما يليها على أوبونتو يُعد المستخدم المسؤول للمصادقة باستخدام إضافة auth_socket
افتراضيا بدلا من التصديق باستخدام كلمة مرور. هذه الميزة توفر أمانًا أكبر وسهولة استخدام في حالات متعددة، لكنها قد تكون معقدة عندما تريد السماح لبرامج خارجية مثل (phpMyAdmin) بالوصول للمستخدم.
إن كان استخدام إضافة auth_socket
للوصول إلى MySQL يتناسب مع طبيعة عملك يمكنك الاستمرار بالخطوة 3. لكن إن كنت تفضل استخدام كلمة المرور للاتصال ب MySQL كمستخدم مسؤول فستحتاج لتغيير طريقة مصادقته من auth_socket
إلى mysql_native_password
. للقيام بذلك، افتح شاشة اوامر MySQL:
$ sudo mysql
ثم قم بالتحقق من طريقة المصادقة التي يستخدمها كل حساب من مستخدمي MySQL باستخدام الأمر:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
المخرجات:
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
يمكنك ملاحظة أن المستخدم المسؤول يستخدم التصديق بإضافة auth_socket
. لإعداد حساب المستخدم المسؤول للمصادقة بكلمة مرور، نفّذ أمر ALTER USER
التالي. تأكد من استخدامك كلمة مرور قوية من اختيارك:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
ثم نفّذ الأمر FLUSH PRIVILEGES
والذي سيجعل الخادم يعيد جداوِل الصلاحيات حتى تعمل التغييرات التي أجريتها:
mysql> FLUSH PRIVILEGES;
تحقق من طرق التصديق لكل مستخدام مجددًا لتتأكد من أن المستخدم المسؤول لم يعد يستخدم المصادقة باضافة auth_socket
:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
المخرجات:
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
يمكنك رؤية أن مستخدم MySQL المسؤول أصبح يستخدم المصادقة بكلمة المرور. بعد تأكدك من هذا على الخادم الخاص بك أغلق شاشة اوامر MySQL:
mysql> exit
ملاحظة:
بعد تغييرك لطريقة مصادقة المستخدم المسؤول إلى كلمة مرور، فلن تستطيع الوصول إلى MySQL باستخدام الأمر sudo mysql
المُستخدم سابقا، بدلا عن ذلك يجب أن تنفذ الأمر التالي:
$ mysql -u root -p
بعد ادخال كلمة المرور التي أعددتها قبل قليل، ستُفتح لك شاشة اوامر MySQL.
هكذا يكون نظام قواعد البيانات جاهزًا ويمكنك الانتقال إلى خطوة تثبيت PHP.
خطوة 3 - تثبيت PHP وإعداد Nginx لاستخدام معالج PHP
أصبح لديك الآن Nginx لعرض صفحات الويب، و MySQL لتخزين وإدارة البيانات. لكن ليس لديك شيء يقوم بتوليد صفحات ويب ديناميكية. هنا يأتي دور PHP.
لأن Nginx لا يحتوي على وحدة معالجة PHP مثل باقي خوادم الويب، ستحتاج لتثبيت php-fpm
والتي تعني "fastCGI process manager". سنجعل Nginx يُمرر طلبات PHP إلى هذا البرنامج للمعالجة.
ملاحظة:
اعتمادًا على مزود الخدمة السحابية لديك، قد تحتاج لإضافة مخزن أوبونتو universe
الذي يتضمن برامج مجانية ومفتوحة المصدر أنشئت بواسطة مجتمع أوبونتو؛ يمكنك القيام بذلك قبل تثبيت php-fp
:
$ sudo add-apt-repository universe
ثبّت php-fpm
مع الحزمة المساعدة php-mysql
التي تسمح ل PHP بالتواصل مع قاعدة البيانات. سيجلب التثبيت ملفات PHP الرئيسية:
$ sudo apt install php-fpm php-mysql
الآن أصبح لديك جميع مكونات حزمة LEMP، لكن ما زلت تحتاج لتعديل بعض إعدادت التكوين حتى تجعل Nginx بتعامل مع معالج PHP لعرض المحتوى الديناميكي.
يتم ذلك على مستوى أجزاء الخادم (أجزاء الخادم تشبه مُستضيفوا Apache الوهميون). للقيام بذلك، افتح ملف تكوين جزء خادم جديد في مجلد /etc/nginx/sites-available/
. في هذا المثال، سنُسمي ملف جزء السيرفر example.com
. يمكنك اختيار الاسم الذي تريده:
$ sudo nano /etc/nginx/sites-available/example.com
ستتمكن بتعديل ملف تكوين جزء خادم جديد بدلا من تعديل الجزء الافتراضي من استعادة الاعدادات الافتراضية في حال احتجتها.
أضف المحتوى التالي المأخوذ من ملف تكوين جزء الخادم الرئيسي مع بعض التعديلات الطفيفة إلى ملف تكوين جزء الخادم الجديد:
/etc/nginx/sites-available/example.com
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name example.com;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
هذا ما تقوم به التوجيهات وأجزاء التحديد:
-
listen
- تُعرف المنفذ الذي يستمع له Nginx، في هذه الحالة يستمع Nginx إلى المنفذ 80، المنفذ الافتراضي ل HTTP. -
root
- يُعرّف المجلد الرئيسي حيث تُخزن ملفات الموقع. -
index
- يقوم بإعداد Nginx كي يجعل الأولوية لعرض الملفات المسماهindex.php
- إن كانت متاحة عند طلب ملف index. -
server_name
- تعرّف الجزء الذي يجب أن يُستخدم لطلب ما للخادم. حدد هذه التوجيهة إلى اسم نطاق الخادم أو عنوان بروتوكول الإنترنت للخادم. -
location /
- أول جزء تحديد يحتوي توجيهةtry_files
والتي تتحقق من وجود ملفات تطابق طلب عنوان URI. إن لم يجد Nginx الملف المناسب، يقوم بإرجاع خطأ 404. -
"
location ~ \.php$
" - جزء التحديد هذا يهتم بالمعالجة الفعلية ل PHP عبر توجيه Nginx إلى ملف تكوينfastcgi-php.conf
وملفphp7.2-fpm.sock
الذي يُعرّف الحزمة المرتبطة بphp-fpm
. -
location ~ /\.ht
- آخر جزء تحديد والذي يتعامل مع ملف.htaccess
الذي لا يقوم Nginx بمعالجته. بإضافة توجيهةdeny all
فإن ملفات ".htaccess
" التي قد تتواجد في المجلد الرئيسي لن تُعرض للزائر.
بعد إضافة هذا المحتوى، احفظ الملف واغلقه. فعّل جزء الخادم الجديد بإنشاء رابط رمزي من ملف تكوين جزء الخادم الجديد في المجلد /etc/nginx/sites-available/
إلى المجلد /etc/nginx/sites-enabled/
:
$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
ثم ألغِ ربط ملف التكوين الرئيسي من مجلد /sites-enabled/
:
$ sudo unlink /etc/nginx/sites-enabled/default
ملاحظة:
إن احتجت لاستعادة الإعدادت الافتراضية، يمكنك ذلك بإعادة إنشاء الرابط الرمزي:
$ sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
افحص ملف التكوين الجديد من الأخطاء الإملائية :
$ sudo nginx -t
إن ظهرت أي أخطاء عد وتحقق من الملف قبل الاستمرار.
عند انتهائك أعد تشغيل Nginx كي تُطبّق التغييرات:
$ sudo systemctl reload nginx
وبهذا ننتهي من تثبيت وإعداد حزمة LEMP. لكن ما زلنا لم نتأكد ما إن كانت جميع المكونات تتواصل ببعضها البعض.
خطوة 4 - انشاء ملف PHP للتحقق من الاعدادات
الآن، يجب أن تكون حزمة LEMP مُعدة بشكل تام. يمكنك اختبار ذلك للتحقق من أن Nginx يعالج ملفات ".php
" من معالج PHP بطريقة صحيحة.
للقيام بذلك استخدم محرر النصوص لإنشاء ملف PHP تجريبي وسمّه info.php
في المجلد الرئيسي.
$ sudo nano /var/www/html/info.php
أدخل الأسطر التالية إلى الملف. هذا الكود هو كود PHP صحيح والذي سيعرض معلومات عن الخادم:
- الملف /var/www/html/info.php:
<?php phpinfo();
عند انتهائك احفظ الملف واغلقه.
يمكن الآن زيارة هذه الصفحة من متصفحك بزيارة اسم نطاق الخادم أو عنوان بروتوكول الإنترنت العام للخادم متبوعا ب /info.php
:
http://your_server_domain_or_IP/info.php
يجب أن ترى صفحة ويب تم توليدها باستخدام PHP تحتوي معلومات الخادم:
(صورة)
إن رأيت صفحة تشبه الصورة السابقة، فإن إعدادك لمعالج PHP مع Nginx صحيح.
بعد التحقق من أن Nginx يعالج الصفحات بصورة صحيحة، يُفضل أن تحذف الملف الذي أنشاته لأنه قد يعطي المستخدمين المخولين بالوصول بعض المعلومات عن إعداد الخادم مما قد يساعدهم في محاولة اقتحامه. يمكنك توليد هذا الملف عند احتياجك له.
قم بحذف الملف:
$ sudo rm /var/www/html/info.php
وبهذا تكون قد أعددت وشغّلت حزمة LEMP على خادم أوبونتو 18.04.
الخلاصة
تعد حزمة LEMP هيكل قوي يمكنك من بناء وتشغيل أي موقع أو تطبيق ويب تقريبا من الخادم الخاص بك.
يوجد العديد من الخطوات التي يمكنك القيام بها بعد هذه الخطوة. مثلا، يجب أن تتأكد من أن الاتصالات إلى الخادم آمنة. ختاما، يمكنك تأمين تثبيت Nginx باستخدام تشفير Let's. باتباع هذا المقال، سوف تحصل على شهادة TLS/SSL
للخادم الخاص بك كي يخدم المحتوى عبر HTTPS.
ترجمة -وبتصرف- للمقال How To Install Linux, Nginx, MySQL, PHP (LEMP stack) on Ubuntu 18.04 لأصحابه الكتاب Mark Drake و Justin Ellingwood.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.