C#とかVue.jsとかAWSとか興味のあることちまちまやってます。PHP-FPMで実行環境を構築しました。PHPやPHP-FPM、Dockerの知識不足で構築に結構時間がかかってしまったので忘れないよう記事にします。Composeを使用しました。※Macのストレージを汚したくないと言う思惑もありました。1110ad01成果物Lycheejam/php-samplePHP動作環境のお勉強PHPはスクリプト言語ではあるがサーバサイドスクリプトであるため、JavaScript(クライアントサイドスクリプト)とは違いブラウザで処理してくれません。PHPを実行するサーバを別途用意する必要があります。ココらへんの触りの部分は下記のサイトが参考になりました。環境を構築する際にサーバサイドで処理を実行してくれるWebサーバにApacheではなくNignxを選択したため、追加の知識としてPHP-FPMなどのお勉強をする必要がありました。PHP-FPMについては下記の記事が大変丁寧でわかりやすかったです。Qiitaズブの素人なのでそこまで詳しく追うわけではないけどザックリイメージの話をするとFPMはCGIの上位互換であるFastCGIを実装したものでnginxではFastCGIを通してPHPを実行するのでFPMが必要となります。WebサーバとしてApacheを使用するのであればPHPのモジュール版を使用するためPHP-FPMは不要となります。※そのうちもっと詳しくなるために調べようと思います。今回は、ローカルでphpinfoを表示することを最終目標に実行環境を構築します。構築環境の構成Webサーバnginxを使用したWebサーバ、FastCGIサーバへのプロキシとなる。PHP-FPMサーバPHPの実行環境、FastCGIサーバWebサーバ(nginx)をプロキシとしてPHP-FPM(FastCGI)サーバでPHPを実行するイメージです。※間違ってたらコメントください。ディレクトリ構成サンプルプロジェクトのディレクトリ構成は以下の通り。docker-configsに各コンテナで使用する設定ファイルやビルド用のDockerfileを突っ込む想定で作成しました。今回は、公式イメージを使って環境を構築するためビルド用のDockerfileは作成しません。srcにはPHPファイルを配置します。Composeを使ってコンテナ群をまとめて管理します。そのための設定ファイル(手順書)がdocker-compose.ymlです。セクション名については任意の名前で構わない。./src/:/var/phpapp/docker-compose.ymlの記述バージョンファイル先頭で指定しているversionにより使用できるDockerのバージョンが異なります。将来的にバージョン1は非推奨となるっぽいのでバージョン2以上を使うほうが良さげ。各対応バージョンは下記のリンクを参照のこと。今回は公式ドキュメントのサンプルを使用したので最新のバージョン3.7となっています。Documentationservicesセクション各コンテナの設定を記述します。今回はWebサーバとなるwebとFastCGIサーバとなるphpコンテナを定義しました。各セクションのリファレンスは下記の公式ドキュメントを参照のこと。DocumentationimageセクションDockerイメージについては公式のイメージを使用し、nginxについては特にバージョンを考えていないのでlatestを指定しています。nginx:latestPHP-FPMのイメージについてはタグで必要なイメージを指定します。PHPのバージョンは7.3となります。php:7-fpmportsセクションportsセクションではnginxのプロキシサーバのポートを指定します。8080:80がホスト側ポート:コンテナ内ポートと言う具合です。"8080:80"また、portsセクションについては"(ダブルクオート)を使用して明示的に文字列とするよう公式ドキュメントに記載があります。Documentation※FastCGIサーバではデフォルトポートの9000番を使用するためportsの指定は行いません。volumesセクションそして、volumesでディレクトリやファイルをマウントします。することでホストのストレージにあるファイルとコンテナ内のファイルを同期できます。※共有ディスク化と言ったほうが語弊少なめ?nginxの場合はconfigファイルを作成しdefault.confへ上書きします。configファイルのファイル名についてはマウント対象であるdefault.confへの上書きであるため任意の名前で構いません。./docker-configs/nginx/nginx.conf:/etc/nginx/conf.d/default.confFastCGIサーバの場合は実行したいPHPファイルがあるディレクトリをマウントします。./src/:/var/phpapp/nginxのconfigファイル作成nginxのconfig(設定)ファイルを作成します。詳しくないのでデフォルトの設定ファイル(default.conf)に手を加える形で作成します。※Gitのcommit差分でわかりやすいようにすればよかったんですがそうしてなかったのでいきなり完成品です。変更した部分については変更前のものをコメントの形式で記載しています。configファイルを作成するにあたり下記の記事が大変役に立ちました。}}ココらへんはノリでこんな感じだろと乗り切ったので解説できるほど理解できてないです。ハマったポイントだけ記載しておきます。fastcgi_passについてfastcgi_passはデフォルトで127.0.0.1:9000を指定しています。そのままコンテナを起動するとnginxが502(BadGateway)を返してしまいます。原因は、dockerコンテナの127.0.0.1がlocalhost(コンテナ自体)となるためです。これを回避するために、PHP-FPMを別立てしている場合はPHP-FPMのコンテナを指定してやる必要があります。ここで少しハマりました。下記のStackOverflowにすべて書いてあった感じです。Composeでコンテナをまとめて起動する場合はdocker-compose.ymlで定義されたコンテナすべてのホストが自動で設定されるのでサービス名で指定可能です。Qiitaindex.phpの作成phpinfoを表示することが目標なのでphpinfoを表示するためのページを作成します。phpinfo();?>PHP実行環境の起動ターミナルから先程設定したコンテナを起動します。最終的にこんな感じのログが出るはず。connections初回はイメージのダウンロードなどで時間がかかりますがいい感じにログが出てればOKブラウザからhttp://localhost:8080にアクセスすると下記の画面が表示されます。down雑感PHPの環境構築にめっちゃ時間取られちゃいました。わからないことだらけなので隙間を埋めるように勉強続けたいですね。»プロフィールid:HM_Atlasチラ裏のメモ帳モノづくりが好き。技術で世の中(大袈裟)を便利にするのが好き。(1)月別アーカイブリンクTwitterGitHubSteam自滅しがちQiitaはてなブログをはじめよう!HM_Atlasさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。