apham0001.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/abgelegten PHP-Version verwenden, müssen Sie ein Repository oder PPA mit einer unterstützten PHP-Version nutzen, da diese Rolle nur mit von der PHP-Community unterstützten Versionen funktioniert.
Variablen der Rolle
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
php_packages: []
Eine Liste der zu installierenden PHP-Pakete (Standard ist OS-spezifisch). Sie möchten wahrscheinlich gängige Pakete wie php
, php-cli
, php-devel
und php-pdo
installieren und können weitere Pakete hinzufügen (z.B. php-gd
für Bildbearbeitung oder php-ldap
, wenn Sie sich mit einem LDAP-Server authentifizieren 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 zur Installation, ohne die Standardliste zu überschreiben.
php_enable_webserver: true
Wenn die Verwendung von PHP mit einem Webserver (z.B. Apache oder Nginx) verbunden ist, lassen Sie diesen Standardwert. Wenn Sie PHP serverseitig oder für eine kleine 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-Daedalon sind httpd
(von Apache verwendet) für RedHat/CentOS oder apache2
(auch von Apache verwendet) für Debian/Ubuntu. Wenn Sie einen anderen Webserver (z.B. nginx
) betreiben, ä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
). Das kann praktisch sein, wenn Sie die neueste Version von PHP 7.0 installieren möchten, die im Remi-Repository verfügbar ist.
php_default_version_debian: "7.0"
(Nur Debian/Ubuntu) Die Standardversion von PHP in den jeweiligen OS-Repositorys. Standardmäßig auf die neueste Ubuntu LTS-Version festgelegt. Ubuntu 18.04 benötigt, dass dies auf "7.2"
gesetzt wird, da PHP 7.0 in den Standard-Paketen für bionic nicht verfügbar ist.
Wenn Sie PHP-Versionen leicht wechseln oder eine Version verwenden möchten, die in Systempaketen nicht verfügbar ist: Sie können die geerlingguy.php-versions
Rolle 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 einen einfachen Weg, PHP-Versionen schnell zu wechseln. Standardmäßig ist dies auf "present"
gesetzt. Sie können diese Variable auf "latest"
überschreiben, um auf die neueste verfügbare Version zu aktualisieren. Zusammen mit php_enablerepo
muss ein Benutzer jetzt nicht mehr manuell die vorhandenen PHP-Pakete 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. Onfrejs php
PPA wird php7.0-cli
installieren, wenn Sie php-pear
neben php5.6-cli
installieren... was oft nicht gewünscht ist!).
php_executable: "php"
Die ausführbare Datei, die beim Aufruf von PHP über die Kommandozeile ausgeführt wird. Dieses sollten Sie nur ändern, wenn php
auf Ihrem Server nicht das richtige ausführbare Ziel hat oder wenn Sie Software-Kollektionen auf RHEL/CentOS verwenden und eine andere PHP-Version ansprechen müssen.
PHP-FPM
PHP-FPM ist ein einfacher und robuster FastCGI-Prozess-Manager für PHP. Es kann das Skalieren von PHP-Anwendungen erheblich erleichtern und ist die übliche Methode, um PHP-basierte Seiten und Anwendungen mit einem Webserver wie Nginx auszuführen (aber es kann genauso leicht mit anderen Webservern verwendet werden).
Wenn Sie diese Rolle mit PHP verwenden, das als php-fpm
anstelle einer Prozess im Webserver (z.B. Apache's mod_php
) läuft, 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 geerlingguy.apache-php-fpm Rolle verwenden.
php_fpm_pools:
- php_fpm_pool: www
php_fpm_user: www
php_fpm_group: www
php_fpm_listen: /run/php/php7.3-fpm.sock
php_fpm_pm_max_children: 5
php_fpm_pm_start_servers: 2
php_fpm_pm_min_spare_servers: 1
php_fpm_pm_max_spare_servers: 3
php_fpm_pm_process_idle_timeout: 10s
php_fpm_pm_max_requests: 0
php_fpm_request_slowlog_timeout: 0
php_fpm_request_terminate_timeout: 0
php_fpm_rlimits_files: 1024
php_fpm_admin_value_sendmail_path: [email protected]
extra_parameters: |
php_admin_value[memory_limit] = 128M
php.ini-Einstellungen
php_use_managed_ini: true
Standardmäßig werden alle zusätzlichen Standards unten über die php.ini angewendet, die mit dieser Rolle enthalten ist. Sie können Ihre php.ini-Datei selbst verwalten (wenn Sie mehr Flexibilität in ihrer Konfiguration benötigen), indem Sie dies auf false
setzen (in diesem Fall werden alle untenstehenden 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 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 oft auf einem System angepasst werden. Stellen Sie sicher, dass Sie genügend Speicher und Dateiplätze im OpCache ( php_opcache_memory_consumption
, in MB, und php_opcache_max_accelerated_files
) zugewiesen haben, um allen PHP-Code, den Sie ausführen, zu enthalten. Andernfalls erhalten Sie möglicherweise eine weniger optimale Leistung!
Für einen benutzerdefinierten opcache.so-Speicherort geben Sie den vollständigen Pfad mit php_opcache_zend_extension
an.
php_opcache_conf_filename: [plattform-spezifisch]
Der plattform-spezifische Konfigurationsdateiname für den OpCache. Im Allgemeinen sollte das Standard funktionieren, aber in einigen Fällen müssen Sie möglicherweise 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 php_apc_shm_size
, damit es alle Cache-Einträge im Speicher mit einem kleinen Overhead speichert (Fragmentierung oder APC, die ohne Speicher läuft, verlangsamen PHP dramatisch).
php_apc_conf_filename: [plattform-spezifisch]
Der plattform-spezifische APC-Konfigurationsdateiname. Im Allgemeinen sollte das Standard funktionieren, aber in einigen Fällen müssen Sie möglicherweise den Dateinamen ü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 php_packages
-Liste anpassen, müssen Sie APC in der Liste einfügen):
- 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 den Quellen
Wenn Sie eine spezifische PHP-Version benötigen oder die neueste (z.B. master) Version von PHP testen möchten, gibt es eine gute Chance, dass es kein passendes Paket bereits im Paketmanager Ihrer Plattform gibt. In diesen Fällen können Sie PHP aus den Quellen installieren, indem Sie es direkt kompilieren.
Beachten Sie, dass die Kompilation aus den Quellen viel länger dauert als die Installation aus Paketen (PHP HEAD benötigt auf einem modernen Quad-Core-Computer über 5 Minuten zur Kompilierung, nur als Referenz).
php_install_from_source: false
Setzen Sie dies auf true
, um PHP aus den Quellen anstelle von Paketen zu installieren.
php_source_version: "master"
Die Version von PHP, die aus den Quellen 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"
Ort, an dem die Quellen geklont und installiert werden, und der Ort der GMP-Kopfdatei (die plattform-/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 kann die Kompilierungszeiten erheblich beschleunigen, wenn Sie über mehrere Kerne verfügen.
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. Durch die Verwendung einer gefalteten Skalar (>
) können Sie die Variable über mehrere Zeilen definieren, was für die Lesbarkeit und Quellkontrolle äußerst hilfreich ist!
Einige weitere Hinweise/Vorbehalte 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
imphp_source_configure_command
definiert ist. Schließlich müssen Sie sicherstellen, dass dasmpm_prefork
-Modul geladen ist stattmpm_worker
odermpm_event
, und wahrscheinlich einephpX.conf
(wobeiX
die Hauptversion von PHP ist) Konfigurationsdatei in den 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. Stellen Sie außerdem sicher, 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
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
Autorinformationen
Diese Rolle wurde 2014 von Jeff Geerling erstellt, Autor von Ansible for DevOps.
PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
ansible-galaxy install apham0001.php