NginxでLaravelを動作させるまでに行ったこと

はじめに

今回はNginxでLaravelを動作させるためにDocker上でNginx+PHP-FPM+MySQL環境を用意し、Laravelを動かす手順を紹介します。

ディレクトリ構成

ディレクトリ構成は上記の通りで各ファイルの説明をしていきます。

Makefile

各コマンドの簡単な説明です。

  • up/down: Dockerコンテナの起動・停止を実行
  • build: Dockerイメージをビルド
  • exec: appコンテナ内でbashコマンドを実行
  • artisan: LaravelのArtisanコマンドを実行
  • init: Laravelの新規プロジェクトを作成(初回のみ実行する想定)

docker-compose.yml

  • app: PHP-FPMコンテナ。Dockerfileで必要なPHP拡張やComposerを導入するために使用しています
  • web: Nginxコンテナ。ポート8080をコンテナ内の80番にマッピングし、Laravelのpublicディレクトリをドキュメントルートに指定しています
  • mysql: MySQLコンテナ。DB名やユーザ名、パスワードを定義しました
  • phpmyadmin: DB操作をGUIで行える便利なパッケージ、ポート8081をコンテナ内の80にマッピングしてアクセスできるように設定しています

Dockerfile

  • Composerをインストールして、Laravelのセットアップを容易にしました
  • 作業ディレクトリを /var/www/html に設定しています

nginx.conf

  • ポートは80にしました
  • root /var/www/html/public; でLaravelのpublicフォルダをルートに指定しています
  • .phpファイルのリクエストは fastcgi_pass app:9000; を通じてPHP-FPMコンテナへアクセスできるようにしました

php.ini

このあたりは好みですが、初期設定より大きなファイルを扱うことを想定して設定を変更しました。

  • 大容量ファイルを扱う際の制限値を引き上げています
  • スクリプトの最大実行時間を300秒に設定しました

コンテナ起動とLaravel初期画面まで

Dockerイメージのビルド

Dockerコンテナの起動

docker-compose.ymlに定義された4つのコンテナ(app, web, mysql, phpmyadmin)を一斉に起動させます。appコンテナではPHP-FPMが稼働し、webコンテナがNginxの役割を担います。phpmyadminコンテナはGUIでDBを操作可能になります。

Laravelプロジェクトの新規作成

指定バージョンのLaravelが src 以下にインストールされます。初回実行時のみ必要な手順で、すでに実行済みの場合は省略可能です。

ブラウザで確認

http://localhost:8080 にアクセスしてLaravelの初期表示が表示されます。

http://localhost:8081 にアクセスすれば、phpmyadminが表示されます。

終わりに

以上がNginxでLaravelを動作させるためにDockerとNginx、PHP-FPM、MySQLを使ったLaravelのセットアップ手順です。

今までApacheは使ったことがありましたがNginxは使ったことがなかったため、ところどころ苦戦したものの、とてもよい経験になったと思います。みなさんも同じようなものが必要であればこちらを参考にしてください。