entanet_devops.ansible_role_php

Rola Ansible: PHP

Status Budowy

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ście php_packages.
  • Na systemach Debian/Ubuntu: Upewnij się, że php-apcu jest w liście php_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ę, że apxs2 jest dostępne w Twoim systemie (np. poprzez zainstalowanie apache2-prefork-dev w Ubuntu) oraz musisz upewnić się, że opcja --with-apxs2 jest zdefiniowana w php_source_configure_command. Na koniec, musisz upewnić się, że moduł mpm_prefork jest załadowany zamiast mpm_worker lub mpm_event, i prawdopodobnie należy dodać plik konfiguracyjny phpX.conf (gdzie X to główna wersja PHP) do folderu konfiguracyjnego modułu Apache z zawartością podobną do php7.conf.
  • Apache z mpm_event lub mpm_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 w php_source_configure_command. Będziesz również potrzebować zainstalowanego wsparcia Apache dla CGI i event (na przykład poprzez zainstalowanie apache2-mpm-event i libapache2-mod-fastcgi) i naładowanego modułu mpm_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 w php_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.

Zainstaluj
ansible-galaxy install entanet_devops.ansible_role_php
Licencja
mit
Pobrania
10k
Właściciel