Wechsel PHP-Versionen auf einem Server unter Verwendung von Apache Ubuntu

posted in: Allgemein | 0

Schritt 1 – Installieren von PHP Versionen 7.3 und 7.4 mit PHP-FPM

Nachdem die Voraussetzungen erfüllt sind, installieren Sie nun PHP-Versionen 7.3 und 7.4 sowie PHP-FPM als auch mehrere zusätzliche Erweiterungen. Dazu müssen Sie jedoch zunächst das sury php-Repository zu Ihrem System hinzufügen.

Installieren Sie zunächst mehrere erforderliche Pakete, einschließlich curl, wget und gnupg2:

  • sudo apt-get install curl wget gnupg2 ca-certificates lsb-release apt-transport-https -y

Mit den obigen Paketen können Sie sicher auf das sury php-Repository zugreifen. sury php ist ein Drittanbieter-Repository oder PPA (Personal Package Archive). Es stellt PHP 7.4, 7.3, 7.2, 7.1 und 7.0 für das Debian-Betriebssystem bereit. Außerdem bietet es aktuellere Versionen von PHP als die offiziellen Debian 10-Repositorys und Sie können verschiedene Versionen von PHP im gleichen System installieren.

Als Nächstes importieren Sie den Schlüssel des Pakets:

  • wget https://packages.sury.org/php/apt.gpg
  • sudo apt-key add apt.gpg

Fügen Sie nun das Repository sury php Ihrem System hinzu:

  • echo «deb https://packages.sury.org/php/ $(lsb_release -sc) main» | sudo tee /etc/apt/sources.list.d/php7.list

Aktualisieren Sie das Repository:

  • sudo apt-get update -y

Installieren Sie als Nächstes php7.4, php7.4-fpm, php7.4-mysql, libapache2-mod-php7.4, und libapache2-mod-fcgidmit den folgenden Befehlen:

  • sudo apt-get install php7.4 php7.4-fpm php7.4-mysql libapache2-mod-php7.4 libapache2-mod-fcgid -y
  • php7.4 ist ein Metapaket zur Ausführung von PHP-Anwendungen.
  • php7.4-fpm bietet den Fast Process Manager-Interpreter, der als Daemon ausgeführt wird und Fast/CGI-Anfragen empfängt.
  • php7.4-mysql verbindet PHP mit der MySQL-Datenbank.
  • libapahce2-mod-php7.4 stellt das PHP-Modul für den Apache-Webserver bereit.
  • libapache2-mod-fcgid enthält eine mod_fcgid, die eine Reihe von CGI-Programminstanzen startet, um gleichzeitige Anfragen zu bearbeiten.

Wiederholen Sie den Vorgang für PHP-Version 7.2. Installieren Sie php7.3, php7.3-fpm, php7.3-mysql und libapache2-mod-php7.3.

  • sudo apt-get install php7.3 php7.3-fpm php7.3-mysql libapache2-mod-php7.3 -y

Starten Sie nach Installation beider PHP-Versionen den Dienst php7.4-fpm:

  • sudo systemctl start php7.4-fpm

Überprüfen Sie als Nächstes den Status des php7.4-fpm-Dienstes:

  • sudo systemctl status php7.4-fpm

Sie sehen die folgende Ausgabe:

Output

● php7.4-fpm.service – The PHP 7.0 FastCGI Process Manager

   Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)

   Active: active (running) since Sat 2020-04-04 08:51:47 UTC; 1min 17s ago

     Docs: man:php-fpm7.0(8)

 Main PID: 13016 (php-fpm7.0)

   Status: «Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec»

    Tasks: 3 (limit: 1149)

   Memory: 19.1M

   CGroup: /system.slice/php7.4-fpm.service

           ├─13016 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)

           ├─13017 php-fpm: pool www

           └─13018 php-fpm: pool www

Apr 04 08:51:47 debian10 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager…

Apr 04 08:51:47 debian10 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.

Wiederholen Sie diesen Vorgang nun zum Starten des php7.3-fpm-Dienstes:

  • sudo systemctl start php7.3-fpm

Und überprüfen Sie dann den Status des php7.3-fpm-Dienstes:

  • sudo systemctl status php7.3-fpm

