تشغيل إصدارات  بي اش بي (PHP)على خادم واحد باستخدام اباتشي (Apache)

إصدارات PHP متعددة باستخدام Apache
على CentOS 7 Redhat RHEL

لإدارة العديد من المجالات في حالة واحدة، يستفيد خادم الويب Apache من المضيفين الافتراضيين. على غرار ذلك، يدير PHP-FPM العديد من إصدارات PHP في حالة واحدة باستخدام عميل. يمكن استضافة العديد من تطبيقات الويب PHP التي تشغل إصدارات مختلفة من PHP في وقت واحد على نفس الخادم باستخدام Apache و PHP-FPM. هذا مفيد لأن بعض مكدسات الخوادم، مثل مكدس LAMP المعد بانتظام، يمكنها إدارة إصدار PHP واحد فقط، على الرغم من أن التطبيقات المختلفة قد تحتاج إلى إصدارات متعددة. واستضافة كل برنامج بمفرده أكثر تكلفة ؛ الجمع بين Apache و PHP-FPM أقل تكلفة.

بالنسبة للمواقع الإلكترونية التي يتم الاتجار بها بكثافة، يوفر PHP-FPM بالإضافة إلى ذلك خيارات تكوين لتسجيل stderr و stdout، وإعادة تشغيل الطوارئ، وتفريخ العملية التكيفية. في الواقع، واحدة من أعظم الأكوام لاستضافة تطبيقات PHP، خاصة من حيث الأداء، هي Apache مع PHP-FPM.

ستقوم بإعداد موقعين PHP على حالة واحدة في هذا البرنامج التعليمي. سيكون لكل موقع ويب مجال خاص به ويستخدم نسخة PHP مختلفة. الأول سيطلق PHP 8.0 في web1.yourdomain.com. والثاني سينشر PHP 7.4 في web2.yourdomain.com.

متطلبات

  • خادم سينت أو إس 7.
  • تم إعداد وتهيئة خادم الويب Apache.
  • تم تكوين اسم النطاق للإشارة إلى الخادم الخاص بنا.

الخطوة 1: تثبيت إصدارات PHP و Apache

أولاً، سنقوم بتثبيت epel repo ثم تثبيت Apache بالأوامر التالية.

$ sudo yum install epel-release -y
$ sudo yum install httpd

بعد إعداد Apache، سنقوم بتثبيت مستودع Remi ثم الإصدارين 80 و 7.4 من PHP.

$ sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
$ sudo yum install yum-utils 
$ sudo yum install php80 php74
$ sudo yum install php80-php-fpm php74-php-fpm

كلا الإصدارين من PHP يستمعان افتراضيًا في المنفذ 9000. ومع ذلك، نرغب في تشغيل نسختين في وقت واحد في هذا البرنامج التعليمي. وبالتالي، دعونا نعين منفذين جديدين:

يمكنك القيام بذلك عن طريق فتح محرر النص المفضل لديك، والذهاب إلى /etc/opt/remi/php80/php-fpm.d/www.conf, وتغيير كل حالة 9000 إلى 9080. كرر نفس الشيء لـ /etc/opt/remi/php74/php-fpm.d/www.conf, استبدال 9000 ب 9074 هذه المرة, ثم حفظ وإغلاق الملف. كبديل، يمكنك إنشاء البدائل باستخدام هاتين الأوامر:

$ sudo sed -i 's/:9000/:9080/' /etc/opt/remi/php80/php-fpm.d/www.conf
$ sudo sed -i 's/:9000/:9074/' /etc/opt/remi/php74/php-fpm.d/www.conf

كل خدمة من خدمات PHP الخاصة بك لديها الآن منفذ فريد تم تخصيصه لها. ومع ذلك، لكي تعمل هذه التغييرات، يجب عليك إضافة المنافذ إلى إعداد SELinux الخاص بك.

يتم تشغيل تعزيز الأمن لينكس (Security Enhanced Linux)، أو SELinux باختصار، افتراضيًا في CentOS 7. المنافذ الجديدة 9080 و 9074 يجب إضافتها إلى قاعدة بيانات SELinux الخاصة بك وتخصيصها لخدماتك httpd حتى تعمل تطبيقاتك. تطبيق semanage الأمر بالإجراء التالي:

