خادم الويب المحلي في Linux ، مع رفع المضيف تلقائيًا وتبديل إصدار PHP

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

الأهداف


  1. استخدم البرنامج الحالي في وقت كتابة هذا التقرير
  2. للتمييز بين المجالات المحلية ، سنستخدم نطاقًا خاصًا .loc
  3. نقوم بتطبيق إصدار PHP للتبديل من خلال نطاق فرعي باستخدام fast-cgi
  4. إنشاء المضيف التلقائي مع 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.36

1. قم بتنزيل الكود المصدري للإصدار المرغوب وفكها

 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 #Action application/x-httpd-php-7.2.7 /cgi-bin/php-7.2.7.fcgi #AddType application/x-httpd-php-7.2.7 .php FcgidIPCDir /var/run/mod_fcgid FcgidProcessTableFile /var/run/mod_fcgid/fcgid_shm FcgidConnectTimeout 20 <IfModule mod_mime.c> AddHandler fcgid-script .fcgi </IfModule> </IfModule> 

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 () وتحقق من أن كل شيء يعمل.

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


All Articles