PHP FPM: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
 
(4 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 16: Zeile 16:
      
      
     [www]
     [www]
     listen = 127.0.0.1:<30080>
     listen = 127.0.0.1:30080
     listen.allowed_clients = 127.0.0.1
     listen.allowed_clients = 127.0.0.1
     pm = dynamic
     pm = dynamic
Zeile 33: Zeile 33:
     $ cat doms/hs-example.de/.htaccess
     $ cat doms/hs-example.de/.htaccess
     RewriteEngine on
     RewriteEngine on
     RewriteRule ^(.*)\.php(/.*)? fcgi://127.0.0.1:30080/home/pacs/xyz00/users/username/doms/hs-example.de/htdocs-ssl/ [proxy,last]
     RewriteRule ^(.*)\.php(/.*)?$ fcgi://127.0.0.1:30080/home/doms/hs-example.de/htdocs-ssl/$1.php$2 [proxy,last]


== Start und Monitoring des FPM-Prozess ==
== Start und Autostart des FPM-Prozess ==


Der Prozess kann direkt oder indirekt über einen Eintrag "@reboot" in der Crontab des Website-User gestartet werden. Für das Monitoring bieten sich "monit" oder "supervisord" an.
Der FPM-Prozess wird wie folgt gestartet:
 
  /usr/sbin/php-fpm8.2 --fpm-config php-fpm/php-fpm.conf --php-ini php-fpm/php.ini --nodaemonize
 
Eine Unit für SystemD könnte wie folgt aussehen:
 
[Unit]
Description=PHP FPM Service
[Service]
Type=simple
WorkingDirectory=%h
Environment="PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin"
ExecStart=/usr/sbin/php-fpm8.2 --fpm-config %h/php-fpm/php-fpm.conf --php-ini %h/php-fpm/php.ini --nodaemonize
StandardOutput=file:%h/var/php-fpm.log
StandardError=inherit
Restart=always
PrivateTmp=true
[Install]
WantedBy=default.target

Aktuelle Version vom 5. November 2024, 19:13 Uhr

PHP als eigener Prozess

Normalerweise starten PHP-Prozesse im Managed Webspace als FastCGi-Prozess unter Kontrolle des Apache Webserver. Der Apache übernimmt die Skalierung und startet bei Bedarf weitere Prozesse nach.

Nutzer:innen eines Managed Server können alternativ PHP-FPM Nutzen. Sie starten einen FPM-Prozess unter der eigenen Kontrolle. Dieser Hauptprozess übernimmt die Skalierung und Kontrolliert den Lifecycle von PHP-Prozessen nach den wünschen der Webseitenbetreiber:in.

Konfiguration von FPM

Hier nur ein minimales Beispiel. Für die Optimierung sein auf die entsprechende Originaldokumentation verwiesen.

   ~/php-fpm$ cat ~/php-fpm/php-fpm.conf
   
   [global]
   pid = /home/pacs/xyz00/users/username/php-fpm/php-fpm.pid
   error_log = /home/pacs/xyz00/users/username/php-fpm/php-fpm.log
   
   [www]
   listen = 127.0.0.1:30080
   listen.allowed_clients = 127.0.0.1
   pm = dynamic
   pm.max_children = 5
   pm.start_servers = 2
   pm.min_spare_servers = 1
   pm.max_spare_servers = 3
   ;pm.process_idle_timeout = 10s;
   ;pm.max_requests = 500

Apache Konfiguration

Der FPM-Server wird über das Apache Modul "mod_proxy_fcgi" angesteuert. Dazu legt man im Verzeichnis ~/doms/hs-example.de/ eine Datei .htaccess an.

   $ cat doms/hs-example.de/.htaccess
   RewriteEngine on
   RewriteRule ^(.*)\.php(/.*)?$ fcgi://127.0.0.1:30080/home/doms/hs-example.de/htdocs-ssl/$1.php$2 [proxy,last]

Start und Autostart des FPM-Prozess

Der FPM-Prozess wird wie folgt gestartet:

 /usr/sbin/php-fpm8.2 --fpm-config php-fpm/php-fpm.conf --php-ini php-fpm/php.ini --nodaemonize

Eine Unit für SystemD könnte wie folgt aussehen:

[Unit]
Description=PHP FPM Service

[Service]
Type=simple
WorkingDirectory=%h
Environment="PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin"
ExecStart=/usr/sbin/php-fpm8.2 --fpm-config %h/php-fpm/php-fpm.conf --php-ini %h/php-fpm/php.ini --nodaemonize
StandardOutput=file:%h/var/php-fpm.log
StandardError=inherit
Restart=always
PrivateTmp=true

[Install]
WantedBy=default.target