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-epel や geerlingguy.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-epel や geerlingguy.repo-remi といった追加のリポジトリを有効にしている場合、PHP バージョンをその場で簡単に切り替えたい場合があります。デフォルトでは "present"
に設定されています。この変数を "latest"
にオーバーライドすることで、最新の利用可能なバージョンにアップグレードできます。これに php_enablerepo
を組み合わせることで、ユーザーは異なるリポジトリからインストールする前に、手動で既存の PHP パッケージをアンインストールする必要がなくなります。
php_install_recommends: true
(Debian/Ubuntu のみ)php_packages
をインストールする際に推奨パッケージをインストールするかどうか。推奨パッケージが不要な場合は、明示的に no
に設定した方が良いでしょう(例: Ondrej の php
PPA では、php-pear
を php5.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_ini
が true
に設定されている場合にのみ使用されます。
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_consumption
と php_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-apcu
がphp_packages
リストに含まれていることを確認してください。 - Debian/Ubuntu システムでは:
php-apcu
がphp_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_worker
やmpm_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-event
やlibapache2-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 の著者です。