$ sudo semanage port -a -t http_port_t -p tcp 9080
$ sudo semanage port -a -t http_port_t -p tcp 9074

يمكن الآن بدء خدمات php-fpm في منافذ مختلفة.

أنت الآن مستعد لبدء وتمكين خدمات PHP الخاصة بك. ابدأ بك php80-php-fpm وتمكينها من البدء في التمهيد:

$ sudo systemctl start php80-php-fpm
$ sudo systemctl enable php80-php-fpm

تحقق من حالة خدمة php80-php-fpm الخاصة بك بعد ذلك:

$ sudo systemctl status php80-php-fpm
[root@centos7 ~]# sudo systemctl status php80-php-fpm
● php80-php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php80-php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-08-12 07:16:12 EDT; 14min ago
 Main PID: 65544 (php-fpm)
   Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php80-php-fpm.service
           ├─65544 php-fpm: master process (/etc/opt/remi/php80/php-fpm.conf)
           ├─65545 php-fpm: pool www
           ├─65546 php-fpm: pool www
           ├─65547 php-fpm: pool www
           ├─65548 php-fpm: pool www
           └─65549 php-fpm: pool www
Aug 12 07:16:12 centos7.linuxvmimages.local systemd[1]: Starting The PHP FastCGI Process Manager...
Aug 12 07:16:12 centos7.linuxvmimages.local systemd[1]: Started The PHP FastCGI Process Manager.

أنت الآن مستعد لبدء وتمكين خدمات PHP الخاصة بك. ابدأ بخدمتك php74-php-fpm وقم بتمكينها من البدء من التمهيد:

$ sudo systemctl start php74-php-fpm
$ sudo systemctl enable php74-php-fpm

تحقق من حالة خدمة php74-php-fpm الخاصة بك بعد ذلك:

$ sudo systemctl status php74-php-fpm
[root@centos7 ~]# sudo systemctl status php74-php-fpm
● php74-php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php74-php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-08-12 07:16:20 EDT; 16min ago
 Main PID: 65556 (php-fpm)
   Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php74-php-fpm.service
           ├─65556 php-fpm: master process (/etc/opt/remi/php74/php-fpm.conf)
           ├─65557 php-fpm: pool www
           ├─65558 php-fpm: pool www
           ├─65559 php-fpm: pool www
           ├─65560 php-fpm: pool www
           └─65561 php-fpm: pool www
Aug 12 07:16:19 centos7.linuxvmimages.local systemd[1]: Starting The PHP FastCGI Process Manager...
Aug 12 07:16:20 centos7.linuxvmimages.local systemd[1]: Started The PHP FastCGI Process Manager.

الخطوة 2: إعداد ملفات لكل من الموقعين

في هذا القسم، لكل موقع من موقعيك، ستنشئ صفحة فهرس ودليل جذر مستند.

أولاً نقوم بإنشاء أدلة لمواقعنا الإلكترونية web1.yourdomain.com و web2.yourdomain.com.

$ sudo mkdir /var/www/web1.yourdomain.com
$ sudo mkdir /var/www/web2.yourdomain.com

مستخدم ومجموعة Apache هي الافتراضية لخادم الويب Apache. لذلك، يجب أن يمتلكوا أيضًا /var/www/ وجميع ملفاتها وملفاتها الفرعية. قم بتشغيل الأوامر التالية للتأكد من امتلاك مجلدات جذر موقع الويب الخاص بك والحصول على الأذونات المناسبة:

$ sudo chown -R apache:apache /var/www/web1.yourdomain.com
$ sudo chown -R apache:apache /var/www/web2.yourdomain.com
$ sudo chmod -R 755 /var/www/web1.yourdomain.com
$ sudo chmod -R 755 /var/www/web2.yourdomain.com

مجلدي موقع الويب الخاص بك مملوكان الآن لمستخدم Apache والمجموعة بفضل أمر chown. يقوم أمر chmod بتعديل أذونات المستخدم والمجموعة والأشخاص الآخرين.

الخطوة التالية هي إنشاء ملف info.php في دليل الجذر لكل موقع ويب. سيعرض هذا معلومات إصدار PHP لكل موقع ويب. بدءا من الويب 1.

$ sudo nano /var/www/web1.yourdomain.com/info.php

يضاف السطر التالي:

