Servidor web local bajo Linux, con aumento automático de host y cambio de versión de PHP

Lo más probable es que algunas partes de este artículo ya sean familiares para muchos habrozhitel, pero en relación con la compra de una nueva computadora portátil que funciona, decidí reunir todos los granos y organizar una herramienta conveniente para el desarrollo. A menudo tengo que trabajar con muchos proyectos pequeños, con diferentes versiones de PHP, a menudo traduzco proyectos antiguos a nuevas versiones. En el pasado distante, cuando era usuario de Windows, usaba OpenServer. Pero con el cambio a Linux, carecía de la simplicidad de crear los hosts y cambiar las versiones que estaban en él. Por lo tanto, tuve que hacer una solución aún más conveniente en Linux =)

Objetivos


  1. Use el software actual al momento de escribir
  2. Para distinguir entre dominios locales, utilizaremos un dominio .loc especial
  3. Implementamos el cambio de versión de PHP a través de un subdominio usando fast-cgi
  4. Creación automática de host con vhost_alias y dnsmasq

¿Qué tenemos al final? Al cambiar a
56.test.loc
Apache se lanzará con PHP versión 5.6.36
/ var / www / test.loc /public_html/index.php
Cambiar el subdominio a
72 .test.loc
se lanzará el mismo archivo pero ya con PHP versión 7.2.7

Otras versiones se entregan de la misma manera que se describe a continuación.

Para crear otro sitio, simplemente cree en la carpeta / var / www / a con el .loc final, dentro del cual debe estar la carpeta public_html que es la raíz del sitio

Eso es todo Como sin tormento adicional, reinicios y configuraciones de edición, tenemos un sistema automático para trabajar con sitios.

Probaré todo esto en LinuxMint19, está basado en Ubuntu18.04, por lo que todo será igual.

Primero, suministraremos los paquetes necesarios

sudo apt update sudo apt install build-essential pkg-config libxml2-dev libfcgi-dev apache2 libapache2-mod-fcgid postfix 

Configuramos Postfix como un bollo, como una solución simple (en el asistente de instalación, selecciona todo de forma predeterminada) para enviar correo desde la máquina local.

Dado que este es un desarrollo local y yo soy el único usuario. Es más conveniente para mí transferir la carpeta del proyecto a mi directorio de inicio. Se monta con una unidad separada y migra cuando reinstalo el sistema. La forma más fácil es crear un enlace, entonces no necesita cambiar la ruta en la configuración y la ruta es familiar para todos.

Copiamos la carpeta creada por Apache en el directorio de inicio, creamos un enlace en su lugar, sin olvidar cambiar el usuario a sí mismo e intercambiar grupos con 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 

Cree una carpeta en la que recopilaremos fuentes PHP para diferentes versiones

 sudo mkdir /usr/local/src/php-build 

También necesitamos carpetas para scripts CGI

 sudo mkdir /var/www/cgi-bin 

Y carpeta de tiempo de ejecución para los mismos scripts, con derechos

 sudo mkdir /var/run/mod_fcgid sudo chmod 777 /var/run/mod_fcgid 


Y dado que el directorio que tenemos está en RAM, agregaremos su creación al inicio del sistema, para esto lo agregaremos a /etc/tmpfiles.d/fcgid.conf
  #Type Path Mode UID GID Age Argument d /var/run/mod_fcgid 0755 www-data www-data - - 


Mi dnsmasq-base viene de la caja, si no, siempre se puede entregar.
 sudo apt install dnsmasq 

Agregue una regla a su configuración. Puede encontrar el archivo de configuración dnsmasq.conf como este
 sudo updatedb locate dnsmasq.conf 

O si, como el mío, es parte de NetworkManager, cree un nuevo archivo de configuración en /etc/NetworkManager/dnsmasq.d/local.conf
Agregue una línea para redirigir nuestro dominio local a la máquina local.

 address=/loc/127.0.0.1 

También necesita habilitar los módulos Apache necesarios

 sudo a2enmod fcgid vhost_alias actions rewrite 

Se completa la preparación preliminar, se procede al ensamblaje de varias versiones locales de PHP. Para cada versión de PHP, realice los siguientes 4 pasos. Por ejemplo, 5.6.36

1. Descargue el código fuente de la versión deseada y descomprímalos

 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. Recopilamos la versión necesaria de PHP desde la fuente y la colocamos en /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. Cree un CGI para manejar esta versión en /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. Hacer el archivo ejecutable

 sudo chmod +x /var/www/cgi-bin/php-5.6.36.fcgi 

5. Agregue una acción para manejar cada versión en /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. Agregue una regla para procesar cada versión en /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> 

Bueno, eso es todo. Solo queda reiniciar apache y dnsmasq y usar

 sudo service apache2 restart sudo service network-manager restart 

Coloque el nuevo sitio de prueba index.php phpinfo () y verifique que todo funcione.

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


All Articles