إصدارات متعددة PHP المضيف باستخدام عامل الميناء

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

الصورة

فيما يلي سوف أصف الحل العملي لـ Ubuntu 18 ، حيث يتم استخدام حزمة Nginx + PHP-FPM كمكدس. يتم حل هذا الحل بسهولة: تأخذ الحاوية التي تحتوي على PHP-FPM 300 ميغابايت فقط في الذاكرة ، ويمكنك إضافة حاويات مع إصدارات أخرى من المترجم الشفهي بثلاثة أوامر (أو التشغيل ، حسب تفضيلاتك). الإضافة الثانية لهذا الحل هي أن المطور لا يحتاج إلى تبديل خادم الويب بين المترجمين الفوريين ، حيث إنهم متباعدون بالفعل في حاويات مختلفة (رمز التطبيق هو نفسه).

إضافة: بناءً على التعليقات ، لم يفهم بعض القراء ما هي الحالات التي يكون الحل الموصوف مناسبًا لها. لذلك ، أود أن ألفت الانتباه إلى حقيقة أن كل ما يلي مخصص للاستخدام فقط على محطة عمل المطور ، وقد يكون أيضًا مناسبًا لخادم المسرح مع بعض التحفظات.

لذلك دعونا نبدأ ...

1. تثبيت عامل الميناء


sudo apt update sudo apt install ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt update sudo apt install docker-ce 

2. تثبيت الحاويات مع الإصدارات الضرورية من PHP


كمثال على إنشاء بيئة عمل ، تم استخدام إصدارات PHP 7.1 و 7.2 من مستودع PHP Docker الرسمي. عن طريق القياس ، إذا كان لديك صورة ، يمكنك تثبيت أي إصدار من PHP الذي تريده:

 sudo docker pull php:7.1.25-fpm-stretch sudo docker create --name=fpm71 -p 127.0.0.1:9071:9000 -v /var/www:/var/www php:7.1.25-fpm-stretch sudo docker start fpm71 sudo docker pull php:7.2.13-fpm-stretch sudo docker create --name=fpm72 -p 127.0.0.1:9072:9000 -v /var/www:/var/www php:7.2.13-fpm-stretch sudo docker start fpm72 

PHP-FPM يعمل على المنفذ 9000 بشكل افتراضي. عند إنشاء الصور ، قمنا بنشر منافذ الحاويات رقم 9000 لمنافذ الجهاز المضيف 9071 و 9072 المجانية (يتم أخذ الأرقام بشكل تعسفي من النطاق غير المميز). علاوة على ذلك ، سنقوم بإرسال طلبات معالجة PHP إلى هذه المنافذ (معلمة fastcgi_pass في تكوين المضيف الظاهري لـ Nginx).

كان من الضروري أيضًا رمي دليل المشروع داخل الحاويات (/ var / www) ، وإلا يقسم PHP-FPM أنه لا يرى ملفات (إذا كنت تعرف كيفية جعل هذه اللحظة أفضل / أكثر صحة ، فاكتب في التعليقات).

تحقق من تشغيل الحاويات ومن نشر المنافذ بشكل صحيح:

 sudo docker ps -a sudo netstat -lpn 


3. إعداد البيئة للمضيفين الظاهري


أضف الأسطر إلى / etc / hosts:
 127.0.0.1 project.local.php71 ### php 7.1 127.0.0.1 project.local.php72 ### php 7.2 

إنشاء دليل للمشروع:

 sudo mkdir -p /var/www/project.local echo '<?php phpinfo(); ?>' | sudo tee /var/www/project.local/index.php 

أخذت اسم المشروع (project.local) والمضيفين الظاهريين (project.local.php71 / 72) ، ولكن يمكنك استخدام أسماء ملائمة لك (فقط تذكر تغيير إعدادات المضيفين الظاهريين).

في البداية ، تم وضع أمر phpinfo واحد فقط في ملف الفهرس ، بعد إعداد أداء النظام والتحقق منه ، سوف تحتاج إلى استبدال index.php بالأمر المستخدم في المشروع.

4. تثبيت nginx وتكوين المضيفين الظاهري


 sudo apt install nginx 

نقوم بإنشاء الملف /etc/nginx/sites-available/project.local.php71 مع وصف أول مضيف افتراضي (سيتم استخدامه للتحقق من تشغيل المشروع بموجب PHP v.7.1):

 server { listen 80; server_name project.local.php71; index index.php; root /var/www/project.local; location / { try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9071; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 

وبالمثل ، فإن الملف /etc/nginx/sites-available/project.local.php72 للمضيف الظاهري الثاني:

 server { listen 80; server_name project.local.php72; index index.php; root /var/www/project.local; location / { try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9072; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 

الآن نقوم بعمل ارتباطات إلى التكوينات أعلاه للمضيفات الظاهرية ونزيل Nginx:

 cd /etc/nginx/sites-enabled sudo ln -s ../sites-available/project.local.php71 sudo ln -s ../sites-available/project.local.php72 sudo systemctl reload nginx 

5. تحقق


 curl --silent http://project.local.php71/index.php | grep -o "PHP Version [0-9\.]\{1,\}" curl --silent http://project.local.php72/index.php | grep -o "PHP Version [0-9\.]\{1,\}" 

نتيجة لذلك ، يجب أن نحصل على إصدار من PHP (نتيجة لمعالجة أمر phpinfo بواسطة مترجمين من إصدارات مختلفة).

الآن يبقى فقط تحميل مشروعك على المجلد /var/www/project.local ويمكنك التحقق من تشغيله في مترجم PHP 7.1 على الموقع http: //project.local.php71 و PHP 7.2 على الموقع http: //project.local.php71 .

مواد إضافية
1. كاملة دليل العملي عامل الميناء

Source: https://habr.com/ru/post/ar435940/


All Articles