net2grid.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 aktualizowaną wersją PHP, ponieważ ta rola działa tylko z wersjami PHP, które są obecnie wspierane przez społeczność PHP.
Zmienne roli
Dostępne zmienne są wymienione poniżej wraz z domyślnymi wartościami (patrz defaults/main.yml
):
php_packages: []
Lista pakietów PHP do zainstalowania (domyślnie specyficzna dla systemu operacyjnego). Prawdopodobnie chcesz zainstalować typowe pakiety takie 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 musisz połączyć się z serwerem LDAP w celu autoryzacji).
Uwaga: Jeśli używasz Debian/Ubuntu, musisz również zainstalować libapache2-mod-fastcgi
(dla 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ązku z serwerem WWW (np. Apache lub Nginx), zostaw tę wartość domyślną. Jeśli używasz PHP po stronie serwera lub do uruchamiania jakiejś małej aplikacji, ustaw tę wartość na false
, aby ta rola nie próbowała współpracować 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 uruchamiasz inny serwer 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żesz na przykład zastosować 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 znajduje się w repozytorium Remi.
php_packages_state: "present"
Jeśli włączyłeś dodatkowe repozytoria, takie jak geerlingguy.repo-epel lub geerlingguy.repo-remi, możesz chcieć łatwego sposobu na szybką wymianę wersji PHP. Domyślnie jest to 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 instalowaniem ich z innego repozytorium.
Możesz także używać roli geerlingguy.php-versions
do łatwiejszego przełączania się między głównymi wersjami PHP (np. 5.6, 7.0, 7.1, 7.2).
php_install_recommends: true
(Tylko Debian/Ubuntu) Czy instalować zalecane pakiety podczas instalacji php_packages
; możesz chcieć wyraźnie ustawić to na no
, jeśli instalujesz PPA, które zaleca 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 nie jest pożądane!).
php_executable: "php"
Wykonywalny plik do uruchomienia podczas wywoływania PHP z linii poleceń. Powinieneś to zmienić tylko wtedy, gdy uruchomienie php
na twoim serwerze nie wskazuje na odpowiedni wykonawczy plik lub jeśli korzystasz z 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 witryn i aplikacji PHP w przypadku używania serwera WWW, takiego jak Nginx (chociaż można go używać z innymi serwerami WWW równie łatwo).
Kiedy używasz tej roli, uruchamiając PHP jako php-fpm
zamiast jako proces wewnątrz serwera WWW (np. mod_php
Apache), musisz ustawić następującą zmienną na true
:
php_enable_php_fpm: false
Jeśli używasz 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 w domyślnym www.conf
dla puli PHP-FPM. Jeśli chcesz zarządzać dodatkowymi ustawieniami, możesz to zrobić, zastępując plik własnym szablonem lub używając lineinfile
, jak robi ta rola wewnątrz tasks/configure-fpm.yml
.
Ustawienia php.ini
php_use_managed_ini: true
Domyślnie wszystkie dodatkowe domyślne wartości poniżej są stosowane przez plik php.ini dołączony do tej roli. Możesz samodzielnie zarządzać swoim plikiem php.ini (jeśli potrzebujesz więcej 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óżne w zależności od systemu
php_fpm_pool_group: "[apache|nginx|inne]" # domyślnie różne w zależności od systemu
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 wtedy, gdy php_use_managed_ini
jest ustawione na true
.
Zmienne związane z OpCache
OpCache jest dołączony do PHP, począwszy od wersji 5.5, a poniższe zmienne będą miały skutek tylko wtedy, gdy zainstalowana wersja PHP będzie wynosiła 5.5 lub więcej.
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ąco dużo pamięci i slotów plików 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 określić lokalizację opcache.so, dostarcz pełną ścieżkę z php_opcache_zend_extension
.
php_opcache_conf_filename: [specyficzne dla platformy]
Specyficzna dla platformy nazwa pliku konfiguracyjnego opcache. Zazwyczaj domyślne powinno działać, ale w niektórych przypadkach może być konieczne nadpisanie nazwy pliku.
Zmienne związane z APCu
php_enable_apc: true
Czy włączyć APCu. Inne zmienne APCu będą nieskuteczne, jeśli to będzie ustawione na false.
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 w pamięci z małym narzutem (fragmentacja lub brak pamięci w APC spowodują znaczne spowolnienie PHP).
php_apc_conf_filename: [specyficzne dla platformy]
Specyficzna dla platformy nazwa pliku konfiguracyjnego APC. Zazwyczaj domyślne powinno działać, ale w niektórych przypadkach może być konieczne nadpisanie nazwy pliku.
Upewnienie się, że APC jest zainstalowane
Jeśli używasz APC, musisz upewnić się, że APC jest zainstalowane (jest instalowane domyślnie, ale jeśli dostosowujesz listę php_packages
, musisz uwzględnić APC w tej liście):
- Na systemach RHEL/CentOS: Upewnij się, że
php-pecl-apcu
jest na liściephp_packages
. - Na systemach Debian/Ubuntu: Upewnij się, że
php-apcu
jest na liściephp_packages
.
Instalowanie z źródła
Jeśli potrzebujesz określonej wersji PHP lub chcesz przetestować najnowszą wersję (np. wersję master), istnieje duże prawdopodobieństwo, że odpowiedni pakiet nie jest już dostępny w menedżerze pakietów twojej platformy. W takich przypadkach możesz wybrać instalację PHP ze źródła, kompilując go bezpośrednio.
Zauważ, że kompilacja ze źródła zajmuje znacznie więcej czasu niż instalacja z pakietów (PHP HEAD zajmuje ponad 5 minut, aby skompilować na nowoczesnym komputerze z czterema rdzeniami, jako odniesienie).
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 skrót do komitu).
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, gdzie kod źródłowy zostanie sklonowany i zainstalowany oraz lokalizacja nagłówka GMP (co może być specyficzne dla platformy/ Distro).
php_source_make_command: "make"
Ustaw polecenie make na make --jobs=X
, gdzie X
to liczba rdzeni dostępnych na serwerze, na którym kompilujesz PHP. Znacznie przyspieszy to czasy kompilacji, jeśli masz wiele rdzeni.
php_source_configure_command: >
[...]
Polecenie ./configure
, które zbuduje plik Makefile do użycia przy kompilacji PHP. Dodaj wszystkie opcje, które potrzebujesz dla swojego konkretnego środowiska. Użycie złożonego skalarnego (>
) pozwala na definiowanie zmiennej na wielu liniach, co jest niezwykle pomocne dla czytelności i kontroli źródła!
Kilka innych uwag/ostrzeżeń dotyczących specyficznych konfiguracji:
- Apache z
mpm_prefork
: Jeśli używasz Apache z preforkiem jako serwerem WWW dla PHP, musisz upewnić się, żeapxs2
jest dostępne na twoim systemie (np. instalującapache2-prefork-dev
w Ubuntu) i będziesz musiał 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
oraz prawdopodobnie dodać plik konfiguracyjnyphpX.conf
(gdzieX
to główna wersja PHP) do folderu konfiguracyjnego modułu Apache z treścią podobną dophp7.conf
. - Apache z
mpm_event
lubmpm_worker
: Jeśli używasz Apache z event lub worker jako serwerem WWW dla PHP, musisz skompilować PHP z FPM. Upewnij się, że opcja--enable-fpm
jest zdefiniowana wphp_source_configure_command
. Musisz także upewnić się, że Apache ma zainstalowaną obsługę CGI i event (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, musisz 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 }
W pliku 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 net2grid.php