AWS Linux 2023にLaravelデプロイ[2] 〜nginx PHPインストール

2023/09/11

※EC2はLinux2023

そのため、amazon-linux-extrasは使えず主にdnfを使用。

nginxのインストール

[1] 以下のコマンドでnginxをインストールする

$ sudo dnf install nginx

[2] 自動起動のための設定。以下を打つ

$ sudo systemctl enable nginx

[3] nginxを起動

$ sudo systemctl start nginx

インスタンスのIPアドレスをブラウザに打ち、nginx〜と表示されればOK

PHPのインストールと設定

nginxの設定の前にPHPをインストールして設定を行う。

[1] インストール可能なphpの内容を確認(やらなくてもいい)

$ sudo dnf search php

[2] 以下でPHP(と他)をインストール

$ sudo dnf install -y wget php-fpm php-mysqli php-json php php-devel

インストールできたかは以下で確認

$ php -v

[3] fpmを起動。nginxはデフォルトでFastCGIサーバーとしての機能しか提供していないため、php-fpm を介してPHPファイルを実行する必要があるそう。

$ sudo systemctl start php-fpm.service

[4] インスタンス起動時にfpmが自動起動するように設定

$ sudo systemctl enable php-fpm

[5] Laravelに必要な他モジュールをインストール

$ sudo dnf install -y php-bcmath php-mbstring php-xml

上に加え、composer updateするには、php-zipをインストールする必要がある。色々試行錯誤したが、以下で行った。(必要ないコマンドもあるかも)

DNF アップデート

$ sudo dnf update

PHP 開発パッケージとその他の依存関係をインストール

$ sudo dnf install php-devel php-pear libzip libzip-devel

Amazon Linux 2023 に PHP-ZIP をインストール

$ sudo pecl install zip

php-zip 拡張機能を有効にする

$ echo "extension=zip.so" | sudo tee /etc/php.d/20-zip.ini

システムにインストールされている PHP 拡張機能のリストを表示

$ php -m

入ってたらOK!

[6] php-fpmの設定ファイルを編集。以下でエディタを開く

$ sudo vi /etc/php-fpm.d/www.conf

最低限の変更箇所は以下。コメントアウトの間に合って分かりづらいので注意。

user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

※listen.owner listen.group listen.modeはコメントアウトされているのでコメントアウトをとるのも忘れずに。

[7] 設定反映のための再起動

$ sudo systemctl restart php-fpm.service

nginxの設定

nginxの設定ファイル「/etc/nginx/nginx.conf」を編集する。

[1] 以下でnginxの設定ファイルを開く

$ sudo vi /etc/nginx/nginx.conf

[2] 設定ファイルの server{} 部分を編集する。以下にした。

ここで、rootフォルダを /var/www/public に変更し、Laravelに合わせている。

server {
        listen       80;
        server_name  _;
        root         /var/www/public;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        index index.php;
        charset utf-8;
        client_max_body_size 10M;
        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-fpm/php-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            include fastcgi_params;
        }
        location ~ /\.(?!well-known).* {
            deny all;
        }
    }


client_max_body_size 10M;

あたりは必要に応じて。

[3] 設定ファイルを編集したら以下

設定が正しいかテスト

$ sudo nginx -t

問題なければ、successfulと出る。

nginx再起動

$ sudo systemctl restart nginx

もしくは設定際読み込み

$ sudo systemctl reload nginx

次はphpの表示確認やグループ変更など