Sie sehen die folgende Ausgabe:

Output

● php7.3-fpm.service – The PHP 7.2 FastCGI Process Manager

   Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)

   Active: active (running) since Sat 2020-04-04 08:52:52 UTC; 1min 32s ago

     Docs: man:php-fpm7.2(8)

  Process: 22207 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.2/fpm/pool.d/www.conf 72 (code=exite

 Main PID: 22204 (php-fpm7.2)

   Status: «Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec»

    Tasks: 3 (limit: 1149)

   Memory: 12.0M

   CGroup: /system.slice/php7.3-fpm.service

           ├─22204 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)

           ├─22205 php-fpm: pool www

           └─22206 php-fpm: pool www

Apr 04 08:52:52 debian10 systemd[1]: Starting The PHP 7.2 FastCGI Process Manager…

Apr 04 08:52:52 debian10 systemd[1]: Started The PHP 7.2 FastCGI Process Manager.

Abschließend müssen Sie mehrere Module aktivieren, damit Ihr Apache2-Dienst mit mehreren PHP-Versionen arbeiten kann:

  • sudo a2enmod actions fcgid alias proxy_fcgi
  • actions wird für die Ausführung von CGI-Skripten verwendet, die auf Medientyp oder Anfragemethode basieren.
  • fcgid ist eine hochleistungsfähige Alternative zu mod_cgi, die eine ausreichende Anzahl von Instanzen des CGI-Programms zur Bearbeitung simultaner Anfragen startet.
  • alias stellt die Abbildung verschiedener Teile des Host-Dateisystems im Dokumentenbaum bereit und dient der URL-Umleitung.
  • proxy_fcgi ermöglicht Apache die Weiterleitung von Anfragen an PHP-FPM.

Starten Sie nun den Apache-Dienst neu, um Ihre Änderungen zu übernehmen:

  • sudo systemctl restart apache2

Zu diesem Zeitpunkt haben Sie zwei PHP-Versionen auf Ihrem Server installiert. Als Nächstes erstellen Sie eine Verzeichnisstruktur für jede Website, die Sie bereitstellen möchten.

Schritt 2 — Erstellen von Verzeichnisstrukturen für beide Websites

In diesem Abschnitt erstellen Sie für beide Websites ein Dokumentenverzeichnis und eine Indexseite.

Erstellen Sie zunächst Dokument-Stammverzeichnisse sowohl für site1.your_domain als auch für site2.your_domain:

  • sudo mkdir /var/www/site1.your_domain
  • sudo mkdir /var/www/site2.your_domain

Standardmäßig wird der Apache-Webserver als Benutzer www-data und als Gruppe www-dataausgeführt. Um sicherzustellen, dass Sie über die korrekte Eigentümerschaften und Berechtigungen für die Stammverzeichnisse Ihrer Website verfügen, führen Sie die folgenden Befehle aus:

  • sudo chown -R www-data:www-data /var/www/site1.your_domain
  • sudo chown -R www-data:www-data /var/www/site2.your_domain
  • sudo chmod -R 755 /var/www/site1.your_domain
  • sudo chmod -R 755 /var/www/site2.your_domain

Erstellen Sie als Nächstes in jedem Stammverzeichnis Ihrer Website eine Datei info.php. Dadurch werden die PHP-Version jeder Website angezeigt. Beginnen Sie mit site1:

  • sudo nano /var/www/site1.your_domain/info.php

Fügen Sie die folgende Zeile hinzu:

/var/www/site1.your_domain/info.php

<?php phpinfo(); ?>

Copy

Speichern und schließen Sie die Datei. Kopieren Sie nun die von Ihnen erstellte Datei info.phpnach site2:

  • sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

Ihr Webserver sollte nun über die Stammverzeichnisse der Dokumente verfügen, die jede Site benötigt, um Besuchern Daten zur Verfügung zu stellen. Als Nächstes konfigurieren Sie Ihren Apache-Webserver, um mit zwei verschiedenen PHP-Versionen zu arbeiten.

Schritt 3 – Konfigurieren von Apache für beide Websites

In diesem Abschnitt erstellen Sie zwei Konfigurationsdateien für virtuelle Hosts. Dadurch können Ihre beiden Websites gleichzeitig mit zwei verschiedenen PHP-Versionen arbeiten.

