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-apcu
jest w liściephp_packages
. - Na systemach Debian/Ubuntu: Upewnij się, że
php-apcu
jest 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ę, żeapxs2
jest dostępne w Twoim systemie (np. poprzez zainstalowanieapache2-prefork-dev
w Ubuntu) oraz musisz upewnić się, że opcja--with-apxs2
jest zdefiniowana wphp_source_configure_command
. Na koniec, musisz upewnić się, że modułmpm_prefork
jest załadowany zamiastmpm_worker
lubmpm_event
, i prawdopodobnie należy dodać plik konfiguracyjnyphpX.conf
(gdzieX
to główna wersja PHP) do folderu konfiguracyjnego modułu Apache z zawartością podobną dophp7.conf
. - Apache z
mpm_event
lubmpm_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-fpm
jest zdefiniowana wphp_source_configure_command
. Będziesz również potrzebować zainstalowanego wsparcia Apache dla CGI i event (na przykład poprzez zainstalowanieapache2-mpm-event
ilibapache2-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-fpm
jest 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