bbatsche.PHP
Ansible PHPサイトロール
このAnsibleロールは、指定されたバージョンのPHPをサーバーにインストールし、PHPを実行するNginxサイトを設定します。このロールはPhpenvを使用して、異なるバージョンのPHPを管理します。PHPの5.2から7.2までの任意のバージョンをインストールできるはずです(ただし、PHP 5.2をインストールする場合は、人生の選択を真剣に考え直す必要があるかもしれません)。
要件
Phpenvは、サーバーにGitがインストールされている必要がありますが、最近のサーバーにはGitがないものは少ないでしょう。
このロールは、LinuxのファイルシステムACLと「web-admin」というグループを利用して、特定のディレクトリへのアクセスを付与します。これらのステップを手動で設定するか、bbatsche.Base
ロールをインストールすることができます。
さらに、Ubuntu Xenialにこのロールをインストールするには、Ansibleのバージョンが2.2以上である必要があります。Ansible 2.1は、Ubuntu Trustyによってまだサポートされています。
ロール変数
domain
— 作成するサイトのドメインdynamic_php
— Nginxがサイトのすべてのリクエストをindex.php
経由で書き換えるかどうか。このオプションは、ほとんどのモダンなフレームワークで使用されます。デフォルトは「いいえ」max_upload_size
— 最大アップロードサイズ(MB単位)。デフォルトは「10」php_max_file_uploads
— 同時にアップロード可能なファイルの最大数。デフォルトは20timezone
— PHPで設定するタイムゾーン。デフォルトは「Etc/UTC」mysql_socket
— localhost接続時に使用するMySQLソケットのパス。install_mariadb
— デフォルトのMySQLライブラリではなくMariaDBクライアントライブラリをインストールするか。デフォルトは「いいえ」php_session_save_handler
— セッションを保存するためのハンドラ。例えば、セッションデータをRedisに保存するために使用できます。デフォルトは「files」php_session_path
— セッションデータを保存するパス。デフォルトは"{{ phpenv_root }}/versions/{{ php_version }}/var/run/session
"php_realpath_cache_size
— ファイルとディレクトリの実際のパスを見つけるためのキャッシュサイズ。デフォルトは「256k」php_realpath_cache_ttl
— 実パスキャッシュにおけるエントリの保存期間。デフォルトは600php_max_execution_time
— PHPが作業を行うことが許可される最大時間(ファイルシステムのような外部リソースの呼び出しを除く)。デフォルトは30。php_default_socket_timeout
— ソケットからデータを待機する際のタイムアウト。デフォルトは60php_memory_limit
— PHPが単一プロセスに割り当てることを許可される最大メモリ量。デフォルトは「128M」php_version
— PhpenvでインストールするPHPのバージョン。phpenv_config_options
— PHPのconfigureコマンドに渡すフラグのリスト(Phpenvにすでに含まれているデフォルトに加えて)。デフォルト: defaults/main.ymlを参照phpenv_config_options_removed
— Phpenvの標準リストから削除するフラグのリスト。デフォルトは--with-tidy
のみpecl_extensions
— PECLからインストールする追加拡張のリスト。各値にはname
とversion
が必要ですcomposer_packages
— グローバルにインストールするためのコンポーザーパッケージのリスト。各値にはname
とversion
プロパティが必要です。phpenv_version
— インストールするPhpenvのバージョン。デフォルトはGit SHA: "0852611"phpenv_composer_version
— インストールするPhpenv Composer Pluginのバージョン。デフォルトはGit SHA: "1a6611d"php_build_version
— インストールするPHP Buildのバージョン。デフォルトはGit SHA: "5d166fe"xdebug_version
— インストールするXdebugのバージョン。デフォルトは「2.5.5」copy_phpinfo
— 新しいサイトにphpinfo()
ページをコピーするかどうか。デフォルトは「いいえ」copy_index_php
— 新しいサイトにindex.php
スタブファイルをコピーするかどうか。デフォルトは「いいえ」disabled_function
— PHPがウェブから実行されるときに無効にする関数のリスト。open_basedir
— このドメインが読み書きできる追加パスのリスト。このリストには必ずドメインのルート自体、現在のPHPバージョンの「var」ディレクトリ(セッションストレージ用)、およびドメインの一時ディレクトリが含まれます。http_root
— すべてのサイトが作成されるディレクトリ。デフォルトは「/srv/http」phpenv_root
— Phpenvとそのサポートファイルをインストールする場所。デフォルトは「/usr/local/phpenv」
FPM調整変数
PHP FPMは、env_name
によって2つのモードのうちの1つで実行されるように設定されています。開発環境では、PHP FPMは「オンデマンド」モードで実行され、プロセスの生成を最小限に抑え、リソースが限られている開発環境でアイドル状態のプロセスを減らします。他の環境では、FPMは「ダイナミック」モードで実行され、リクエストを処理するための子プロセスがすでに利用可能で、フォークする必要がありません。ダイナミックモードで実行する際は、FPMのリソース使用を調整する以下の方法があります。
fpm_mb_per_child
— このドメインの子プロセスが消費する平均メモリ量。デフォルトは「30」fpm_mem_percent
— FPMが消費してもよい最大メモリ量の割合。デフォルトは「80」fpm_max_children
— このドメインで許可される子プロセスの最大数。デフォルトはfpm_mem_percent
とfpm_mb_per_child
に基づいて計算されます。fpm_start_percent
— ドメインが最初に作成されたときに開始されるFPMの最大子プロセスの割合。デフォルトは「20」で、合計2サーバーのフロアがあります。fpm_start_servers
— ドメインが作成されたときに開始されるサーバーの数。デフォルトはfpm_start_percent
に基づいて計算されます。fpm_max_spare_percent
— 負荷が減少し始めたときにアクティブに保つべきFPMの最大子プロセスの割合。デフォルトは「80」fpm_max_spare_servers
— スパイク後にアクティブに保つべきスパースサーバーの数。デフォルトはfpm_max_spare_percent
に基づいて計算されます。
これにより、リソースの使用を総メモリの割合または静的値に基づいて調整できます。
Opcache調整変数
次の変数を使用してOpcacheを調整し、アプリケーションのパフォーマンスを向上させることができます。
opcache_enable_cli
— デフォルトは0opcache_memory_consumption
— デフォルトは128opcache_internal_strings_buffer
— デフォルトは16opcache_max_accelerated_files
— デフォルトは6000opcache_max_wasted_percentage
— デフォルトは5opcache_validate_timestamps
— デフォルトは1opcache_revalidate_freq
— 環境が開発の場合は0に設定します。それ以外の場合はデフォルトは300ですopcache_fast_shutdown
— デフォルトは0です。オンにするとリスクが伴う可能性があります
依存関係
このロールはbbatsche.Nginxに依存しています。このロールを最初にインストールする必要があります:
ansible-galaxy install bbatsche.Nginx
例Playbook
- hosts: servers
roles:
- role: bbatsche.Phpenv
domain: my-php-site.test
php_version: 7.1.12
composer_packages:
- name: phpunit/phpunit
version: ^6.4
pecl_extensions:
- name: yaml
version: 2.0.2
- name: imagick
version: 3.4.3
ライセンス
MIT
テスト
このロールには、各タスクを個別にまたは全体としてテストするための仕様のセットが含まれています。これらのテストを実行するには、まずヴァグラントとバーチャルボックスをインストールする必要があります。仕様ファイルはサーバースペックを使用して書かれているため、Rubyとバンドラーが必要です。
仕様スイートを完全に実行するには:
$ gem install bundler
$ bundle install
$ rake
仕様スイートは、Ubuntu Trusty Tahr (14.04)、Xenial Xerus (16.04)、およびBionic Bever (18.04)を対象とします。
利用可能なrakeタスク(および仕様)を確認するには:
$ rake -T
これらの仕様は冪等性のテストを目的としていません。指定されたタスクが期待どおりの手順を実行していることを確認するためのものです。冪等性は、統合テストによって独立して検証されます。