غالبًا ، يواجه مطورو 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
إنشاء دليل للمشروع:
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.
كاملة دليل العملي عامل الميناء