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
- Utiliser le logiciel actuel au moment de la rédaction
- Pour distinguer les domaines locaux, nous utiliserons un domaine .loc spécial
- Nous implémentons le changement de version PHP via un sous - domaine en utilisant fast-cgi
- 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.confAjoutez-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.361. 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
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.