كيفية تثبيت (حزمة LEMP) على أوبونتو 18.04


Emq Mohammed

حزمة LEMP هي مجموعة من البرامج التي يمكن استخدامها لتٌقدّم صفحات الويب الديناميكية وتطبيقات الويب. وهو عبارة عن اختصار يصف نظام تشغيل لينكس مع خادم Nginx (يُنطق "Engine-X"). البيانات الخلفية تكون مخزنة في قاعدة بيانات MySQL وتقوم PHP بالمعالجة الديناميكية.

يشرح هذا المقال كيفية تثبيت حزمة LEMP على خادم أوبونتو 18.04. يتكفل نظام أوبونتو بالمتطلب الأول. سنشرح هنا كيفية تجهيز باقي المكونات وتشغيلها.

المتطلبات

قبل البدء، تحتاج لمستخدم عادي غير مسؤول بصلاحيات sudo. يمكنك إعداد ذلك باتباع مقال الإعداد الأولي لخادم أوبونتو 18.04.

عندما تنتهي من تجهيز المستخدم، يمكنك بدء الخطوات التالية.

كيفية تثبيت حزمة LEMP.jpg

خطوة 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.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن