net2grid.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を使用している場合、libapache2-mod-fastcgi(cgi/PHP-FPM用)またはlibapache2-mod-php7.0(PHPバージョンによって異なるパッケージ)をインストールする必要があります。Apacheでmod_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)を使用している場合は、そのサーバーが動作するデーモンの名前にこの値を変更します。

php_enablerepo: ""

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

php_packages_state: "present"

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

大きなPHPバージョン(例: 5.6, 7.0, 7.1, 7.2)をより簡単に切り替えるために、geerlingguy.php-versionsロールを使用することもできます。

php_install_recommends: true

(Debian/Ubuntuのみ)php_packagesをインストールする際に推奨パッケージをインストールするかどうか。特定のパッケージを推奨するPPAをインストールしている場合(例: Ondrejのphp PPAは、php5.6-cliと一緒にphp-pearをインストールする)、明示的にnoに設定することを検討してください。

php_executable: "php"

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

PHP-FPM

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

このロールを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|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コードを実行するために必要なメモリとファイルスロット(php_opcache_memory_consumption、MB単位、および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 iniディレクティブ。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がコンパイルされるサーバー上のコア数に応じてmakeコマンドをmake --jobs=Xに設定します。これにより、複数のコアがある場合、コンパイル時間が劇的に短縮されます。

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_workermpm_eventの代わりにロードされていることを確認し、おそらくphpX.conf(ここでXはPHPのメジャーバージョン)をApacheモジュール設定フォルダに追加して、内容はphp7.confのようにします。
  • Apacheとmpm_eventまたはmpm_worker: PHPのWebサーバーとしてeventまたはworkerを使用している場合、PHPをFPMでコンパイルする必要があります。php_source_configure_command--enable-fpmオプションが定義されていることを確認してください。また、ApacheのCGIおよびeventサポートがインストールされていること(例: apache2-mpm-eventlibapache2-mod-fastcgiをインストール)を確認し、mpm_eventモジュールがロードされていることを確認してください。
  • Nginx: PHPのWebサーバーとしてNginxを使用している場合、PHPをFPMでコンパイルする必要があります。php_source_configure_command--enable-fpmオプションが定義されていることを確認してください。

依存関係

なし。

例 Playbook

- 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 net2grid.php
ライセンス
mit
ダウンロード
274
所有者
We empower energy retailers to help consumers become energy efficient by unlocking value from Smart Meter data