前回でDockerでnginxが動きHTMLがブラウザに表示されたと思いますが、今回はそのDockerでnginxとphp-fpmの連携までを行いPHPが実行できるところまで解説します。これができるとあとはデータベースをDockerで立ち上げれば一通りWEBアプリケーションの開発環境はできあがりです。
GitHub – gachi-engineer/lesson2-docker…
GitHub – gachi-engineer/lesson2-docker…
docker入門(nginxとphp-fpmの連携). Contribute to gachi-engineer/lesson2-docker-php-fpm development by creating an account on Gi…
docker入門(nginxとphp-fpmの連携). Contribute to gachi-engineer/lesson2-docker-php-fpm development by creating an account on Gi…
docker-compose.yml
やり方は色々あるのですがいちばん簡単で初学者でも迷子になりにくいものを利用します。それはDockerでそれぞれのOSSが出しているオフィシャルイメージを使う方法です。前回もnginxのオフィシャルイメージを使いました。今回も同じようにPHPがつくってくれているphp-fpmのオフィシャルイメージを使う方法を取ります。
docker-compose.ymlから解説します。
https://github.com/gachi-engineer/lesson2-docker-php-fpm/blob/master/docker/docker-compose.yml
services: myfirstapp-web: image: nginx:latest container_name: myfirstapp-web ports: - "8080:80" volumes: # ↓↓↓ ドキュメントルートのパスが変更されています ↓↓↓ - ../src:/var/www/html # ↓↓↓ php-fpmと連携するためnginxの設定ファイルをマウントして読み込ませてます ↓↓↓ - ./nginx/default.conf:/etc/nginx/conf.d/default.conf # php-fpmは最新バージョンのPHPのオフィシャルイメージをもってくるだけです myfirstapp-app: image: php:8.3-fpm container_name: myfirstapp-app volumes: # ↓↓↓ WEBサーバと同じパスにPHPファイルをおくためです ↓↓↓ - ../src:/var/www/html
前回のDocker入門と違うところは、nginxのドキュメントルートを変更したこととnginxの設定ファイルを読み込ませていることです。phpのdocker設定に関しては特筆すべきところはなく、volumesでパスをwebサーバと同じにしているというところだけです。
nginxのデフォルトパスだとphp-fpm側にパスがないためオーナーとパーミッションが揃わずうまく動きません。そのためにphp-fpm側のパスと同じ /var/www/html にnginx側も変更しています。
そしてnginxの設定ではphp-fpmのコンテナをfastcgiサーバとして指定して処理させるように設定ファイルをつくっています。デフォルトからそんなに変更することはなく必要最低限にとどめていますので初めてみる方でもそこまで迷子になることはないでしょう。


nginxの設定ファイル default.conf
前回のDocker入門と違うところは、rootっていう項目とphpが動くようにする設定です。少し長いために抜粋で行きたいとおもいます。rootという項目はドキュメントルートです。ドキュメントルートというのはWEBサーバが最初にベースとなるディレクトリを決めるところです。例えば /var/www/html とすればそのディレクトリの下に存在するファイルはWEBサーバは外に公開することができますが、それ以外のファイルやディレクトリは公開できません。
https://github.com/gachi-engineer/lesson2-docker-php-fpm/blob/master/docker/nginx/default.conf
location / { # パスが変わっています root /var/www/html; # URLが / だけで終わったときに探すファイルです、index.phpを一番前に指定しています。 # なければ index.html index.htmと探します。すべてなければ 404 not foundになります。 index index.php index.html index.htm; } 中略) # URLの最後がphpで終わってるファイルはここで処理するという意味です location ~ \.php$ { # どこのfastcgiサーバに処理をお願いするか、ここではdocker内のphp-fpmなのでこういうふうに指定します fastcgi_pass myfirstapp-app:9000; fastcgi_index index.php; # スクリプトのファイル名と実際のパスのマッピングです # index.phpと来たら、/var/www/html/index.phpを実行するという意味です。 fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; include fastcgi_params; }
index.phpを用意する
もともとあったindex.htmlをindex.phpにして簡単なPHPコードを書きます。説明が不要なぐらい簡単な内容ですので、中身は特になんでもよいのでアレンジしてもらってもかまいません。
https://github.com/gachi-engineer/lesson2-docker-php-fpm/blob/master/src/index.php
echo は文字列を出力するという命令です。今回はHTMLコードと一緒に出力しているため、h1タグがブラウザ側で解釈されて文字が大きく太くなっていると思います。
WEBアプリケーションをつくるというのは、要するにHTMLコードを動的に出力するということです。これがはじめのはじめの第一歩です。楽しみですね、これから本格的なWEBアプリケーションをつくるのは。


dockerをたちあげる
いつものdockerを立ち上げます。これだけです。
hoge@localhost:$ cd docker hoge@localhost:$ docker compose up -d
ブラウザでアクセスしてみる
以下のような画面が表示できれば成功です。

やっぱり人に教えてもらうのがいい
ガチエンジニアプログラミングスクールでいっしょに勉強していきませんか。より詳細な部分をお教えすることができますし、何よりマンツーマンレッスンなので個人の進み具合にあった指導が可能です。こんな質問してもいいのかなって不安に思うこともないですし、百戦錬磨の講師が手とり足取りお教えいたします。まずはお問い合わせを

