【EC2 + nginx + laravel】nginxとphp-fpmの設定
概要
EC2インスタンス上にnginxとphpを入れてgitに上がっているlaravelプロジェクトをブラウザで確認したい。
EC2はAmazon Linux 2を使う。
なんかhtmlは見れるけどphpは見れないみたいなこともあったから書き残しておく。(→ここ)
やること
- nginxをインストールしてnginx.confを編集
- laravelのサーバ要件を満たすようにphp及びphp拡張をインストール
- php-fpm.d/www.confを編集
- composerをインストール
- gitをインストール
- laravelの.env編集とマイグレーション
- nginxとphp-fpmを起動
- ブラウザで確認
はじめに
いつもの。rootユーザーに切り替えてやる。
sudo su - yum update
nginxをインストールしてnginx.confを編集
インストール。
amazon-linux-extras install nginx1
nginx.confを編集。
/etc/nginx/nginx.conffastcgi_passでphp-fpm.sockとしていたらhtmlにアクセスできるのにphpだとサーバーエラーとなった。
確認したら/run/php-fpmにはwww.sockがあるだけだったのでそれに合わせたらちゃんとphpも見れるようになった。
server { # ...略... root /var/www/laravelのプロジェクト/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; # php-fpmディレクトリにあるsockに合わせて fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_page 404 /404.html; location = /40x.html { root /usr/share/nginx/html; # 40x.htmlがあるディレクトリのパス(上の方のrootを上書き) } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; # 50x.htmlがあるディレクトリのパス(上の方のrootを上書き) } # ...略... }
laravelのサーバ要件を満たすようにphp及びphp拡張をインストール
インストール。
amazon-linux-extras install php7.4
php拡張をインストール。
# 必要なphp拡張を確認(https://runebook.dev/ja/docs/laravel/docs/8.x/installation#server-requirements) php -m | grep -e bcmath -e PDO -e ctype -e fileinfo -e json -e mbstring -e openssl -e pdo -e tokenizer -e ^xml$ # インストール yum install php-bcmath php-mbstring php-xml -y
php-fpm.d/www.confを編集
以下の部分を探して編集。
user = nginx group = nginx location.owner = nginx location.group = nginx location.mode = 0660
composerをインストール
以下のsudo mv composer.phar /usr/local/bin/composerまでやればいい。
gitをインストール
httpでもsshでも好きなようにgitを使えばいい。個人的にはsshの方が好き。
yum install git cd /var/www git clone laravelプロジェクトをあげたgitリポジトリ
laravelの.env編集とマイグレーション
DB設定を.envに記述する。DBほにゃららを設定する。EC2使ってるなら多分RDSだと思う。
マイグレーション。(あれば)
php artisan migrate
nginxとphp-fpmを起動
起動。
systemctl start nginx systemctl start php-fpm
インスタンスを停止して起動した時に自動でnginxとphp-fpmが起動するようにする。
systemctl enable nginx systemctl enable php-fpm
実行状態を確認。
systemctl status nginx systemctl status php-fpm
ブラウザで確認
ブラウザでIPにアクセスすればLaravelプロジェクトのpublic/index.phpにアクセスされるので確認できる。