geerlingguy.php

Rola Ansible: PHP

CI

Instaluje PHP na serwerach RedHat/CentOS i Debian/Ubuntu.

Wymagania

Jeśli używasz starszej wersji LTS Ubuntu lub RHEL z przestarzałą wersją PHP, musisz użyć repozytorium lub PPA z utrzymywaną wersją PHP, ponieważ ta rola działa tylko z wspieranymi wersjami PHP przez społeczność PHP.

Zmienne roli

Dostępne zmienne są wymienione poniżej, wraz z wartościami domyślnymi (patrz defaults/main.yml):

php_packages: []

Lista pakietów PHP do zainstalowania (domyślnie specyficzna dla OS). Prawdopodobnie będziesz chciał zainstalować standardowe pakiety takie jak php, php-cli, php-devel i php-pdo, a także możesz dodać inne pakiety, jak php-gd do manipulacji obrazami, lub php-ldap, jeśli potrzebujesz połączyć się z serwerem LDAP w celu uwierzytelnienia.

Uwaga: Jeśli używasz Debian/Ubuntu, musisz również zainstalować libapache2-mod-fastcgi (do cgi/PHP-FPM) lub libapache2-mod-php7.0 (lub inny podobny pakiet w zależności od wersji PHP), jeśli chcesz używać mod_php z Apache.

php_packages_extra: []

Lista dodatkowych pakietów PHP do zainstalowania bez nadpisywania domyślnej listy.

php_enable_webserver: true

Jeśli korzystasz z PHP powiązanym z serwerem WWW (np. Apache lub Nginx), pozostaw tę wartość domyślną. Jeśli używasz PHP po stronie serwera lub do uruchamiania małej aplikacji, ustaw tę wartość na false, aby ta rola nie próbowała współdziałać z serwerem WWW.

php_webserver_daemon: "httpd"

Domyślne wartości dla demona serwera HTTP to httpd (używany przez Apache) dla RedHat/CentOS, lub apache2 (także używany przez Apache) dla Debian/Ubuntu. Jeśli używasz innego serwera WWW (np. nginx), zmień tę wartość na nazwę demona, pod którym działa serwer WWW.

php_enablerepo: ""

(Tylko RedHat/CentOS) Jeśli włączyłeś dodatkowe repozytoria (może sugeruję geerlingguy.repo-epel lub geerlingguy.repo-remi), te repozytoria mogą być wymienione w tej zmiennej (np. remi-php70,epel). Może to być przydatne, jeśli chcesz zainstalować najnowszą wersję PHP 7.0, która jest w repozytorium Remi.

php_default_version_debian: ""

(Tylko Debian/Ubuntu) Domyślna wersja PHP w repozytoriach danej wersji systemu. Konkretna wersja jest ustawiana per dystrybucję i wersję, ale możesz ją nadpisać, podając wartość tutaj, na przykład "7.4".

Jeśli chcesz łatwo zmieniać wersje PHP lub używać wersji, która nie jest dostępna w pakietach systemowych: Możesz użyć roli geerlingguy.php-versions, aby łatwiej przełączać się między głównymi wersjami PHP (np. 5.6, 7.1, 7.2).

php_packages_state: "present"

Jeśli włączyłeś dodatkowe repozytoria, takie jak geerlingguy.repo-epel lub geerlingguy.repo-remi, możesz chcieć mieć łatwy sposób na szybkie zmienianie wersji PHP. Domyślnie jest ustawione na "present". Możesz nadpisać tę zmienną na "latest", aby zaktualizować do najnowszej dostępnej wersji. W połączeniu z php_enablerepo, użytkownik nie musi ręcznie odinstalowywać istniejących pakietów PHP przed ich instalacją z innego repozytorium.

php_install_recommends: true

(Tylko Debian/Ubuntu) Czy zainstalować pakiety zalecane przy instalacji php_packages; warto to jawnie ustawić na no, jeśli instalujesz PPA, które zaleca pewne pakiety, których nie chcesz (np. PPA php Ondreja zainstaluje php7.0-cli, jeśli zainstalujesz php-pear obok php5.6-cli... co często nie jest pożądane!).

php_executable: "php"

Wykonywalny plik do uruchomienia, gdy wywołujesz PHP z linii poleceń. Powinieneś to zmienić tylko wtedy, gdy uruchamianie php na twoim serwerze nie wskazuje na właściwy wykonywalny plik lub jeśli używasz kolekcji oprogramowania na RHEL/CentOS i musisz wskazać inną wersję PHP.

PHP-FPM

PHP-FPM to prosty i solidny menedżer procesów FastCGI dla PHP. Może znacznie ułatwić skalowanie aplikacji PHP i jest normalnym sposobem uruchamiania stron i aplikacji opartych na PHP przy użyciu serwera WWW takiego jak Nginx (choć może być używany z innymi serwerami WWW równie łatwo).

Podczas używania tej roli z PHP uruchamianym jako php-fpm zamiast jako procesu wewnątrz serwera WWW (np. Apache mod_php), musisz ustawić następującą zmienną na true:

php_enable_php_fpm: false

Jeśli używasz Apache, możesz łatwo skonfigurować go do pracy z PHP-FPM za pomocą roli geerlingguy.apache-php-fpm.

php_fpm_state: started
php_fpm_enabled_on_boot: true

Kontrola stanu demona fpm; ustaw te wartości na stopped i false, jeśli chcesz, aby FPM był zainstalowany i skonfigurowany, ale nie działał (np. podczas instalacji w kontenerze).

php_fpm_handler_state: restarted

Handler domyślnie restartuje PHP-FPM. Ustawiając wartość na reloaded, załadujesz usługę ponownie, zamiast ją restartować.

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

Lista pul PHP-FPM do utworzenia. Domyślnie tworzona jest pula www. Aby skonfigurować nową pulę, dodaj element do listy php_fpm_pools.

Specyficzne ustawienia wewnątrz domyślnego PHP-FPM www.conf.j2. Jeśli chcesz zarządzać dodatkowymi ustawieniami, możesz to zrobić, zastępując plik własnym szablonem, używając pool_template.

Ustawienia php.ini

php_use_managed_ini: true

Domyślnie wszystkie dodatkowe ustawienia poniżej są stosowane przez plik php.ini dołączony do tej roli. Możesz zarządzać swoim plikiem php.ini samodzielnie (jeśli potrzebujesz większej elastyczności w jego konfiguracji), ustawiając to na false (w takim przypadku wszystkie poniższe zmienne będą ignorowane).

php_fpm_pool_user: "[apache|nginx|inne]" # domyślnie różni się w zależności od OS
php_fpm_pool_group: "[apache|nginx|inne]" # domyślnie różni się w zależności od 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"

Wszystkie ustawienia domyślne dla PHP. Są używane tylko wtedy, gdy php_use_managed_ini jest ustawione na true.

Zmienne związane z OpCache

OpCache jest dołączane do PHP od wersji 5.5, a poniższe zmienne będą miały efekt tylko wtedy, gdy zainstalowana wersja PHP to 5.5 lub większa.

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"

Dyrektywy ini OpCache, które często są dostosowywane w systemie. Upewnij się, że masz wystarczającą ilość pamięci i slotów plikowych przydzielonych w OpCache (php_opcache_memory_consumption, w MB, i php_opcache_max_accelerated_files), aby pomieścić cały kod PHP, który uruchamiasz. W przeciwnym razie możesz uzyskać mniej optymalną wydajność!

Dla własnej lokalizacji opcache.so podaj pełną ścieżkę przy pomocy php_opcache_zend_extension.

php_opcache_conf_filename: [platform-specific]

Nazwa pliku konfiguracyjnego opcache specyficzna dla platformy. Zazwyczaj domyślnie działa, ale w niektórych przypadkach możesz potrzebować nadpisać nazwę pliku.

Zmienne związane z APCu

php_enable_apc: true

Czy włączyć APCu. Inne zmienne APCu będą nieskuteczne, jeśli to ustawienie jest fałszywe.

php_apc_shm_size: "96M"
php_apc_enable_cli: "0"

Dyrektywy ini APCu, które często są dostosowywane w systemie. Ustaw php_apc_shm_size, aby pomieścić wszystkie wpisy z pamięci podręcznej w pamięci przy małym narzuceniu (fragmentacja lub APC wyczerpująca pamięć znacznie spowolni PHP).

php_apc_conf_filename: [platform-specific]

Nazwa pliku konfiguracyjnego APC specyficzna dla platformy. Zazwyczaj domyślnie działa, ale w niektórych przypadkach możesz potrzebować nadpisać nazwę pliku.

