entanet_devops.ansible_role_php

Ansible Rolle: PHP

Build Status

Installiert PHP auf RedHat/CentOS und Debian/Ubuntu-Servern.

Anforderungen

Wenn Sie eine ältere LTS-Version von Ubuntu oder RHEL mit einer veralteten PHP-Version verwenden, müssen Sie ein Repository oder PPA mit einer unterstützten PHP-Version verwenden, da diese Rolle nur mit aktuell unterstützten PHP-Versionen funktioniert.

Rollenvariablen

Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml):

php_packages: []

Eine Liste von PHP-Paketen, die installiert werden sollen (betriebsystemspezifisch). Wahrscheinlich möchten Sie gängige Pakete wie php, php-cli, php-devel und php-pdo installieren, und Sie können weitere Pakete hinzufügen (zum Beispiel php-gd für Bildbearbeitung oder php-ldap, wenn Sie eine Verbindung zu einem LDAP-Server zur Authentifizierung benötigen).

Hinweis: Wenn Sie Debian/Ubuntu verwenden, müssen Sie außerdem 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 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 versucht, mit einem Webserver zu interagieren.

php_webserver_daemon: "httpd"

Die Standardwerte für den HTTP-Serverdaemon sind httpd (von Apache verwendet) für RedHat/CentOS oder apache2 (auch von Apache verwendet) für Debian/Ubuntu. Wenn Sie einen anderen Webserver verwenden (zum Beispiel 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 im Remi-Repository verfügbar ist.

php_default_version_debian: "7.0"

(Nur Debian/Ubuntu) Die Standardversion von PHP in den gegebenen OS-Version-Repositories. Standardmäßig auf die neueste LTS-Version von Ubuntu eingestellt. Ubuntu 18.04 muss auf "7.2" gesetzt werden, da PHP 7.0 in den Standard-Bionic-Paketen nicht verfügbar ist.

Wenn Sie PHP-Versionen einfach wechseln oder eine Version verwenden möchten, die in den Systempaketen nicht verfügbar ist: Sie können die geerlingguy.php-versions Rolle nutzen, 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" überschreiben, um auf die neueste verfügbare Version zu aktualisieren. In Kombination mit php_enablerepo muss ein Benutzer nun 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 installiert werden sollen, wenn php_packages installiert werden; Sie möchten dies möglicherweise explizit auf no setzen, wenn Sie ein PPA installieren, das bestimmte Pakete empfiehlt, die Sie nicht wünschen (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 Befehlszeile aufgerufen wird. Sie sollten dies nur ändern, wenn das Ausführen von php auf Ihrem Server nicht das richtige ausführbare Programm anvisiert oder wenn Sie Software-Sammlungen auf RHEL/CentOS verwenden und eine andere PHP-Version anvisieren 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 der normale Weg, PHP-basierte Websites und Anwendungen zu betreiben, wenn ein Webserver wie Nginx verwendet wird (kann aber genauso gut mit anderen Webservern verwendet werden).

Wenn Sie diese Rolle verwenden und PHP als php-fpm anstelle als eines Prozesses innerhalb eines Webservers (z.B. Apache's mod_php) ausführen, 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_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 innerhalb des Standard-www.conf PHP-FPM-Pools. Wenn Sie zusätzliche Einstellungen verwalten möchten, können Sie dies tun, indem Sie entweder die Datei durch Ihre eigene Vorlage ersetzen oder lineinfile verwenden, wie diese Rolle es in tasks/configure-fpm.yml tut.

php.ini Einstellungen

php_use_managed_ini: true

Standardmäßig werden alle zusätzlichen Voreinstellungen 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 der Konfiguration benötigen), indem Sie dies auf false setzen (in diesem Fall werden alle untenstehenden Variablen ignoriert).

php_fpm_pool_user: "[apache|nginx|anderes]" # Standard variiert je nach OS
php_fpm_pool_group: "[apache|nginx|anderes]" # 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 Voreinstellungen 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 haben nur dann Wirkung, 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 genügend Speicher und Dateispeicher im OpCache (php_opcache_memory_consumption, in MB, und php_opcache_max_accelerated_files) zugewiesen sind, um den gesamten PHP-Code, den Sie ausführen, zu enthalten. Andernfalls kann die Leistung suboptimal sein!

Um einen benutzerdefinierten opcache.so Speicherort anzugeben, geben Sie den vollständigen Pfad mit php_opcache_zend_extension an.

php_opcache_conf_filename: [plattform-spezifisch]

Der plattform-spezifische OpCache-Konfigurationsdateiname. Generell 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 häufig auf einem System angepasst werden. Setzen Sie php_apc_shm_size, damit alle Cache-Einträge im Speicher gehalten werden, mit einer kleinen Überkopflast (Fragmentierung oder wenn APC keinen Speicher mehr hat, kann die PHP-Leistung dramatisch verlangsamen).

php_apc_conf_filename: [plattform-spezifisch]

Der plattform-spezifische APC-Konfigurationsdateiname. Generell 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 ist standardmäßig installiert, aber wenn Sie die Liste der 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 der php_packages enthalten ist.
  • Auf Debian/Ubuntu-Systemen: Stellen Sie sicher, dass php-apcu in der Liste der php_packages enthalten ist.

Installation aus dem Quellcode

Wenn Sie eine bestimmte PHP-Version benötigen oder die neueste (z.B. master) Version von PHP testen möchten, besteht eine gute Chance, dass kein passendes Paket bereits im Paketmanager Ihrer Plattform verfügbar ist. In solchen Fällen können Sie sich entscheiden, PHP aus dem Quellcode zu installieren, indem Sie es direkt kompilieren.

Beachten Sie, dass die Kompilierung aus dem Quellcode viel länger dauert als die Installation aus Paketen (PHP HEAD dauert auf einem modernen Quad-Core-Computer mehr als 5 Minuten, nur als Referenz).

php_install_from_source: false

Setzen Sie dies auf true, um PHP aus dem Quellcode anstelle aus 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"

Ort, an dem der Quellcode geklont und installiert wird, sowie der Speicherort der GMP-Headerdatei (was 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 Kompilierungszeit 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 spezielle Umgebung benötigen. Die Verwendung eines gefalteten Skalars (>) ermöglicht es Ihnen, die Variable über mehrere Zeilen zu definieren, was die Lesbarkeit und die Versionskontrolle erheblich verbessert!

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, dass apxs2 auf Ihrem System verfügbar ist (z.B. indem Sie apache2-prefork-dev in Ubuntu installieren), und Sie müssen sicherstellen, dass die Option --with-apxs2 im php_source_configure_command definiert ist. Schließlich müssen Sie sicherstellen, dass das mpm_prefork Modul geladen ist anstelle von mpm_worker oder mpm_event, und wahrscheinlich eine phpX.conf (wobei X die Hauptversion von PHP ist) Konfigurationsdatei in den Konfigurationsordner des Apache-Moduls mit Inhalten wie php7.conf hinzufügen.
  • Apache mit mpm_event oder mpm_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 im php_source_configure_command definiert ist. Sie müssen auch sicherstellen, dass Apache's Unterstützung für CGI und Event installiert ist (z.B. durch Installieren von apache2-mpm-event und libapache2-mod-fastcgi) und das mpm_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 im php_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, dem Autor von Ansible für DevOps.

Installieren
ansible-galaxy install entanet_devops.ansible_role_php
GitHub Repository
Lizenz
mit
Downloads
10k
Besitzer