على الأرجح ، بعض أجزاء هذه المقالة مألوفة بالفعل للعديد من habrozhitel ، ولكن فيما يتعلق بشراء جهاز كمبيوتر محمول جديد يعمل ، قررت جمع جميع الحبوب معًا وتنظيم أداة مناسبة للتطوير. غالبًا ما يتعين علي العمل مع العديد من المشاريع الصغيرة ، مع إصدارات مختلفة من PHP ، غالبًا ما تترجم المشاريع القديمة إلى إصدارات جديدة. في الماضي البعيد ، عندما كنت مستخدم Windows ، كنت أستخدم OpenServer. ولكن مع التحول إلى Linux ، افتقرت إلى بساطة إنشاء المضيفين وتبديل الإصدارات الموجودة فيه. لذلك ، كان عليّ عمل حل أكثر ملاءمة على Linux =)
الأهداف
- استخدم البرنامج الحالي في وقت كتابة هذا التقرير
- للتمييز بين المجالات المحلية ، سنستخدم نطاقًا خاصًا .loc
- نقوم بتطبيق إصدار PHP للتبديل من خلال نطاق فرعي باستخدام fast-cgi
- إنشاء المضيف التلقائي مع vhost_alias و dnsmasq
ماذا لدينا في النهاية. عند التبديل إلى
56.test.loc
سيتم إطلاق Apache مع PHP الإصدار 5.6.36
/ var / www / test.loc /public_html/index.php
تغيير النطاق الفرعي إلى
72. الاختبار. الموقع
سيتم إطلاق نفس الملف ولكن بالفعل مع إصدار PHP 7.2.7
يتم تسليم الإصدارات الأخرى بنفس الطريقة الموضحة أدناه.
لإنشاء موقع آخر ، ما عليك سوى إنشاء مجلد في
/ var / www / مع نهاية
.loc ، والتي يجب أن يكون داخل المجلد
public_html الذي يمثل جذر الموقع
هذا كل شئ. كما هو الحال مع عدم وجود عذاب إضافي وإعادة تشغيل وتحرير التكوينات ، لدينا نظام تلقائي للعمل مع المواقع.
سأختبر كل هذا على LinuxMint19 ، وهو يعتمد على Ubuntu18.04 ، لذا سيكون كل شيء كما هو.
أولاً ، سنقوم بتوفير الحزم اللازمة
sudo apt update sudo apt install build-essential pkg-config libxml2-dev libfcgi-dev apache2 libapache2-mod-fcgid postfix
قمنا بتعيين
Postfix كخبز ، كحل بسيط (في معالج التثبيت ، حدد كل شيء افتراضيًا) لإرسال البريد من الجهاز المحلي.
لأن هذا هو تطوير محلي وأنا المستخدم الوحيد. من الأنسب بالنسبة لي نقل مجلد المشروع إلى دليل بيتي. يتم تثبيته بمحرك أقراص منفصل ويتم ترحيله عند إعادة تثبيت النظام. أسهل طريقة هي إنشاء رابط ، فأنت لست بحاجة إلى تغيير المسار في الإعدادات والمسار مألوف للجميع.
نقوم بنسخ المجلد الذي تم إنشاؤه بواسطة Apache في الدليل الرئيسي ، وإنشاء ارتباط في مكانه ، دون نسيان تغيير المستخدم إلى نفسه وتبادل المجموعات مع Apache.
sudo mv /var/www/ ~/www sudo ln -s ~/www /var/www sudo chown $USER:$USER -R ~/www sudo usermod -a -G www-data $USER sudo usermod -a -G $USER www-data
قم بإنشاء مجلد سنجمع فيه مصادر PHP لإصدارات مختلفة
sudo mkdir /usr/local/src/php-build
نحتاج أيضًا مجلدات لنصوص CGI
sudo mkdir /var/www/cgi-bin
ومجلد وقت التشغيل لنفس البرامج النصية ، مع الحقوق
sudo mkdir /var/run/mod_fcgid sudo chmod 777 /var/run/mod_fcgid
وبما أن الدليل الموجود في ذاكرة الوصول العشوائي ، سنضيف إنشائه عند بدء تشغيل النظام ، لذلك
سنضيفه إلى
/etc/tmpfiles.d/fcgid.conf #Type Path Mode UID GID Age Argument d /var/run/mod_fcgid 0755 www-data www-data - -
تأتي
قاعدة dnsmasq الخاصة بي من الصندوق ، إذا لم يكن كذلك ، فيمكن تسليمها دائمًا.
sudo apt install dnsmasq
أضف قاعدة لتكوينه.
يمكنك العثور على ملف التكوين
dnsmasq.conf مثل هذا
sudo updatedb locate dnsmasq.conf
أو إذا كان ، مثل
ملفي ، جزءًا من NetworkManager ،
فقم بإنشاء ملف تكوين جديد في
/etc/NetworkManager/dnsmasq.d/local.confأضف خطًا إليه لإعادة توجيه نطاقنا المحلي إلى الجهاز المحلي.
address=/loc/127.0.0.1
تحتاج أيضًا إلى تمكين وحدات Apache الضرورية
sudo a2enmod fcgid vhost_alias actions rewrite
تم الانتهاء من التحضير الأولي ، ننتقل إلى تجميع الإصدارات المحلية المختلفة من PHP.
لكل إصدار من PHP ، قم بالخطوات الأربع التالية. على سبيل المثال
5.6.361. قم بتنزيل الكود المصدري للإصدار المرغوب وفكها
cd /usr/local/src/php-build sudo wget http://pl1.php.net/get/php-5.6.36.tar.bz2/from/this/mirror -O php-5.6.36.tar.bz2 sudo tar jxf php-5.6.36.tar.bz2
2. نجمع النسخة الضرورية من PHP من المصدر ونضعها في
/opt/php-5.6.36 sudo mkdir /opt/php-5.6.36 cd php-5.6.36 sudo ./configure --prefix=/opt/php-5.6.36 --with-config-file-path=/opt/php-5.6.36 --enable-cgi sudo make sudo make install sudo make clean
3. قم بإنشاء CGI للتعامل مع هذا الإصدار في
/var/www/cgi-bin/php-5.6.36.fcgi #!/bin/bash PHPRC=/opt/php-5.6.36/php.ini PHP_CGI=/opt/php-5.6.36/bin/php-cgi PHP_FCGI_CHILDREN=8 PHP_FCGI_MAX_REQUESTS=3000 export PHPRC export PHP_FCGI_CHILDREN export PHP_FCGI_MAX_REQUESTS exec /opt/php-5.6.36/bin/php-cgi
4. جعل الملف قابلاً للتنفيذ
sudo chmod +x /var/www/cgi-bin/php-5.6.36.fcgi
5. أضف إجراءً للتعامل مع كل إصدار في
/etc/apache2/mods-available/fcgid.conf <IfModule mod_fcgid.c> AddHandler fcgid-script fcg fcgi fpl Action application/x-httpd-php-5.6.36 /cgi-bin/php-5.6.36.fcgi AddType application/x-httpd-php-5.6.36 .php
6. أضف قاعدة لمعالجة كل نسخة في
/etc/apache2/sites-available/000-default.conf <VirtualHost *:80> # ServerNam ServerAlias *.loc # CGI ScriptAlias /cgi-bin /var/www/cgi-bin # DocumentRoot VirtualDocumentRoot /var/www/%2+/public_html # <Directory /var/www/*.loc/> Options +ExecCGI -Indexes AllowOverride All Order allow,deny Allow from all <FilesMatch \.php$> # <If "%{SERVER_NAME} =~ /56\..*?\.loc/"> SetHandler application/x-httpd-php-5.6.36 </If> <Else> # , , SetHandler application/x-httpd-php-7.2.7 </Else> </FilesMatch> </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
حسنًا ، هذا كل شيء. يبقى فقط لإعادة تشغيل اباتشي و dnsmasq والاستخدام
sudo service apache2 restart sudo service network-manager restart
ضع في
index.php موقع الاختبار الجديد
phpinfo () وتحقق من أن كل شيء يعمل.