Serveur Web local sous Linux, avec élévation d'hôte automatique et changement de version PHP

Très probablement, certaines parties de cet article sont déjà familières à de nombreux habrozhitel, mais dans le cadre de l'achat d'un nouvel ordinateur portable fonctionnel, j'ai décidé de rassembler tous les grains ensemble et d'organiser un outil pratique pour le développement. Je dois souvent travailler avec de nombreux petits projets, avec différentes versions de PHP, souvent traduire d'anciens projets vers de nouvelles versions. Dans un passé lointain, lorsque j'étais un utilisateur Windows, j'utilisais OpenServer. Mais avec le passage à Linux, il me manquait la simplicité de créer les hôtes et de changer les versions qui s'y trouvaient. Par conséquent, j'ai dû faire une solution encore plus pratique sur Linux =)

Buts


  1. Utiliser le logiciel actuel au moment de la rédaction
  2. Pour distinguer les domaines locaux, nous utiliserons un domaine .loc spécial
  3. Nous implémentons le changement de version PHP via un sous - domaine en utilisant fast-cgi
  4. Création d'hôte automatique avec vhost_alias et dnsmasq

Qu'avons-nous finalement? Lors du passage à
56.test.loc
Apache sera lancé avec PHP version 5.6.36
/ var / www / test.loc /public_html/index.php
Modification du sous-domaine en
72 .test.loc
le même fichier sera lancé mais déjà avec PHP version 7.2.7

Les autres versions sont livrées de la même manière que celle décrite ci-dessous.

Pour créer un autre site, il suffit de créer dans le dossier / var / www / a avec la fin du .loc , à l'intérieur duquel devrait se trouver le dossier public_html qui est la racine du site

C'est tout. Comme sans tourment supplémentaire, redémarrage et modification des configurations, nous avons un système automatique pour travailler avec les sites.

Je vais tester tout cela sur LinuxMint19, il est basé sur Ubuntu18.04, donc tout sera pareil.

Tout d'abord, nous fournirons les packages nécessaires

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

Nous définissons Postfix comme un chignon, comme une solution simple (dans l'assistant d'installation, sélectionnez tout par défaut) pour envoyer du courrier depuis la machine locale.

Puisqu'il s'agit d'un développement local et que je suis le seul utilisateur. Il est plus pratique pour moi de transférer le dossier du projet vers mon répertoire personnel. Il se monte avec un lecteur séparé et migre lorsque je réinstalle le système. Le moyen le plus simple est de créer un lien, vous n'avez alors pas besoin de changer le chemin dans les paramètres et le chemin est familier à tout le monde.

Nous copions le dossier créé par l'Apache dans le répertoire personnel, créons un lien à sa place, sans oublier de changer l'utilisateur en lui-même et d'échanger des groupes avec l'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 

Créez un dossier dans lequel nous collecterons les sources PHP pour différentes versions

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

Nous avons également besoin de dossiers pour les scripts CGI

 sudo mkdir /var/www/cgi-bin 

Et dossier d'exécution pour les mêmes scripts, avec droits

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


Et comme le répertoire que nous avons est en RAM, nous ajouterons sa création au démarrage du système, pour cela nous l’ ajouterons à /etc/tmpfiles.d/fcgid.conf
  #Type Path Mode UID GID Age Argument d /var/run/mod_fcgid 0755 www-data www-data - - 


Mon dnsmasq-base vient de la boîte, sinon il peut toujours être livré.
 sudo apt install dnsmasq 

Ajoutez une règle à sa configuration. Vous pouvez trouver le fichier de configuration dnsmasq.conf comme ceci
 sudo updatedb locate dnsmasq.conf 

Ou si, comme le mien, il fait partie de NetworkManager, créez un nouveau fichier de configuration dans /etc/NetworkManager/dnsmasq.d/local.conf
Ajoutez-y une ligne pour rediriger notre domaine local vers la machine locale.

 address=/loc/127.0.0.1 

Vous devez également activer les modules Apache nécessaires

 sudo a2enmod fcgid vhost_alias actions rewrite 

La préparation préliminaire est terminée, nous procédons à l'assemblage des différentes versions locales de PHP. Pour chaque version de PHP, effectuez les 4 étapes suivantes. Par exemple, 5.6.36

1. Téléchargez le code source de la version souhaitée et décompressez-les

 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. Nous collectons la version nécessaire de PHP à partir des sources et la mettons dans /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. Créez un CGI pour gérer cette version dans /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. Rendre le fichier exécutable

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

5. Ajoutez une action pour gérer chaque version dans /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. Ajoutez une règle pour traiter chaque version dans /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> 

Eh bien, c'est tout. Il ne reste plus qu'à redémarrer apache et dnsmasq et utiliser

 sudo service apache2 restart sudo service network-manager restart 

Mettez dans le nouveau site de test index.php phpinfo () et vérifiez que tout fonctionne.

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


All Articles