entanet_devops.ansible_role_php
Rola Ansible: PHP
Instaluje PHP na serwerach RedHat/CentOS oraz Debian/Ubuntu.
Wymagania
Jeśli używasz starszej wersji LTS Ubuntu lub RHEL z przestarzałą wersją PHP, musisz korzystać z repozytorium lub PPA, które zawiera aktualizowaną wersję PHP, ponieważ ta rola działa tylko z obecnie 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 specyficznych dla systemu operacyjnego). Prawdopodobnie będziesz chciał zainstalować popularne pakiety jak php, php-cli, php-devel i php-pdo, a także możesz dodać inne pakiety, które chcesz (na przykład php-gd do manipulacji obrazami, lub php-ldap jeśli potrzebujesz połączenia z serwerem LDAP do autoryzacji).
Uwaga: Jeśli korzystasz z Debian/Ubuntu, musisz także zainstalować libapache2-mod-fastcgi (do cgi/PHP-FPM) lub libapache2-mod-php7.0 (lub 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 używasz PHP związanie z serwerem webowym (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 interakcjonować z serwerem webowym.
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 webowego (na przykład nginx), zmień tę wartość na nazwę demona, pod którym działa serwer webowy.
php_enablerepo: ""
(Tylko RedHat/CentOS) Jeśli włączyłeś dodatkowe repozytoria (polecam geerlingguy.repo-epel lub geerlingguy.repo-remi), te repozytoria mogą być wymienione w tej zmiennej (np. remi-php70,epel). Może to być przydatne, np. jeśli chcesz zainstalować najnowszą wersję PHP 7.0, która znajduje się w repozytorium Remi.
php_default_version_debian: "7.0"
(Tylko Debian/Ubuntu) Domyślna wersja PHP w repozytoriach danego systemu operacyjnego. Domyślnie jest ustawiona na najnowszą wersję LTS Ubuntu. Ubuntu 18.04 wymaga ustawienia tego na "7.2", ponieważ PHP 7.0 nie jest dostępne w domyślnych pakietach bionic.
Jeśli chcesz mieć możliwość łatwego przełączania wersji PHP lub korzystać z 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 wymianę wersji PHP na bieżąco. 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 instalacją z innego repozytorium.
php_install_recommends: true
(Tylko Debian/Ubuntu) Czy instalować pakiety rekomendowane przy instalacji php_packages; możesz ustawić to na no, jeśli instalujesz PPA, które rekomenduje pewne pakiety, których nie chcesz (np. PPA Ondreja php zainstaluje php7.0-cli, jeśli zainstalujesz php-pear obok php5.6-cli... co często jest niepożądane!).
php_executable: "php"
Wykonywalny plik do uruchomienia, gdy wywołujesz PHP z wiersza poleceń. Powinieneś zmienić to tylko wtedy, gdy php na Twoim serwerze nie wskazuje na poprawny wykonywalny plik, lub jeśli korzystasz z kolekcji oprogramowania na RHEL/CentOS i musisz skierować na inną wersję PHP.
PHP-FPM
PHP-FPM to prosty i niezawodny menedżer procesów FastCGI dla PHP. Może znacznie ułatwić skalowanie aplikacji PHP i jest normalnym sposobem uruchamiania stron i aplikacji bazujących na PHP, gdy korzystasz z serwera webowego jak Nginx (choć może być używany z innymi serwerami webowymi równie łatwo).
Kiedy używasz tej roli z PHP uruchomionym jako php-fpm zamiast jako procesu wewnątrz serwera webowego (np. mod_php Apache), musisz ustawić następującą zmienną na true:
php_enable_php_fpm: false
Jeśli korzystasz z Apache, możesz łatwo skonfigurować go do współpracy z PHP-FPM używając roli geerlingguy.apache-php-fpm.
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
Specyficzne ustawienia dla domyślnej puli PHP-FPM www.conf. Jeśli chcesz zarządzać dodatkowymi ustawieniami, możesz to zrobić, zastępując plik własnym szablonem lub używając lineinfile, jak ta rola robi w tasks/configure-fpm.yml.
Ustawienia php.ini
php_use_managed_ini: true
Domyślnie wszystkie dodatkowe domyślne ustawienia poniżej są stosowane przez php.ini dołączony z tą rolą. Możesz samodzielnie zarządzać swoim plikiem php.ini (jeśli potrzebujesz większej elastyczności w swojej 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: []
Różne domyślne wartości dla PHP. Używane tylko, jeśli php_use_managed_ini jest ustawione na true.
Zmienne związane z OpCache
OpCache jest włączony w PHP od wersji 5.5, a poniższe zmienne będą miały wpływ tylko wtedy, gdy zainstalowana wersja PHP to 5.5 lub wyższa.
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ć gorszą wydajność!
Aby dostarczyć lokalizację opcache.so, podaj pełną ścieżkę z php_opcache_zend_extension.
php_opcache_conf_filename: [specyficzny dla platformy]
Konfiguracja OpCache specyficzna dla platformy. Zazwyczaj domyślnie powinno działać, ale w niektórych przypadkach możesz potrzebować zmienić nazwę pliku.
Zmienne związane z APCu
php_enable_apc: true
Czy włączyć APCu. Inne zmienne APCu będą bezskuteczne, 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 mieścił wszystkie wpisy w pamięci przy niewielkim narzucie (fragmentacja lub brak pamięci w APC mogą znacząco spowolnić działanie PHP).
php_apc_conf_filename: [specyficzny dla platformy]
Nazwa pliku konfiguracji APC specyficzna dla platformy. Zazwyczaj domyślnie powinno działać, ale w niektórych przypadkach możesz potrzebować zmienić nazwę pliku.
Zapewnienie, że APC jest zainstalowane
Jeśli używasz APC, musisz upewnić się, że APC jest zainstalowane (jest instalowane domyślnie, ale jeśli dostosujesz listę php_packages, musisz uwzględnić APC na liście):
- Na systemach RHEL/CentOS: Upewnij się, że
php-pecl-apcujest w liściephp_packages. - Na systemach Debian/Ubuntu: Upewnij się, że
php-apcujest w liściephp_packages.
Instalacja z Źródła
Jeśli potrzebujesz konkretnej wersji PHP lub chcesz przetestować najnowszą wersję (np. master), istnieje duża szansa, że nie ma odpowiedniego pakietu dostępnego w menedżerze pakietów Twojej platformy. W takich przypadkach możesz wybrać instalację PHP z źródła, kompilując go bezpośrednio.
Należy zauważyć, że kompilacja ze źródła trwa dużo dłużej niż instalacja z pakietów (PHP HEAD zajmuje ponad 5 minut na nowoczesnym komputerze czterordzeniowym, na przykład).
php_install_from_source: false
Ustaw to na true, aby zainstalować PHP z źródła zamiast instalować z pakietów.
php_source_version: "master"
Wersja PHP do zainstalowania ze źródła (gałąź git, tag lub hash commit).
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"
Lokalizacja, w której źródło będzie klonowane i instalowane, oraz lokalizacja pliku nagłówkowego GMP (który może być specyficzny dla platformy/dystrybucji).
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. Przyspieszy to czasy kompilacji znacznie, jeśli masz wiele rdzeni.
php_source_configure_command: >
[...]
Polecenie ./configure, które zbuduje Makefile do użycia podczas kompilacji PHP. Dodaj wszystkie opcje, które potrzebujesz do swojego konkretnego środowiska. Używanie złożonego skalarnego (>) pozwala zdefiniować zmienną w wielu wierszach, co jest niezwykle pomocne dla czytelności i kontroli wersji!
Kilka innych uwag/ostrzeżeń dotyczących specyficznych konfiguracji:
- Apache z
mpm_prefork: Jeśli używasz Apache z prefork jako serwera webowego dla PHP, musisz upewnić się, żeapxs2jest dostępne w Twoim systemie (np. poprzez zainstalowanieapache2-prefork-devw Ubuntu) oraz musisz upewnić się, że opcja--with-apxs2jest zdefiniowana wphp_source_configure_command. Na koniec, musisz upewnić się, że modułmpm_preforkjest załadowany zamiastmpm_workerlubmpm_event, i prawdopodobnie należy dodać plik konfiguracyjnyphpX.conf(gdzieXto główna wersja PHP) do folderu konfiguracyjnego modułu Apache z zawartością podobną dophp7.conf. - Apache z
mpm_eventlubmpm_worker: Jeśli używasz Apache z event lub worker jako serwera webowego dla PHP, musisz skompilować PHP z FPM. Upewnij się, że opcja--enable-fpmjest zdefiniowana wphp_source_configure_command. Będziesz również potrzebować zainstalowanego wsparcia Apache dla CGI i event (na przykład poprzez zainstalowanieapache2-mpm-eventilibapache2-mod-fastcgi) i naładowanego modułumpm_event. - Nginx: Jeśli używasz Nginx jako serwera webowego dla PHP, musisz skompilować PHP z FPM. Upewnij się, że opcja
--enable-fpmjest zdefiniowana wphp_source_configure_command.
Zależności
Brak.
Przykładowy Playbook
- 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 entanet_devops.ansible_role_php