geerlingguy.php

Ansibleロール: PHP

CI

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

必要条件

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

ロールの変数

使用可能な変数は以下に示し、デフォルト値も記載します(defaults/main.yml参照):

php_packages: []

インストールするPHPパッケージのリスト(デフォルトではOS固有)。一般的にはphpphp-cliphp-develphp-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の使用がWebサーバー(例:ApacheやNginx)に関連している場合は、デフォルト値のままにしてください。PHPサーバーサイドや小さなアプリケーションを実行する場合は、falseに設定して、このロールがWebサーバーと相互作用を試みないようにします。

php_webserver_daemon: "httpd"

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

php_enablerepo: ""

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

php_default_version_debian: ""

(Debian/Ubuntuのみ)指定されたOSバージョンのリポジトリ内のデフォルトのPHPバージョン。特定のバージョンはディストリビューションおよびバージョンによって異なりますが、ここに値を提供して上書きすることができます(例: "7.4")。

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では、php5.6-cliと一緒にphp-pearをインストールするとphp7.0-cliもインストールされます…これは望ましくないことが多いです!)。

php_executable: "php"

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

PHP-FPM

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

このロールをphp-fpmとしてWebサーバーのプロセス内で実行する代わりに使用する場合は、以下の変数をtrueに設定する必要があります:

php_enable_php_fpm: false

Apacheを使用している場合、geerlingguy.apache-php-fpmロールを使用してPHP-FPMが動作するように簡単に設定できます。

php_fpm_state: started
php_fpm_enabled_on_boot: true

fpmデーモンの状態を制御します。FPMをインストールして設定したいが実行しない場合は、これらをstoppedfalseに設定します(例: コンテナにインストールする場合)。

php_fpm_handler_state: restarted

ハンドラーはデフォルトでPHP-FPMを再起動します。値をreloadedに設定すると、サービスが再起動するのではなく再読み込みされます。

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

作成するPHP-FPMプールのリスト。デフォルトでwwwプールが作成されます。新しいプールを設定するには、php_fpm_poolsリストにアイテムを追加します。

デフォルトのwww.conf.j2 PHP-FPMプール内の特定の設定。追加の設定を管理したい場合は、pool_templateを使用して独自のテンプレートに置き換えることで行えます。

php.ini設定

php_use_managed_ini: true

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

php_fpm_pool_user: "[apache|nginx|other]" # OSによりデフォルトが異なります
php_fpm_pool_group: "[apache|nginx|other]" # 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"

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のiniディレクティブ。全てのPHPコードを実行するために十分なメモリとファイルスロットをOpCacheに割り当てていることを確認してください(php_opcache_memory_consumptionはMB単位、php_opcache_max_accelerated_filesはPHPコードを実行するためのファイル数です)。そうしないと、パフォーマンスが最適でない場合があります!

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

php_opcache_conf_filename: [platform-specific]

プラットフォーム固有のopcache設定ファイル名。デフォルトは通常機能しますが、場合によってはファイル名を上書きする必要があります。

APCu関連の変数

php_enable_apc: true

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

php_apc_shm_size: "96M"
php_apc_enable_cli: "0"

システムで一般的にカスタマイズされるAPCuのiniディレクティブ。php_apc_shm_sizeを設定すると、少しのオーバーヘッドで全てのキャッシュエントリをメモリに保持できます(フラグメンテーションやAPCがメモリ不足になると、PHPの動作が劇的に遅くなります)。

php_apc_conf_filename: [platform-specific]

プラットフォーム固有の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

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

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"
php_source_mysql_config: "/usr/bin/mysql_config"

ソースがクローニングされてインストールされる場所、GMPヘッダーの場所(これはプラットフォームやディストリビューション固有)、およびmysql_configバイナリの場所(これは新しいOSバージョンではmariadb_configである場合があります)。

php_source_make_command: "make"

サーバーでPHPがコンパイルされる時に利用可能なコアの数に応じて、makeコマンドを make --jobs=Xに設定します。これにより、コンパイル時間が劇的に短縮されます。

php_source_configure_command: >
  [...]

PHPのコンパイルに使用されるMakefileをビルドする./configureコマンド。特定の環境に必要なすべてのオプションを追加します。折りたたみスカラー(>)を使用すると、可読性とソース管理に役立つ複数行にわたって変数を定義できます。

特定の構成に関するいくつかの注意/警告:

  • Apacheとmpm_prefork: PHPのWebサーバーとしてプレフォークを使用している場合は、apxs2がシステムにあることを確認する必要があります(例:Ubuntuではapache2-prefork-devをインストール)、また、php_source_configure_command--with-apxs2オプションが定義されている必要があります。最後に、mpm_preforkモジュールが読み込まれていること、およびphpX.conf(ここでXはPHPのメジャーバージョン)設定ファイルをApacheモジュール設定フォルダに追加する必要があります。
  • Apacheとmpm_eventまたはmpm_worker: PHPのWebサーバーとしてイベントまたはワーカーを使用している場合は、PHPをFPMでコンパイルする必要があります。php_source_configure_command--enable-fpmオプションが定義されていることを確認してください。また、ApacheのCGIおよびイベントサポートがインストールされていること、およびmpm_eventモジュールが読み込まれていることを確認してください。
  • Nginx: PHPのWebサーバーとしてNginxを使用している場合、PHPをFPMでコンパイルする必要があります。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

著者情報

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

プロジェクトについて

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

インストール
ansible-galaxy install geerlingguy.php
ライセンス
mit
ダウンロード
10.8M
所有者
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns