entanet_devops.ansible_role_php

Ansible ロール: PHP

ビルドステータス

RedHat/CentOS と Debian/Ubuntu サーバーに PHP をインストールします。

要件

古い LTS リリースの Ubuntu や RHEL を使用していて、古いバージョンの PHP を実行している場合、現在サポートされている PHP バージョンを維持しているリポジトリや PPA を使用する必要があります。このロールは PHP コミュニティが現在サポートしているバージョン のみで動作します。

ロール変数

利用可能な変数は以下にリストされており、デフォルト値も示しています(defaults/main.yml を参照):

php_packages: []

インストールする PHP パッケージのリスト(デフォルトでは OS 固有)。一般的には php, php-cli, php-devel, php-pdo などのパッケージをインストールしたいです。他にも必要なパッケージ(例: 画像操作用の php-gd, 認証用に LDAP サーバーに接続する際の php-ldap など)を追加できます。

注意: Debian/Ubuntu を使用している場合、mod_php を Apache と一緒に使用したい場合は、 libapache2-mod-fastcgi(cgi/PHP-FPM 用)または libapache2-mod-php7.0(または PHP バージョンに応じた類似のパッケージ)をインストールする必要があります。

php_packages_extra: []

デフォルトリストをオーバーライドせずにインストールする追加の PHP パッケージのリスト。

php_enable_webserver: true

PHP の使用がウェブサーバー(例: Apache や Nginx)に関連付けられている場合は、このデフォルト値のままにします。サーバーサイドの PHP や小規模なアプリケーションを実行する場合は、この値を false に設定し、このロールがウェブサーバーと相互作用しないようにします。

php_webserver_daemon: "httpd"

HTTP サーバーデーモンのデフォルト値は、RedHat/CentOS では httpd(Apache 用)、Debian/Ubuntu では apache2(これも Apache 用)です。他のウェブサーバー(例: nginx)を実行している場合は、この値をそのサーバーが実行されるデーモンの名前に変更します。

php_enablerepo: ""

(RedHat/CentOS のみ)追加のリポジトリを有効にしている場合(例: geerlingguy.repo-epelgeerlingguy.repo-remi)、この変数にリポジトリを指定できます(例: remi-php70,epel)。例えば、Remi リポジトリにある最新の PHP 7.0 をインストールしたい場合に便利です。

php_default_version_debian: "7.0"

(Debian/Ubuntu のみ)与えられた OS バージョンのリポジトリにおける PHP のデフォルトバージョン。最新の Ubuntu LTS リリースがデフォルト。「Ubuntu 18.04」では、デフォルトの bionic パッケージには PHP 7.0 がないため、 "7.2" に設定する必要があります。

PHP バージョンを簡単に切り替えたい場合や、システムパッケージにないバージョンを使用したい場合: geerlingguy.php-versions ロールを使用して、主要な PHP バージョン(例: 5.6, 7.1, 7.2)間をより簡単に切り替えることができます。

php_packages_state: "present"

もし geerlingguy.repo-epelgeerlingguy.repo-remi といった追加のリポジトリを有効にしている場合、PHP バージョンをその場で簡単に切り替えたい場合があります。デフォルトでは "present" に設定されています。この変数を "latest" にオーバーライドすることで、最新の利用可能なバージョンにアップグレードできます。これに php_enablerepo を組み合わせることで、ユーザーは異なるリポジトリからインストールする前に、手動で既存の PHP パッケージをアンインストールする必要がなくなります。

php_install_recommends: true

(Debian/Ubuntu のみ)php_packages をインストールする際に推奨パッケージをインストールするかどうか。推奨パッケージが不要な場合は、明示的に no に設定した方が良いでしょう(例: Ondrej の php PPA では、php-pearphp5.6-cli と一緒にインストールすると php7.0-cli がインストールされるため、通常は望まれないことが多いです!)。

php_executable: "php"

コマンドラインから PHP を呼び出すための実行可能ファイル。サーバーでの php が正しい実行可能ファイルを対象としていない場合や、RHEL/CentOS でソフトウェアコレクションを使用して異なる PHP バージョンを対象にする必要がある場合にのみ変更してください。

PHP-FPM

PHP-FPM は PHP 用のシンプルで堅牢な FastCGI プロセスマネージャーです。PHP アプリのスケーリングを劇的に容易にし、Nginx などのウェブサーバーを使用する際に PHP ベースのサイトやアプリを実行する通常の方法です(他のウェブサーバーでも同様に使用できます)。

このロールを使用して PHP を php-fpm として実行する場合、次の変数を true に設定する必要があります。

php_enable_php_fpm: false

Apache を使用している場合は、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

デフォルトの www.conf PHP-FPM プール内の特定の設定です。追加の設定を管理したい場合は、自分のテンプレートでファイルを置き換えるか、このロールが tasks/configure-fpm.yml 内で行うように lineinfile を使用して行うことができます。

php.ini 設定

php_use_managed_ini: true

デフォルトで、以下のすべての追加デフォルト設定は、このロールに含まれる php.ini を通じて適用されます。設定の柔軟性が必要な場合は、これを false に設定し、自分で php.ini ファイルを管理することができます(この場合、以下の変数はすべて無視されます)。

php_fpm_pool_user: "[apache|nginx|その他]" # デフォルトは OS によって異なります
php_fpm_pool_group: "[apache|nginx|その他]" # デフォルトは 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 のさまざまなデフォルト設定。php_use_managed_initrue に設定されている場合にのみ使用されます。

OpCache に関する変数

OpCache は PHP 5.5 から含まれており、以下の変数はインストールされている PHP のバージョンが 5.5 以上の場合にのみ有効になります。

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"

ポストスクリプト opcache の設定指令は、システム上でしばしばカスタマイズされます。実行しているすべての PHP コードを含むように十分なメモリとファイルスロットが OpCache に割り当てられていることを確認してください(php_opcache_memory_consumptionphp_opcache_max_accelerated_files)。そうでないと、パフォーマンスが最適でない可能性があります!

カスタム opcache.so の場所を提供するには、php_opcache_zend_extension でフルパスを指定してください。

php_opcache_conf_filename: [プラットフォーム固有]

プラットフォーム固有の opcache 設定ファイル名。通常はデフォルトで動作しますが、一部の場合はファイル名をオーバーライドする必要があります。

APCu に関する変数

php_enable_apc: true

APCu を有効にするかどうか。これが false に設定されている場合、他の APCu 変数は無効になります。

php_apc_shm_size: "96M"
php_apc_enable_cli: "0"

システム上でしばしばカスタマイズされる APCu の設定指令。 php_apc_shm_size を設定して、すべてのキャッシュエントリがメモリに保持されるようにし(小さなオーバーヘッドを持つ)、APC のフラグメンテーションやメモリ不足が PHP のパフォーマンスを大幅に低下させることのないようにします。

php_apc_conf_filename: [プラットフォーム固有]

プラットフォーム固有の APC 設定ファイル名。通常はデフォルトで動作しますが、一部の場合はファイル名をオーバーライドする必要があります。

APC がインストールされていることを確認する

APC を使用する場合は、APC がインストールされていることを確認する必要があります(デフォルトではインストールされていますが、php_packages リストをカスタマイズする場合は、リストに APC を含める必要があります):

  • RHEL/CentOS システムでは: php-pecl-apcuphp_packages リストに含まれていることを確認してください。
  • Debian/Ubuntu システムでは: php-apcuphp_packages リストに含まれていることを確認してください。

ソースからのインストール

特定の PHP バージョンが必要な場合や、最新の(例: master)バージョンをテストしたい場合は、プラットフォームのパッケージマネージャーに適したパッケージがすでに存在しない可能性があります。この場合、直接コンパイルして PHP をソースからインストールすることができる選択肢があります。

ソースコンパイルはパッケージからのインストールよりも はるかに 時間がかかります(たとえば、PHP HEAD のコンパイルには現代のクアッドコアコンピューターで 5 分以上かかりますが、参考までに)。

php_install_from_source: false

パッケージからインストールするのではなく、ソースから PHP をインストールするには、これを true に設定します。

php_source_version: "master"

ソースからインストールする PHP のバージョン(git ブランチ、タグ、またはコミットハッシュ)。

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"

ソースをクローンしてインストールする場所、および GMP ヘッダーファイルの場所(プラットフォーム/ディストリビューションに固有の可能性があります)。

php_source_make_command: "make"

PHP をコンパイルしているサーバーにあるコアの数を X とする make --jobs=X コマンドに設定します。コアが複数ある場合、コンパイル時間を大幅に短縮できます。

php_source_configure_command: >
  [...]

PHP のコンパイルに使用する Makefile を構築するための ./configure コマンド。特定の環境に必要なすべてのオプションを追加します。折りたたみスカラーを使用することで、変数を複数行に渡って定義でき、可読性やソース管理にとって非常に便利です!

特定の構成に対するいくつかのメモや注意点:

  • mpm_prefork での Apache: PHP のウェブサーバーとして prefork を使う場合、apxs2 がシステム上で利用可能であることを確認する必要があります(例: Ubuntu で apache2-prefork-dev をインストールする)、また php_source_configure_command--with-apxs2 オプションが定義されていることを確認する必要があります。最後に、mpm_prefork モジュールがロードされていて、mpm_workermpm_event ではなく、phpX.conf(ここで X は PHP のメジャーバージョン)の設定ファイルが Apache モジュール設定フォルダーに追加され、php7.conf のような内容が含まれていることを確認してください。
  • mpm_event または mpm_worker での Apache: PHP のウェブサーバーとして event または worker を使う場合、FPM でコンパイルされた PHP が必要です。php_source_configure_command--enable-fpm オプションが定義されていることを確認してください。また、Apache の CGI および event のサポートがインストールされていることを確認する必要があります(例: apache2-mpm-eventlibapache2-mod-fastcgi をインストールする)、および mpm_event モジュールがロードされていることを確認します。
  • Nginx: PHP のウェブサーバーとして Nginx を使用する場合、FPM でコンパイルされた PHP が必要です。php_source_configure_command--enable-fpm オプションが定義されていることを確認してください。

依存関係

なし。

例のプレイブック

- hosts: webservers
  vars_files:
    - vars/main.yml
  roles:
    - { role: geerlingguy.php }

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
  ...

ライセンス

MIT / BSD

著者情報

このロールは 2014 年に Jeff Geerling によって作成され、Ansible for DevOps の著者です。

プロジェクトについて

PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.

インストール
ansible-galaxy install entanet_devops.ansible_role_php
ライセンス
mit
ダウンロード
10k
所有者