<?php phpinfo(); ?>

حفظ ونسخ الملف، في الموقع الثاني:

$ sudo cp /var/www/web1.yourdomain.com/info.php /var/www/web2.yourdomain.com/info.php

الخطوة 3: تكوين اعداداتي اباتشي لكلا الموقعين

ستقوم ببناء ملفين افتراضيين لتكوين المضيف في هذه الخطوة. سيتمكن موقعك من العمل بشكل متزامن مع إصدارين متميزين من PHP بفضل ذلك.

من المهم إنشاء ملف مضيف افتراضي مع التوجيهات المناسبة حتى تتمكن Apache من تقديم هذا المحتوى. داخل الدليل /etc/httpd/conf.d/, وينبغي إنشاء ملفين افتراضيين جديدين لتكوين المضيف.

أولاً، قم بإنشاء ملف تكوين مضيف افتراضي جديد لموقع الويب web1.yourdomain.com. هنا، ستوجه Apache لتقديم محتوى باستخدام PHP 8.0:

$ sudo nano /etc/httpd/conf.d/web1.yourdomain.com.conf

أضف الرمز التالي

<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName web1.yourdomain.com
     DocumentRoot /var/www/web1.yourdomain.com
     DirectoryIndex info.php
     SetHandler "proxy:fcgi://127.0.0.1:9080"
     ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
     AddHandler php80-fcgi .php
     Action php80-fcgi /cgi-bin/php80.fcgi
     ErrorLog /var/log/httpd/web1.yourdomain.com_error.log
     CustomLog /var/log/httpd/web1.yourdomain.com_access.log combined
</VirtualHost>

دعونا نفعل نفس الشيء للخادم الثاني

$ sudo nano /etc/httpd/conf.d/web2.yourdomain.com.conf
<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName web2.yourdomain.com
     DocumentRoot /var/www/web2.yourdomain.com
     DirectoryIndex info.php
     SetHandler "proxy:fcgi://127.0.0.1:9074"
     ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
     AddHandler php74-fcgi .php
     Action php74-fcgi /cgi-bin/php74.fcgi
     ErrorLog /var/log/httpd/web2.yourdomain.com_error.log
     CustomLog /var/log/httpd/web2.yourdomain.com_access.log combined
</VirtualHost>

عندما تنتهي، احفظ الملف وأغلقه. بعد ذلك، ابحث عن أي أخطاء بناء في ملف تكوين أباتشي:

$ sudo apachectl configtest
[root@centos7 ~]# sudo apachectl configtest
Syntax OK

أخيرًا، لتطبيق تعديلاتك، أعد تشغيل خدمة Apache:

$ sudo systemctl restart httpd

دعنا نختبر كل موقع بعد إعداد Apache لخدمته للتأكد من تثبيت إصدارات PHP المناسبة.

الخطوة 4: اختبار مواقعنا الإلكترونية

افتح متصفح الويب الخاص بك وقم بزيارة كلا الموقعين http://web1.yourdomain.com و http://web2.yourdomain.com. سترى صفحتين تشبهان:

http://web1.yourdomain.com/

web1.yourdomain.com php_info Redhat RHEL

http://web2.yourdomain.com/

web2.yourdomain.com php_info Redhat RHEL

قم بإزالة ملفات info.php بعد اختبار مواقع الويب الخاصة بك. إنها تمثل مشكلة أمنية لأنها تمنح المستخدمين غير المصرح لهم الوصول إلى المعلومات الخاصة حول الخادم الخاص بك. تخلص من الملفات:

$ sudo rm -rf /var/www/web1.yourdomain.com/info.php
$ sudo rm -rf /var/www/web2.yourdomain.com/info.php

يمكنك الآن تشغيل موقعين على الويب باستخدام إصدارين متميزين من PHP على خادم CentOS 7 واحد. لكن PHP-FPM ليس فقط لهذا التطبيق الواحد.

خلاصة

الآن بعد أن تم دمج المضيفين الافتراضيين و PHP-FPM، قد يخدم خادم واحد عددًا من مواقع الويب وإصدارات PHP. قوة المعالجة لمثلك هي القيد الحقيقي الوحيد على كمية مواقع PHP وإصدارات PHP التي يمكن لخادم Apache الخاص بك دعمها.

LEAVE A COMMENT