LaravelプロジェクトをNGINXで動かす
web-application-framework laravel
Dockerを使ってLaravelプロジェクトを動かす環境を構築します。
NGINX + php-fpmでLaravelプロジェクトを動かします。
NGINXとは
NGINXはオープンソースなWebサーバーソフトウェアです。
NGINXをインストールしたコンピューターはWebサーバーの動きができるようになります。
環境
- Ubuntu 22.04.3 LTS (WSLで起動している)
- Docker Engine 26.0.0
- Composer 2.7.2
- Laravel 11
環境構築の流れ
1. Laravelプロジェクトを作成する
Laravelプロジェクトの作成についてはこちらをご覧ください。
2. 設定ファイルを作成する
Laravelプロジェクトのディレクトリ以下で下記の設定ファイルを作成します。
記載方法について、Laravelプロジェクトのルートディレクトリをルートディレクトリ(/
)とします。
nginx.repo
Amazon Linux 2023用にyumリポジトリをセットアップするための設定ファイルです。こちらを参考にしています。
/docker/web/nginx
ディレクトリに作成します。
/docker/web/nginx/nginx.repo
:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/amzn/2023/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/amzn/2023/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
default.conf
LaravelプロジェクトのためのNGINXの設定ファイルです。こちらを参考にしています。
server_name
を localhost
に変更しています。動作確認が目的なので、少し変更を加えるだけにしています。
/docker/web/nginx/conf.d
ディレクトリに作成します。
/docker/web/nginx/conf.d/default.conf
:
server {
listen 80;
listen [::]:80;
server_name localhost;
root /srv/example.com/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
zzz-www.conf
php-fpmの追加の設定ファイルです。.sock
ファイルのパスを上書きするために作成します。
/docker/web/php/php-fpm.d
ディレクトリに作成します。
/docker/web/php/php-fpm.d/zzz-www.conf
:
[www]
listen = /var/run/php/php8.2-fpm.sock
3. Dockerの設定ファイルを作成する
Laravelプロジェクトのディレクトリ以下に下記の設定ファイルを作成します。
記載方法について、Laravelプロジェクトのルートディレクトリをルートディレクトリ(/
)とします。
docker-compose.yml
Docker Composeの設定ファイルです。
/
ディレクトリに作成します。
/docker-compose.yml
:
services:
web:
build: ./docker/web
volumes:
- .:/srv/example.com
ports:
- "8080:80"
Dockerfile
webのDockerfileです。(NGINX + php-fpmをインストールするDockerコンテナ)
Dockerイメージは、今回は後でAWSにデプロイすることを考えて amazonlinux
にしています。
/docker/web
ディレクトリに作成します。
/docker/web/Dockerfile
:
FROM amazonlinux:2023
# NGINXインストール
RUN yum -y install yum-utils
COPY nginx/nginx.repo /etc/yum.repos.d/nginx.repo # 設定ファイルをコピー
RUN yum -y install nginx-1.24.0
COPY nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf # 設定ファイルをコピー
# php-fpmとphp-mysqlndインストール
RUN yum -y install php8.2-fpm php8.2-mysqlnd
RUN mkdir /run/php-fpm # ディレクトリを作っておかないとエラーになる
RUN mkdir /var/run/php # ディレクトリを作っておかないとエラーになる
COPY php/php-fpm.d/zzz-www.conf /etc/php-fpm.d/zzz-www.conf # 設定ファイルをコピー
# php-fpmとNGINX起動
# nginxは「-g "daemon off;"」でフォアグラウンド実行になり、コンテナが自動的に終了しなくなる
CMD bash -c 'php-fpm && nginx -g "daemon off;"'
4. Laravelプロジェクトを確認する
Dockerコンテナを立ち上げてLaravelプロジェクトを確認します。
以下を実行します。
$ cd <Laravelプロジェクトのルートディレクトリのパス>
$ docker compose up --build -d
コンテナはWSL上のUbuntuで立ち上げているので、Windows側から http://localhost:8080
にアクセスします。
Laravelプロジェクトが確認できました。