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-apcu
znajduje się na liściephp_packages
. - Na systemach Debian/Ubuntu: Upewnij się, że
php-apcu
znajduje 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ę, żeapxs2
jest dostępne w twoim systemie (np. instalującapache2-prefork-dev
w Ubuntu), i musisz upewnić się, że opcja--with-apxs2
jest zdefiniowana wphp_source_configure_command
. Wreszcie będziesz musiał upewnić się, że modułmpm_prefork
jest załadowany zamiastmpm_worker
lubmpm_event
, a prawdopodobnie dodać plik konfiguracyjnyphpX.conf
(gdzieX
to główna wersja PHP) do folderu konfiguracyjnego modułu Apache z zawartością jakphp7.conf
. - Apache z
mpm_event
lubmpm_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 wphp_source_configure_command
. Musisz także upewnić się, że wsparcie Apache dla CGI i event jest zainstalowane (np. instalującapache2-mpm-event
ilibapache2-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 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