geerlingguy.php
Ansible Rolle: PHP
Installiert PHP auf RedHat/CentOS und Debian/Ubuntu Servern.
Anforderungen
Wenn Sie eine ältere LTS-Version von Ubuntu oder RHEL mit einer alten PHP-Version verwenden, müssen Sie ein Repository oder PPA mit einer aktuellen PHP-Version verwenden, da diese Rolle nur mit PHP-Versionen, die derzeit unterstützt werden funktioniert.
Rollenvariablen
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
php_packages: []
Eine Liste der zu installierenden PHP-Pakete (standardmäßig betriebssystemspezifisch). Wahrscheinlich möchten Sie gängige Pakete wie php
, php-cli
, php-devel
und php-pdo
installieren und können weitere Pakete hinzufügen (zum Beispiel php-gd
für die Bildbearbeitung oder php-ldap
für eine Verbindung zu einem LDAP-Server für die Authentifizierung).
Hinweis: Wenn Sie Debian/Ubuntu verwenden, müssen Sie auch libapache2-mod-fastcgi
(für cgi/PHP-FPM) oder libapache2-mod-php7.0
(oder ein ähnliches Paket, abhängig von der PHP-Version) installieren, wenn Sie mod_php
mit Apache verwenden möchten.
php_packages_extra: []
Eine Liste zusätzlicher PHP-Pakete, die installiert werden sollen, ohne die Standardliste zu überschreiben.
php_enable_webserver: true
Wenn Ihre Nutzung von PHP mit einem Webserver (z.B. Apache oder Nginx) verbunden ist, lassen Sie diesen Standardwert. Wenn Sie PHP serverseitig oder zum Ausführen einer kleinen Anwendung verwenden, setzen Sie diesen Wert auf false
, damit diese Rolle nicht mit einem Webserver interagiert.
php_webserver_daemon: "httpd"
Die Standardwerte für den HTTP-Server-Daemon sind httpd
(verwendet von Apache) für RedHat/CentOS oder apache2
(auch verwendet von Apache) für Debian/Ubuntu. Wenn Sie einen anderen Webserver betreiben (z.B. nginx
), ändern Sie diesen Wert in den Namen des Daemons, unter dem der Webserver läuft.
php_enablerepo: ""
(Nur RedHat/CentOS) Wenn Sie zusätzliche Repositories aktiviert haben (ich empfehle geerlingguy.repo-epel oder geerlingguy.repo-remi), können diese Repositories unter dieser Variablen aufgelistet werden (z.B. remi-php70,epel
). Dies kann nützlich sein, wenn Sie die neueste Version von PHP 7.0 installieren möchten, die sich im Remi-Repository befindet.
php_default_version_debian: ""
(Nur Debian/Ubuntu) Die Standardversion von PHP in den Repositorys der gegebenen OS-Version. Die spezifische Version ist je nach Distribution und Version festgelegt, kann jedoch hier überschrieben werden, z.B. "7.4"
.
Wenn Sie zwischen PHP-Versionen einfach wechseln oder eine Version verwenden möchten, die nicht in den Systempaketen verfügbar ist: Sie können die Rolle geerlingguy.php-versions
verwenden, um einfacher zwischen Haupt-PHP-Versionen (z.B. 5.6, 7.1, 7.2) zu wechseln.
php_packages_state: "present"
Wenn Sie zusätzliche Repositories wie geerlingguy.repo-epel oder geerlingguy.repo-remi aktiviert haben, möchten Sie möglicherweise eine einfache Möglichkeit, PHP-Versionen spontan zu wechseln. Standardmäßig ist dies auf "present"
eingestellt. Sie können diese Variable auf "latest"
setzen, um auf die neueste verfügbare Version zu aktualisieren. In Kombination mit php_enablerepo
muss der Benutzer jetzt die vorhandenen PHP-Pakete nicht manuell deinstallieren, bevor er sie aus einem anderen Repository installiert.
php_install_recommends: true
(Nur Debian/Ubuntu) Ob empfohlene Pakete bei der Installation von php_packages
installiert werden sollen; Sie möchten dies möglicherweise ausdrücklich auf no
setzen, wenn Sie ein PPA installieren, das bestimmte Pakete empfiehlt, die Sie nicht möchten (z.B. wird Ondrejs php
PPA php7.0-cli
installieren, wenn Sie php-pear
zusammen mit php5.6-cli
installieren... was oft nicht gewünscht ist!).
php_executable: "php"
Das auszuführende Programm, wenn PHP von der Kommandozeile aus aufgerufen wird. Sie sollten dies nur ändern, wenn das Ausführen von php
auf Ihrem Server nicht das richtige Programm ansteuert, oder wenn Sie Software-Sammlungen auf RHEL/CentOS verwenden und eine andere PHP-Version ansteuern müssen.
PHP-FPM
PHP-FPM ist ein einfacher und robuster FastCGI-Prozess-Manager für PHP. Es kann die Skalierung von PHP-Anwendungen erheblich erleichtern und ist die übliche Methode, um PHP-basierte Websites und Anwendungen beim Einsatz eines Webservers wie Nginx auszuführen (kann aber auch genauso gut mit anderen Webservern verwendet werden).
Wenn Sie diese Rolle verwenden, bei der PHP als php-fpm
und nicht als Prozess innerhalb eines Webservers (z.B. Apache's mod_php
) ausgeführt wird, müssen Sie die folgende Variable auf true
setzen:
php_enable_php_fpm: false
Wenn Sie Apache verwenden, können Sie es einfach so konfigurieren, dass es mit PHP-FPM funktioniert, indem Sie die Rolle geerlingguy.apache-php-fpm verwenden.
php_fpm_state: started
php_fpm_enabled_on_boot: true
Steuern Sie den Status des fpm-Daemon; setzen Sie diese auf stopped
und false
, wenn Sie FPM installieren und konfigurieren, aber nicht ausführen möchten (z.B. bei der Installation in einem Container).
php_fpm_handler_state: restarted
Der Handler startet PHP-FPM standardmäßig neu. Wenn Sie den Wert auf reloaded
setzen, wird der Dienst neu geladen, anstatt neu zu starten.
php_fpm_pools:
- pool_name: www
pool_template: www.conf.j2
pool_listen: "127.0.0.1:9000"
pool_listen_allowed_clients: "127.0.0.1"
pool_pm: dynamic
pool_pm_max_children: 5
pool_pm_start_servers: 2
pool_pm_min_spare_servers: 1
pool_pm_max_spare_servers: 3
pool_pm_max_requests: 500
pool_pm_status_path: /status
Liste der zu erstellenden PHP-FPM-Pools. Standardmäßig wird der www-Pool erstellt. Um einen neuen Pool einzurichten, fügen Sie einen Eintrag zur Liste php_fpm_pools hinzu.
Spezifische Einstellungen innerhalb des Standard-www.conf.j2
PHP-FPM-Pools. Wenn Sie zusätzliche Einstellungen verwalten möchten, können Sie dies tun, indem Sie die Datei durch Ihre eigene Vorlage mit pool_template
ersetzen.
php.ini Einstellungen
php_use_managed_ini: true
Standardmäßig werden alle zusätzlichen Standards unten über die php.ini, die mit dieser Rolle enthalten ist, angewendet. Sie können Ihre php.ini-Datei selbst verwalten (wenn Sie mehr Flexibilität bei ihrer Konfiguration benötigen), indem Sie dies auf false
setzen (in diesem Fall werden alle unten stehenden Variablen ignoriert).
php_fpm_pool_user: "[apache|nginx|other]" # Standard variiert je nach OS
php_fpm_pool_group: "[apache|nginx|other]" # Standard variiert je nach OS
php_memory_limit: "256M"
php_max_execution_time: "60"
php_max_input_time: "60"
php_max_input_vars: "1000"
php_realpath_cache_size: "32K"
php_file_uploads: "On"
php_upload_max_filesize: "64M"
php_max_file_uploads: "20"
php_post_max_size: "32M"
php_date_timezone: "America/Chicago"
php_allow_url_fopen: "On"
php_sendmail_path: "/usr/sbin/sendmail -t -i"
php_output_buffering: "4096"
php_short_open_tag: false
php_error_reporting: "E_ALL & ~E_DEPRECATED & ~E_STRICT"
php_display_errors: "Off"
php_display_startup_errors: "On"
php_expose_php: "On"
php_session_cookie_lifetime: 0
php_session_gc_probability: 1
php_session_gc_divisor: 1000
php_session_gc_maxlifetime: 1440
php_session_save_handler: files
php_session_save_path: ''
php_disable_functions: []
php_precision: 14
php_serialize_precision: "-1"
Verschiedene Standards für PHP. Nur verwendet, wenn php_use_managed_ini
auf true
gesetzt ist.
OpCache-bezogene Variablen
Der OpCache ist in PHP ab Version 5.5 enthalten, und die folgenden Variablen wirken sich nur aus, wenn die installierte PHP-Version 5.5 oder höher ist.
php_opcache_zend_extension: "opcache.so"
php_opcache_enable: "1"
php_opcache_enable_cli: "0"
php_opcache_memory_consumption: "96"
php_opcache_interned_strings_buffer: "16"
php_opcache_max_accelerated_files: "4096"
php_opcache_max_wasted_percentage: "5"
php_opcache_validate_timestamps: "1"
php_opcache_revalidate_path: "0"
php_opcache_revalidate_freq: "2"
php_opcache_max_file_size: "0"
OpCache ini-Direktiven, die häufig auf einem System angepasst werden. Stellen Sie sicher, dass Sie genügend Speicher und Dateispeicherplätze im OpCache (php_opcache_memory_consumption
, in MB, und php_opcache_max_accelerated_files
) zugewiesen haben, um den gesamten PHP-Code, den Sie ausführen, zu enthalten. Andernfalls kann die Leistung beeinträchtigt werden!
Für den benutzerdefinierten Speicherort von opcache.so geben Sie den vollständigen Pfad mit php_opcache_zend_extension
an.
php_opcache_conf_filename: [plattformspezifisch]
Der plattformspezifische Konfigurationsdateiname für den OpCache. In der Regel sollte der Standard funktionieren, aber in einigen Fällen müssen Sie den Dateinamen möglicherweise überschreiben.
APCu-bezogene Variablen
php_enable_apc: true
Ob APCu aktiviert werden soll. Andere APCu-Variablen sind nicht wirksam, wenn dies auf false gesetzt ist.
php_apc_shm_size: "96M"
php_apc_enable_cli: "0"
APCu ini-Direktiven, die häufig auf einem System angepasst werden. Setzen Sie die php_apc_shm_size
, damit sie alle Cache-Einträge im Speicher mit etwas Overhead halten kann (Fragmentierung oder APC, der keinen Speicher mehr hat, verlangsamen PHP dramatisch).
php_apc_conf_filename: [plattformspezifisch]
Der plattformspezifische APC-Konfigurationsdateiname. In der Regel sollte der Standard funktionieren, aber in einigen Fällen müssen Sie den Dateinamen möglicherweise überschreiben.
Sicherstellen, dass APC installiert ist
Wenn Sie APC verwenden, müssen Sie sicherstellen, dass APC installiert ist (es ist standardmäßig installiert, aber wenn Sie die Liste php_packages
anpassen, müssen Sie APC in die Liste aufnehmen):
- Auf RHEL/CentOS-Systemen: Stellen Sie sicher, dass
php-pecl-apcu
in der Liste derphp_packages
enthalten ist. - Auf Debian/Ubuntu-Systemen: Stellen Sie sicher, dass
php-apcu
in der Liste derphp_packages
enthalten ist.
Installation aus dem Quellcode
Wenn Sie eine spezifische Version von PHP benötigen oder die neueste (z.B. master) Version von PHP testen möchten, gibt es gute Chancen, dass kein passendes Paket bereits im Paketmanager Ihrer Plattform verfügbar ist. In diesen Fällen können Sie PHP aus dem Quellcode installieren, indem Sie es direkt kompilieren.
Beachten Sie, dass die Kompilierung aus dem Quellcode deutlich länger dauert als die Installation aus Paketen (PHP HEAD benötigt 5+ Minuten, um auf einem modernen Quad-Core-Computer kompiliert zu werden, nur zur Information).
php_install_from_source: false
Setzen Sie dies auf true
, um PHP aus dem Quellcode anstelle von den Paketen zu installieren.
php_source_version: "master"
Die Version von PHP, die aus dem Quellcode installiert werden soll (ein Git-Zweig, ein Tag oder ein Commit-Hash).
php_source_clone_dir: "~/php-src"
php_source_clone_depth: 1
php_source_install_path: "/opt/php"
php_source_install_gmp_path: "/usr/include/x86_64-linux-gnu/gmp.h"
php_source_mysql_config: "/usr/bin/mysql_config"
Ort, an dem der Quellcode geklont und installiert wird, sowie der Ort der GMP-Headerdatei (die plattform- oder distributionsspezifisch sein kann) und der mysql_config
-Binärdatei (dies kann in neueren Betriebssystemversionen mariadb_config
sein).
php_source_make_command: "make"
Setzen Sie den make
-Befehl auf make --jobs=X
, wobei X
die Anzahl der Kerne ist, die auf dem Server vorhanden sind, auf dem PHP kompiliert wird. Dies beschleunigt die Kompilierungszeiten erheblich, wenn Sie mehrere Kerne haben.
php_source_configure_command: >
[...]
Der ./configure
-Befehl, der das Makefile erstellt, das für die PHP-Kompilierung verwendet wird. Fügen Sie alle Optionen hinzu, die Sie für Ihre spezifische Umgebung benötigen. Die Verwendung eines gefalteten Skalars (>
) ermöglicht es Ihnen, die Variable über mehrere Zeilen zu definieren, was äußerst hilfreich für die Lesbarkeit und Versionskontrolle ist!
Einige weitere Hinweise/Einschränkungen für spezifische Konfigurationen:
- Apache mit
mpm_prefork
: Wenn Sie Apache mit prefork als Webserver für PHP verwenden, müssen Sie sicherstellen, dassapxs2
auf Ihrem System verfügbar ist (z.B. durch Installation vonapache2-prefork-dev
in Ubuntu), und Sie müssen sicherstellen, dass die Option--with-apxs2
inphp_source_configure_command
definiert ist. Schließlich müssen Sie sicherstellen, dass dasmpm_prefork
-Modul geladen ist und wahrscheinlich einephpX.conf
(wobeiX
die Hauptversion von PHP ist) Konfigurationsdatei in den Apache-Modulordner mit Inhalten wiephp7.conf
hinzugefügt wird. - Apache mit
mpm_event
odermpm_worker
: Wenn Sie Apache mit Event oder Worker als Webserver für PHP verwenden, müssen Sie PHP mit FPM kompilieren. Stellen Sie sicher, dass die Option--enable-fpm
inphp_source_configure_command
definiert ist. Sie müssen auch sicherstellen, dass die Unterstützung von Apache für CGI und Event installiert ist (z.B. durch Installation vonapache2-mpm-event
undlibapache2-mod-fastcgi
) und dasmpm_event
-Modul geladen ist. - Nginx: Wenn Sie Nginx als Webserver für PHP verwenden, müssen Sie PHP mit FPM kompilieren. Stellen Sie sicher, dass die Option
--enable-fpm
inphp_source_configure_command
definiert ist.
Abhängigkeiten
Keine.
Beispiel-Playbook
- hosts: webservers
vars_files:
- vars/main.yml
roles:
- { role: geerlingguy.php }
In vars/main.yml
:
php_memory_limit: "128M"
php_max_execution_time: "90"
php_upload_max_filesize: "256M"
php_packages:
- php
- php-cli
- php-common
- php-devel
- php-gd
- php-mbstring
- php-pdo
- php-pecl-apcu
- php-xml
...
Lizenz
MIT / BSD
Autorinformation
Diese Rolle wurde 2014 von Jeff Geerling erstellt, dem Autor von Ansible for DevOps.
PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
ansible-galaxy install geerlingguy.php