Damit Apache diesen Inhalt bereitstellen kann, ist es erforderlich, eine virtuelle Host-Datei mit den richtigen Anweisungen zu erstellen. Anstatt die Standardkonfigurationsdatei unter /etc/apache2/sites-available/000-default.conf zu ändern, erstellen Sie zwei neue in dem Verzeichnis /etc/apache2/sites-available.

Erstellen Sie zunächst eine neue Konfigurationsdatei für einen virtuellen Host für die Website site1.your_domain. Hier weisen Sie Apache an, Inhalte mit php7.4 zu rendern:

  • sudo nano /etc/apache2/sites-available/site1.your_domain.conf

Fügen Sie folgenden Inhalt hinzu: Stellen Sie sicher, dass der Website-Verzeichnispfad, der Servername und die PHP-Version mit Ihrer Einrichtung übereinstimmen:

/etc/apache2/sites-available/site1.your_domain.conf

<VirtualHost *:80>

     ServerAdmin admin@site1.your_domain

     ServerName site1.your_domain

     DocumentRoot /var/www/site1.your_domain

     DirectoryIndex info.php

     <Directory /var/www/site1.your_domain>

        Options Indexes FollowSymLinks MultiViews

        AllowOverride All

        Order allow,deny

        allow from all

     </Directory>

    <FilesMatch \.php$>

      # For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server

      SetHandler «proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost»

    </FilesMatch>

     ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log

     CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined

</VirtualHost>

In dieser Datei haben Sie die DocumentRoot auf Ihr neues Verzeichnis und ServerAdmin auf eine E-Mail aktualisiert, auf die der Administrator der Website your_domain zugreifen kann. Weiterhin haben Sue ServerName aktualisiert, der die Basisdomäne für diese Konfiguration des virtuellen Hosts festlegt, und Sie haben eine Anweisung SetHandlerhinzugefügt, um PHP als fastCGI-Prozessserver auszuführen.

Speichern und schließen Sie die Datei.

Erstellen Sie als Nächstes eine neue Konfigurationsdatei des virtuellen Hosts für die Website site2.your_domain. Sie geben diese Subdomäne für die Bereitstellung von php7.3 an:

  • sudo nano /etc/apache2/sites-available/site2.your_domain.conf

Fügen Sie folgenden Inhalt hinzu: Stellen Sie auch hier sicher, dass der Website-Verzeichnispfad, der Servername und die PHP-Version mit Ihrer Einrichtung übereinstimmen:

/etc/apache2/sites-available/site2.your_domain.conf

<VirtualHost *:80>

     ServerAdmin admin@site2.your_domain

     ServerName site2.your_domain

     DocumentRoot /var/www/site2.your_domain

     DirectoryIndex info.php  

     <Directory /var/www/site2.your_domain>

        Options Indexes FollowSymLinks MultiViews

        AllowOverride All

        Order allow,deny

        allow from all

     </Directory>

    <FilesMatch \.php$>

      # For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server

      SetHandler «proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost»

    </FilesMatch>

     ErrorLog ${APACHE_LOG_DIR}/site2.your_domain_error.log

     CustomLog ${APACHE_LOG_DIR}/site2.your_domain_access.log combined

</VirtualHost>

Wenn Sie fertig sind, speichern und schließen Sie die Datei. Überprüfen Sie anschließend die Apache-Konfigurationsdatei auf etwaige Syntaxfehler:

  • sudo apachectl configtest

Sie sehen die folgende Ausgabe:

Output

Syntax OK

Aktivieren Sie dann beide Konfigurationsdateien des virtuellen Hosts:

  • sudo a2ensite site1.your_domain
  • sudo a2ensite site2.your_domain

Deaktivieren Sie nun die Standardseite, da Sie sie nicht benötigen:

  • sudo a2dissite 000-default.conf

Starten Sie schließlich den Apache-Dienst neu, um Ihre Änderungen zu übernehmen:

  • sudo systemctl restart apache2

Nachdem Sie Apache nun konfiguriert haben, um jede Site zu bedienen, werden Sie sie testen, um sicherzustellen, dass die richtigen PHP-Versionen ausgeführt werden.