apham0001.php

Ansibleロール: PHP

ビルドステータス

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

要件

古いLTSリリースのUbuntuまたはRHELを使用している場合、古いPHPのバージョンでは、このロールはPHPコミュニティによって現在サポートされているPHPバージョンとしか動作しませんので、メンテナンスされているPHPのバージョンを持つリポジトリやPPAを使用する必要があります。

ロール変数

使用可能な変数は以下に示されており、デフォルト値と共に記載されています(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: "7.0"

(Debian/Ubuntuのみ)指定されたOSバージョンリポジトリ内のPHPのデフォルトバージョン。デフォルトは最新のUbuntu LTSリリースです。Ubuntu 18.04では、PHP 7.0がデフォルトのbionicパッケージにないため、これを"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をインストールする際に推奨パッケージをインストールするかどうか。特定のパッケージを推奨するPPAをインストールしている場合(例:Ondrejのphp PPAがphp-pearをインストールするとphp7.0-cliもインストールする場合など)、これを明示的にnoに設定した方が良いかもしれません。

php_executable: "php"

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

PHP-FPM

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

このロールをPHPがWebサーバー(例:Apacheのmod_php)内部のプロセスではなく、php-fpmとして実行する場合、以下の変数をtrueに設定する必要があります:

php_enable_php_fpm: false

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

php_fpm_pools:
  - php_fpm_pool: www
    php_fpm_user: www
    php_fpm_group: www
    php_fpm_listen: /run/php/php7.3-fpm.sock
    php_fpm_pm_max_children: 5
    php_fpm_pm_start_servers: 2
    php_fpm_pm_min_spare_servers: 1
    php_fpm_pm_max_spare_servers: 3
    php_fpm_pm_process_idle_timeout: 10s
    php_fpm_pm_max_requests: 0
    php_fpm_request_slowlog_timeout: 0
    php_fpm_request_terminate_timeout: 0
    php_fpm_rlimits_files: 1024
    php_fpm_admin_value_sendmail_path: [email protected]
    extra_parameters: |
      php_admin_value[memory_limit] = 128M

php.ini設定

php_use_managed_ini: true

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

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のための様々なデフォルト。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)。そうでない場合、最適なパフォーマンスが得られない可能性があります!

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

php_opcache_conf_filename: [platform-specific]

プラットフォーム固有のopcache設定ファイル名。一般的にデフォルトで動作しますが、一部の場合ではファイル名を上書きする必要があるかもしれません。

APCu関連変数

php_enable_apc: true

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

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"

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

php_source_make_command: "make"

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

php_source_configure_command: >
  [...]

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

特定の設定に関するいくつかの注意点:

  • Apacheとmpm_prefork: PHPのWebサーバーとしてpreforkを使用している場合、システム上でapxs2が利用可能であることを確認する必要があります(例えば、Ubuntuでapache2-prefork-devをインストールするなど)。php_source_configure_command--with-apxs2オプションを定義する必要があります。最後に、mpm_preforkモジュールがmpm_workerまたはmpm_eventの代わりにロードされていることを確認し、PHPのメジャーバージョンを含むphpX.confXはPHPのメジャーバージョン)設定ファイルをApacheモジュール設定フォルダに追加する必要があります。
  • Apacheとmpm_eventまたはmpm_worker: PHPのWebサーバーとしてeventまたはworkerを使用している場合、PHPをFPMでコンパイルする必要があります。php_source_configure_command--enable-fpmオプションを定義してください。また、ApacheのCGIおよびeventサポートがインストールされていること(例えば、apache2-mpm-eventおよびlibapache2-mod-fastcgiをインストールなど)と、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

著者情報

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

プロジェクトについて

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

インストール
ansible-galaxy install apham0001.php
ライセンス
mit
ダウンロード
288
所有者