geerlingguy.php
Rola Ansible: PHP
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-apcuznajduje się na liściephp_packages. - Na systemach Debian/Ubuntu: Upewnij się, że
php-apcuznajduje się na liściephp_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ę, żeapxs2jest dostępne w twoim systemie (np. instalującapache2-prefork-devw Ubuntu), i musisz upewnić się, że opcja--with-apxs2jest zdefiniowana wphp_source_configure_command. Wreszcie będziesz musiał upewnić się, że modułmpm_preforkjest załadowany zamiastmpm_workerlubmpm_event, a prawdopodobnie dodać plik konfiguracyjnyphpX.conf(gdzieXto główna wersja PHP) do folderu konfiguracyjnego modułu Apache z zawartością jakphp7.conf. - Apache z
mpm_eventlubmpm_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-fpmjest zdefiniowana wphp_source_configure_command. Musisz także upewnić się, że wsparcie Apache dla CGI i event jest zainstalowane (np. instalującapache2-mpm-eventilibapache2-mod-fastcgi) oraz że modułmpm_eventjest 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-fpmjest zdefiniowana wphp_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.
PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
ansible-galaxy install geerlingguy.php