Zapewnienie instalacji APC

Jeśli używasz APC, musisz upewnić się, że APC jest zainstalowane (domyślnie jest zainstalowane, ale jeśli dostosowujesz listę php_packages, musisz uwzględnić APC na liście):

  • Na systemach RHEL/CentOS: Upewnij się, że php-pecl-apcu znajduje się na liście php_packages.
  • Na systemach Debian/Ubuntu: Upewnij się, że php-apcu znajduje się na liście php_packages.

Instalacja z Źródła

Jeśli potrzebujesz konkretnej wersji PHP lub chcesz przetestować najnowszą (np. wersję master) PHP, może nie być odpowiedniego pakietu dostępnego w menedżerze pakietów twojej platformy. W takich przypadkach możesz zdecydować się na instalację PHP ze źródła, kompilując go bezpośrednio.

Uwaga, kompilacja ze źródła zajmuje dużo więcej czasu niż instalacja z pakietów (PHP HEAD zajmuje 5+ minut na skompilowanie na nowoczesnym komputerze czterordzeniowym, aby dać ci punkt odniesienia).

php_install_from_source: false

Ustaw to na true, aby zainstalować PHP ze źródła, zamiast instalować z pakietów.

php_source_version: "master"

Wersja PHP do zainstalowania ze źródła (gałąź gita, tag lub hash komita).

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"

Lokalizacja, gdzie źródło będzie klonowane i instalowane oraz lokalizacja pliku nagłówkowego GMP (który może być specyficzny dla platformy/dystrybucji) oraz binarny mysql_config (to może być mariadb_config w nowszych wersjach systemu operacyjnego).

php_source_make_command: "make"

Ustaw polecenie make na make --jobs=X, gdzie X to liczba rdzeni dostępnych na serwerze, na którym PHP jest kompilowane. To znacznie przyspieszy czas kompilacji, jeśli masz wiele rdzeni.

php_source_configure_command: >
  [...]

Polecenie ./configure, które zbuduje Makefile używany do kompilacji PHP. Dodaj wszystkie opcje, których potrzebujesz dla swojego środowiska. Użycie złożonej skali (>) pozwala na definiowanie zmiennej na wielu liniach, co jest bardzo pomocne dla czytelności i kontroli źródła!

Kilka innych uwag/ostrożności dla specyficznych konfiguracji:

  • Apache z mpm_prefork: Jeśli używasz Apache z prefork jako serwera WWW dla PHP, musisz upewnić się, że apxs2 jest dostępne w twoim systemie (np. instalując apache2-prefork-dev w Ubuntu), i musisz upewnić się, że opcja --with-apxs2 jest zdefiniowana w php_source_configure_command. Wreszcie będziesz musiał upewnić się, że moduł mpm_prefork jest załadowany zamiast mpm_worker lub mpm_event, a prawdopodobnie dodać plik konfiguracyjny phpX.conf (gdzie X to główna wersja PHP) do folderu konfiguracyjnego modułu Apache z zawartością jak php7.conf.
  • Apache z mpm_event lub mpm_worker: Jeśli używasz Apache z event lub worker jako serwera WWW dla PHP, będziesz musiał skompilować PHP z FPM. Upewnij się, że opcja --enable-fpm jest zdefiniowana w php_source_configure_command. Musisz także upewnić się, że wsparcie Apache dla CGI i event jest zainstalowane (np. instalując apache2-mpm-event i libapache2-mod-fastcgi) oraz że moduł mpm_event jest załadowany.
  • Nginx: Jeśli używasz Nginx jako serwera WWW dla PHP, będziesz musiał skompilować PHP z FPM. Upewnij się, że opcja --enable-fpm jest zdefiniowana w php_source_configure_command.

Zależności

Brak.

Przykład Playbooka

- hosts: webservers
  vars_files:
    - vars/main.yml
  roles:
    - { role: geerlingguy.php }

Wewnątrz 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
  ...

Licencja

MIT / BSD

Informacje o Autorze

Ta rola została stworzona w 2014 roku przez Jeffa Geerlinga, autora Ansible for DevOps.

Zainstaluj
ansible-galaxy install geerlingguy.php
Licencja
mit
Pobrania
10.8M
Właściciel
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns