bbatsche.PHP
Ansible PHP Site Rolle
Diese Ansible-Rolle installiert eine bestimmte Version von PHP auf deinem Server und richtet eine Webseite in Nginx ein, die PHP ausführt. Die Rolle nutzt Phpenv, um die verschiedenen PHP-Versionen zu verwalten. Sie sollte in der Lage sein, jede PHP-Version von 5.2 bis 7.2 zu installieren (obwohl du, falls du PHP 5.2 installierst, deine Lebensentscheidungen vielleicht ernsthaft überdenken solltest ;-).
Anforderungen
Phpenv benötigt Git, das auf deinem Server installiert sein muss, aber welcher Server hat heutzutage kein Git?
Diese Rolle nutzt Linux-Dateisystem-ACLs und eine Gruppe namens "web-admin", um den Zugriff auf bestimmte Verzeichnisse zu gewähren. Du kannst diese Schritte entweder manuell konfigurieren oder die Rolle bbatsche.Base
installieren.
Zusätzlich erfordert die Installation dieser Rolle auf Ubuntu Xenial Ansible Version 2.2 oder höher. Ansible 2.1 wird weiterhin von Ubuntu Trusty unterstützt.
Rollen-Variablen
domain
— Zu erstellende Site-Domaindynamic_php
— Ob Nginx alle Anfragen an deiner Seite überindex.php
umschreiben soll. Dies wird von den meisten modernen Frameworks gebraucht. Standard ist "nein"max_upload_size
— Maximale Upload-Größe in MB. Standard ist "10"php_max_file_uploads
— Maximale Anzahl an Dateien, die gleichzeitig hochgeladen werden können. Standard ist 20timezone
— Zeitzone, die in PHP konfiguriert werden soll. Standard ist "Etc/UTC"mysql_socket
— Pfad zu dem Standard-MySQL-Socket für die Verbindung zu localhost.install_mariadb
— Installiere die MariaDB-Clientbibliotheken anstelle der Standard-MySQL-Bibliotheken. Standard ist "nein"php_session_save_handler
— Handler zum Speichern von Sessions. Kann verwendet werden, um Sitzungsdaten z. B. in Redis zu speichern. Standard ist "files"php_session_path
— Pfad zum Speichern von Sitzungsdaten. Standard ist "{{ phpenv_root }}/versions/{{ php_version }}/var/run/session
"php_realpath_cache_size
— Größe des Cache, der für die Suche nach den realen Pfaden von Dateien und Verzeichnissen verwendet wird. Standard ist "256k"php_realpath_cache_ttl
— Dauer, wie lange Einträge im Realpath-Cache gespeichert werden. Standard ist 600php_max_execution_time
— Maximale Zeitspanne, die PHP zur Verfügung steht, um zu arbeiten (außer bei Aufrufen externer Ressourcen wie dem Dateisystem). Standard ist 30.php_default_socket_timeout
— Timeout beim Warten auf Daten von einem Socket. Standard ist 60php_memory_limit
— Maximale Menge an Speicher, die PHP für einen einzelnen Prozess nutzen darf. Standard ist "128M"php_version
— Version von PHP, die mit Phpenv installiert werden soll.phpenv_config_options
— Liste von Flags, die an den PHP-Konfigurationsbefehl übergeben werden sollen (neben den bereits in Phpenv enthaltenen Voreinstellungen). Standard: siehe defaults/main.ymlphpenv_config_options_removed
— Liste von Flags, die von Phpenvs Standardliste entfernt werden sollen. Standard ist nur--with-tidy
pecl_extensions
— Eine Liste zusätzlicher Erweiterungen, die aus PECL installiert werden sollen. Jeder Wert sollte einname
und einversion
habencomposer_packages
— Eine Liste von Composer-Paketen, die global installiert werden sollen. Jeder Wert sollte einename
und eineversion
Eigenschaft haben.phpenv_version
— Version von Phpenv, die installiert werden soll. Standard ist ein Git SHA: "0852611"phpenv_composer_version
— Version des Phpenv Composer Plugin, die installiert werden soll. Standard ist ein Git SHA: "1a6611d"php_build_version
— Version von PHP Build, die installiert werden soll. Standard ist ein Git SHA: "5d166fe"xdebug_version
— Version von Xdebug, die installiert werden soll. Standard ist "2.5.5"copy_phpinfo
— Ob einephpinfo()
-Seite auf die neue Seite kopiert werden soll. Standard ist "nein"copy_index_php
— Ob eineindex.php
-Stubb-Datei auf die neue Seite kopiert werden soll. Standard ist "nein"disabled_function
— Eine Liste von Funktionen, die deaktiviert werden sollen, wenn PHP über das Web läuft.open_basedir
— Liste zusätzlicher Pfade, auf die diese Domain lesen und schreiben kann. Diese Liste enthält immer das Wurzelverzeichnis der Domain selbst, das "var"-Verzeichnis der aktuellen PHP-Version (für die Speicherung von Sitzungen) und das Temp-Verzeichnis der Domain.http_root
— Verzeichnis, unter dem alle Seiten erstellt werden. Standard ist "/srv/http"phpenv_root
— Wo Phpenv und seine Unterstützungsdateien installiert werden sollen. Standard ist "/usr/local/phpenv"
FPM Tuning Variablen
PHP FPM wird konfiguriert, um in einem von zwei Modi zu laufen, abhängig von env_name
. In Entwicklungsumgebungen läuft PHP FPM im "ondemand" Modus, um die Anzahl der erzeugten Prozesse zu minimieren, die in einer ressourcenschwachen Entwicklungsumgebung untätig sitzen. In anderen Umgebungen läuft FPM im "dynamic" Modus, sodass Kindprozesse bereits verfügbar sind, um Anfragen zu bearbeiten, und nicht erst erzeugt werden müssen. Wenn im dynamischen Modus gearbeitet wird, gibt es einige Möglichkeiten, den Ressourcenverbrauch von FPM anzupassen:
fpm_mb_per_child
— Durchschnittliche Menge an Speicher, die ein Kindprozess für diese Domain verbrauchen wird. Standard ist "30"fpm_mem_percent
— Maximale Menge an Gesamtspeicher, die FPM verbrauchen darf. Standard ist "80"fpm_max_children
— Maximale Anzahl von Kindprozessen, die für diese Domain erlaubt sind. Standard wird basierend auffpm_mem_percent
undfpm_mb_per_child
berechnet.fpm_start_percent
— Welcher Prozentsatz der maximalen Kinder von FPM gestartet werden soll, wenn die Domain ursprünglich erstellt wird. Standard ist "20" mit einem Minimum von 2 Servern insgesamt.fpm_start_servers
— Anzahl der Server, die gestartet werden sollen, wenn die Domain erstellt wird. Standard wird basierend auffpm_start_percent
berechnet.fpm_max_spare_percent
— Prozentsatz der maximalen Kinder von FPM, die als Ersatzserver aktiv gehalten werden, wenn die Last zu sinken beginnt. Standard ist "80"fpm_max_spare_servers
— Anzahl der aktiven Ersatzserver nach einem Anstieg und wenn die Last zu sinken beginnt. Standard wird basierend auffpm_max_spare_percent
berechnet.
Dies ermöglicht es dir, die Ressourcennutzung entweder basierend auf einem Prozentsatz des Gesamtspeichers oder mit statischen Werten anzupassen, je nach deinem Anwendungsfall.
Opcache Tuning Variablen
Die folgenden Variablen können verwendet werden, um Opcache anzupassen und möglicherweise die Anwendungsleistung zu verbessern.
opcache_enable_cli
— Standard ist 0opcache_memory_consumption
— Standard ist 128opcache_internal_strings_buffer
— Standard ist 16opcache_max_accelerated_files
— Standard ist 6000opcache_max_wasted_percentage
— Standard ist 5opcache_validate_timestamps
— Standard ist 1opcache_revalidate_freq
— Setze auf 0, wenn die Umgebung dev ist. Ansonsten ist der Standard 300opcache_fast_shutdown
— Standard ist 0. Möglicherweise riskant, wenn aktiviert
Abhängigkeiten
Diese Rolle hängt von bbatsche.Nginx ab. Du musst diese Rolle zuerst installieren mit:
ansible-galaxy install bbatsche.Nginx
Beispiel-Playbook
- hosts: servers
roles:
- role: bbatsche.Phpenv
domain: my-php-site.test
php_version: 7.1.12
composer_packages:
- name: phpunit/phpunit
version: ^6.4
pecl_extensions:
- name: yaml
version: 2.0.2
- name: imagick
version: 3.4.3
Lizenz
MIT
Tests
Mit dieser Rolle sind eine Reihe von Spezifikationen für das Testen jeder Aufgabe einzeln oder als Ganzes enthalten. Um diese Tests auszuführen, musst du zuerst Vagrant und VirtualBox installiert haben. Die Spezifikationsdateien sind mit Serverspec geschrieben, daher benötigst du Ruby und Bundler.
Um die vollständige Testsuite auszuführen:
$ gem install bundler
$ bundle install
$ rake
Die Spezifikationssuite wird Ubuntu Trusty Tahr (14.04), Xenial Xerus (16.04) und Bionic Bever (18.04) anvisieren.
Um die verfügbaren Rake-Aufgaben (und Spezifikationen) anzuzeigen:
$ rake -T
Diese Spezifikationen sind nicht dazu gedacht, die Idempotenz zu testen. Sie sollen überprüfen, ob die angegebenen Aufgaben die erwarteten Schritte ausführen. Die Idempotenz wird unabhängig durch Integrationstests getestet.
Install Phpenv, PHP, and set up a site in Nginx running it with PHP-FPM
ansible-galaxy install bbatsche.PHP