Lokaler Webserver unter Linux mit automatischem Host-Raising und PHP-Versionswechsel

Höchstwahrscheinlich sind einige Teile dieses Artikels vielen Habrozhitel bereits bekannt, aber im Zusammenhang mit dem Kauf eines neuen funktionierenden Laptops habe ich beschlossen, alle Körner zusammen zu sammeln und ein praktisches Tool für die Entwicklung zu organisieren. Ich muss oft mit vielen kleinen Projekten arbeiten, mit verschiedenen Versionen von PHP, oft übersetze ich alte Projekte in neue Versionen. In der fernen Vergangenheit, als ich ein Windows-Benutzer war, habe ich OpenServer verwendet. Bei der Umstellung auf Linux fehlte mir jedoch die Einfachheit, die Hosts zu erstellen und die darin enthaltenen Versionen zu wechseln. Deshalb musste ich unter Linux eine noch bequemere Lösung finden =)

Ziele


  1. Verwenden Sie zum Zeitpunkt des Schreibens die aktuelle Software
  2. Zur Unterscheidung zwischen lokalen Domänen verwenden wir eine spezielle .loc- Domäne
  3. Wir implementieren das Umschalten der PHP-Version über eine Subdomain mit fast-cgi
  4. Automatische Hosterstellung mit vhost_alias und dnsmasq

Was haben wir am Ende? Beim Umschalten auf
56.test.loc
Apache wird mit PHP Version 5.6.36 gestartet
/ var / www / test.loc /public_html/index.php
Ändern der Subdomain in
72 .test.loc
Die gleiche Datei wird gestartet, jedoch bereits mit PHP Version 7.2.7

Andere Versionen werden auf die gleiche Weise wie unten beschrieben geliefert.

Um eine andere Site zu erstellen, erstellen Sie einfach in / var / www / a einen Ordner mit der Endung .loc , in dem sich der Ordner public_html befinden sollte, der das Stammverzeichnis der Site darstellt

Das ist alles Wie ohne zusätzliche Qualen, Neustarts und das Bearbeiten von Konfigurationen haben wir ein automatisches System für die Arbeit mit Websites.

Ich werde das alles auf LinuxMint19 testen, es basiert auf Ubuntu18.04, also wird alles gleich sein.

Zunächst liefern wir die notwendigen Pakete

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

Wir legen Postfix als Brötchen fest, als einfache Lösung (wählen Sie im Installationsassistenten standardmäßig alles aus), um E-Mails vom lokalen Computer zu senden.

Da dies eine lokale Entwicklung ist und ich der einzige Benutzer bin. Es ist für mich bequemer, den Projektordner in mein Ausgangsverzeichnis zu übertragen. Es wird mit einem separaten Laufwerk bereitgestellt und migriert, wenn ich das System neu installiere. Am einfachsten ist es, einen Link zu erstellen. Dann müssen Sie den Pfad in den Einstellungen nicht ändern, und der Pfad ist allen bekannt.

Wir kopieren den vom Apache erstellten Ordner in das Home-Verzeichnis, erstellen an seiner Stelle einen Link, ohne zu vergessen, den Benutzer in sich selbst zu ändern und Gruppen mit dem Apache auszutauschen.

 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 

Erstellen Sie einen Ordner, in dem wir PHP-Quellen für verschiedene Versionen sammeln

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

Außerdem benötigen wir Ordner für CGI-Skripte

 sudo mkdir /var/www/cgi-bin 

Und Laufzeitordner für dieselben Skripte mit Rechten

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


Und da sich das Verzeichnis im RAM befindet, fügen wir es beim Systemstart hinzu. Dazu fügen wir es zu /etc/tmpfiles.d/fcgid.conf hinzu
  #Type Path Mode UID GID Age Argument d /var/run/mod_fcgid 0755 www-data www-data - - 


Meine dnsmasq-Basis kommt aus der Box, wenn nicht, kann sie immer geliefert werden.
 sudo apt install dnsmasq 

Fügen Sie seiner Konfiguration eine Regel hinzu. Sie finden die Konfigurationsdatei dnsmasq.conf wie folgt
 sudo updatedb locate dnsmasq.conf 

Oder wenn es wie meins Teil von NetworkManager ist, erstellen Sie eine neue Konfigurationsdatei in /etc/NetworkManager/dnsmasq.d/local.conf
Fügen Sie eine Zeile hinzu, um unsere lokale Domäne auf den lokalen Computer umzuleiten.

 address=/loc/127.0.0.1 

Sie müssen auch die erforderlichen Apache-Module aktivieren

 sudo a2enmod fcgid vhost_alias actions rewrite 

Nachdem die Vorbereitungen abgeschlossen sind, fahren wir mit der Zusammenstellung verschiedener lokaler Versionen von PHP fort. Führen Sie für jede PHP-Version die folgenden 4 Schritte aus. Zum Beispiel 5.6.36

1. Laden Sie den Quellcode der gewünschten Version herunter und entpacken Sie sie

 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. Wir sammeln die erforderliche Version von PHP aus dem Quellcode und fügen sie in /opt/php-5.6.36 ein

 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. Erstellen Sie in /var/www/cgi-bin/php-5.6.36.fcgi ein CGI für diese Version

 #!/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. Die Datei ausführbar machen

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

5. Fügen Sie in /etc/apache2/mods-available/fcgid.conf eine Aktion für jede Version hinzu

 <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. Fügen Sie in /etc/apache2/sites-available/000-default.conf eine Regel für die Verarbeitung jeder Version hinzu

 <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> 

Nun, das ist es. Es bleibt nur Apache und DNSMASQ neu zu starten und zu verwenden

 sudo service apache2 restart sudo service network-manager restart 

Geben Sie in die neue Test-Site index.php phpinfo () ein und überprüfen Sie, ob alles funktioniert.

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


All Articles