net2grid.php
Ansible Rolle: PHP
Installiert PHP auf RedHat/CentOS und Debian/Ubuntu Server.
Anforderungen
Wenn Sie eine ältere LTS-Version von Ubuntu oder RHEL mit einer alten Version von PHP verwenden, müssen Sie ein Repository oder PPA mit einer unterstützten PHP-Version verwenden, da diese Rolle nur mit PHP-Versionen, die derzeit unterstützt werden, funktioniert.
Rollenarmlen
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
php_packages: []
Eine Liste der PHP-Pakete, die installiert werden sollen (Standardmäßig OS-spezifisch). Wahrscheinlich möchten Sie gängige Pakete wie php
, php-cli
, php-devel
und php-pdo
installieren. Sie können auch andere Pakete hinzufügen (zum Beispiel php-gd
für Bildbearbeitung oder php-ldap
, wenn Sie sich mit einem LDAP-Server zur Authentifizierung verbinden müssen).
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, je nach 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 Verwendung von PHP an einen Webserver (z. B. Apache oder Nginx) gebunden ist, lassen Sie diesen Standardwert unverändert. Wenn Sie PHP serverseitig oder zum Ausführen einer kleinen Anwendung verwenden, setzen Sie diesen Wert auf false
, damit diese Rolle nicht versucht, mit einem Webserver zu interagieren.
php_webserver_daemon: "httpd"
Die Standardwerte für den HTTP-Server-Daemon sind httpd
(von Apache verwendet) für RedHat/CentOS oder apache2
(ebenfalls von Apache verwendet) für Debian/Ubuntu. Wenn Sie einen anderen Webserver (z. B. nginx
) ausführen, ä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 (z. B. geerlingguy.repo-epel oder geerlingguy.repo-remi), können Sie diese Repositories unter dieser Variable auflisten (z. B. remi-php70,epel
). Dies kann hilfreich sein, wenn Sie die neueste Version von PHP 7.0 installieren möchten, die im Remi-Repository verfügbar ist.
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, die PHP-Versionen bei Bedarf zu wechseln. Standardmäßig ist dies auf "present"
gesetzt. Sie können diese Variable auf "latest"
ändern, um auf die neueste verfügbare Version zu aktualisieren. In Kombination mit php_enablerepo
muss der Benutzer die vorhandenen PHP-Pakete nicht manuell deinstallieren, bevor er sie aus einem anderen Repository installiert.
Sie können auch die geerlingguy.php-versions
Rolle verwenden, um einfacher zwischen Hauptversionen von PHP (z. B. 5.6, 7.0, 7.1, 7.2) zu wechseln.
php_install_recommends: true
(Nur Debian/Ubuntu) Ob empfohlene Pakete bei der Installation von php_packages
installiert werden sollen; Sie sollten dies explizit auf nein
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 unerwünscht ist!).
php_executable: "php"
Die ausführbare Datei, die aufgerufen wird, wenn PHP von der Kommandozeile ausgeführt wird. Sie sollten dies nur ändern, wenn das Ausführen von php
auf Ihrem Server nicht die richtige ausführbare Datei anspricht oder wenn Sie Software-Sammlungen auf RHEL/CentOS verwenden und eine andere PHP-Version ansprechen müssen.
PHP-FPM
PHP-FPM ist ein einfacher und robuster FastCGI-Prozessmanager für PHP. Es erleichtert das Skalieren von PHP-Anwendungen erheblich und ist der normale Weg, PHP-basierte Websites und Anwendungen mit einem Webserver wie Nginx auszuführen (obwohl es genauso gut mit anderen Webservern verwendet werden kann).
Wenn Sie diese Rolle mit PHP verwenden, das als php-fpm
läuft, anstatt als Prozess innerhalb eines Webservers (z. B. Apache's mod_php
), müssen Sie die folgende Variable auf true
setzen:
php_enable_php_fpm: false
Wenn Sie Apache verwenden, können Sie es einfach konfigurieren, um mit PHP-FPM zu arbeiten, indem Sie die geerlingguy.apache-php-fpm Rolle verwenden.
php_fpm_listen: "127.0.0.1:9000"
php_fpm_listen_allowed_clients: "127.0.0.1"
php_fpm_pm_max_children: 50
php_fpm_pm_start_servers: 5
php_fpm_pm_min_spare_servers: 5
php_fpm_pm_max_spare_servers: 5
Spezifische Einstellungen im Standard www.conf
PHP-FPM-Pool. Wenn Sie zusätzliche Einstellungen verwalten möchten, können Sie dies tun, indem Sie die Datei durch Ihre eigene Vorlage ersetzen oder lineinfile
verwenden, wie es diese Rolle in tasks/configure-fpm.yml
tut.
php.ini Einstellungen
php_use_managed_ini: true
Standardmäßig werden alle zusätzlichen Standards unten durch die in dieser Rolle enthaltene php.ini angewendet. Sie können Ihre php.ini-Datei selbst verwalten (wenn Sie mehr Flexibilität in der Konfiguration benötigen), indem Sie dies auf false
setzen (in diesem Fall werden alle unten genannten 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: []
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 nur, 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 oft auf einem System angepasst werden. Stellen Sie sicher, dass genug Speicher und Dateispeicher im OpCache (php_opcache_memory_consumption
, in MB, und php_opcache_max_accelerated_files
) zugewiesen sind, um den gesamten PHP-Code zu enthalten, den Sie ausführen. Andernfalls können Sie eine weniger als optimale Leistung erhalten!
Für einen benutzerdefinierten Speicherort von opcache.so geben Sie den vollständigen Pfad mit php_opcache_zend_extension
an.
php_opcache_conf_filename: [plattformspezifisch]
Der plattformspezifische OpCache-Konfigurationsdateiname. Im Allgemeinen sollte der Standard funktionieren, aber in einigen Fällen müssen Sie den Dateinamen überschreiben.
APCu-bezogene Variablen
php_enable_apc: true
Ob APCu aktiviert werden soll. Andere APCu-Variablen sind wirkungslos, wenn dies auf false gesetzt ist.
php_apc_shm_size: "96M"
php_apc_enable_cli: "0"
APCu ini-Direktiven, die oft auf einem System angepasst werden. Setzen Sie die php_apc_shm_size
, damit sie alle Cache-Einträge im Speicher mit einem kleinen Overhead hält (Fragmentierung oder APC, die keinen Speicher mehr hat, verlangsamen PHP dramatisch).
php_apc_conf_filename: [plattformspezifisch]
Der plattformspezifische APC-Konfigurationsdateiname. Im Allgemeinen sollte der Standard funktionieren, aber in einigen Fällen müssen Sie den Dateinamen überschreiben.
Sicherstellen, dass APC installiert ist
Wenn Sie APC verwenden, müssen Sie sicherstellen, dass APC installiert ist (es wird 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 bestimmte Version von PHP benötigen oder die neueste (z. B. Master) Version von PHP testen möchten, gibt es gute Chancen, dass im Paketmanager Ihres Systems kein geeignetes Paket verfügbar ist. In diesen Fällen können Sie entscheiden, PHP aus dem Quellcode zu installieren, indem Sie es direkt kompilieren.
Bitte beachten Sie, dass die Kompilierung aus dem Quellcode viel länger dauert als die Installation aus Paketen (PHP HEAD benötigt auf einem modernen Quad-Core-Computer mehr als 5 Minuten zur Kompilierung, nur als grobe Referenz).
php_install_from_source: false
Setzen Sie dies auf true
, um PHP aus dem Quellcode zu installieren, anstatt aus Paketen.
php_source_version: "master"
Die Version von PHP, die aus dem Quellcode installiert werden soll (ein Git-Zweig, Tag oder 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"
Der Ort, an dem der Quellcode geklont und installiert wird, sowie der Speicherort der GMP-Headerdatei (die plattform- oder distributionsspezifisch sein kann).
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 die Makefile erstellt, die für die PHP-Kompilierung verwendet werden soll. Fügen Sie alle Optionen hinzu, die Sie für Ihre spezielle 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 andere Hinweise/Hinweise 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
unter Ubuntu) und dass die Option--with-apxs2
imphp_source_configure_command
definiert ist. Schließlich müssen Sie sicherstellen, dass das Modulmpm_prefork
stattmpm_worker
odermpm_event
geladen ist, und wahrscheinlich einephpX.conf
(wobeiX
die Hauptversion von PHP ist) Konfigurationsdatei zum Apache-Modulkonfigurationsordner mit Inhalten wiephp7.conf
hinzufügen. - 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
imphp_source_configure_command
definiert ist. Sie müssen auch sicherstellen, dass Apaches Unterstützung für CGI und Ereignis 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
imphp_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
Autor-Informationen
Diese Rolle wurde 2014 von Jeff Geerling erstellt, Autor von Ansible for DevOps.
PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
ansible-galaxy install net2grid.php