PHP 7.2 FPM auf Ubuntu Webserver installieren und einrichten

Sourcelist erweitern.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update

Alles was mit php7.2 im Paketnamen zu tun hat auflisten um daraus die gewünschten php7.2 Pakete zu installieren.

sudo apt-cache pkgnames | grep php7.2

Alles was mit php7.2 im Paketnamen zu tun hat installieren (ggf. anpassen).

sudo apt-get install php7.2-bz2 php7.2-common php7.2-cgi php7.2-cli php7.2-dba php7.2-dev libphp7.2-embed php7.2-bcmath php7.2-fpm php7.2-gmp php7.2-mysql php7.2-tidy php7.2 php7.2-sqlite3 php7.2-json php7.2-opcache php7.2-sybase php7.2-curl php7.2-ldap php7.2-phpdbg php7.2-imap php7.2-xml php7.2-xsl php7.2-intl php7.2-zip php7.2-odbc php7.2-mbstring php7.2-readline php7.2-gd php7.2-interbase php7.2-snmp php7.2-xmlrpc php7.2-soap php7.2-pspell php7.2-pgsql php7.2-enchant php7.2-recode libapache2-mod-php7.2 

APCu und OPcache installieren und activieren.

sudo apt-get install php7.2-opcache php-apcu
sudo phpenmod apcu opcache

FPM/FastCGI installieren und die nötigen Module aktivieren.

sudo apt-get install libapache2-mod-fastcgi
sudo a2enmod actions fastcgi alias

Restart PHP und Apache2.

sudo systemctl restart php7.2-fpm apache2

Eigene FPM Konfiguration erstellen.

sudo nano /etc/php/7.2/fpm/pool.d/myconfig.conf

Alle Demodaten "myconfig" und "eigenerUser" für die Konfiguration anpassen!

[myconfig]
user = eigenerUser
group = eigenerUser

listen = /run/php/php7.2-fpm-myconfig.sock
listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

PHP FPM neu starten.

sudo service php7.2-fpm restart

Apache2 zur Nutzung von PHP7.2-FPM einrichten.

sudo nano /etc/apache2/conf-available/php7.2-fpm-myconfig.conf

Alle Demodaten "myconfig" für die Konfiguration anpassen!

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
    <IfModule proxy_fcgi_module>
        # Enable http authorization headers
        <IfModule setenvif_module>
            SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
        </IfModule>
        <FilesMatch ".+\.ph(ar|p|tml)$">
            SetHandler "proxy:unix:/run/php/php7.2-fpm-myconfig.sock|fcgi://localhost"
        </FilesMatch>
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        <FilesMatch ".+\.phps$">
            Require all denied
        </FilesMatch>
        # Deny access to files without filename (e.g. '.php')
        <FilesMatch "^\.ph(ar|p|ps|tml)$">
            Require all denied
        </FilesMatch>
    </IfModule>
</IfModule>

Module aktiveren, unnötige Module deaktivieren und Service neu starten.

sudo a2dismod php7.2
sudo a2enmod proxy_fcgi setenvif 
sudo a2enconf php7.2-fpm-myconfig
sudo systemctl restart php7.2-fpm apache2

Per Apache (sites-enabled) oder .htacces kann nun die PHP Version und Konfiguration einer Webseite zugewiesen werden.

<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
    SetHandler "proxy:unix:/run/php/php7.2-fpm-myconfig.sock|fcgi://localhost"
</FilesMatch>