AmazonLinux2にPHP8.1とLaravel9を導入して開発環境を作ってみる

2022.04.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、コンサル部@大阪オフィスのTodaです。

GW中、時間があるため2022/02/08にリリースされたLaravel9を使って何か作れないかと思い準備をしています。 今回はAmazonLinux2にPHP8.1とLaravel9を導入する手順をまとめてみました。

ご注意事項

当開発環境はセキュリティグループで制限されたIPからのみ接続できる想定となっています。
パーミッション等の設定は適切でない場合がございますのでご注意ください。

事前の準備

開発環境用にEC2を1台、AmazonLinux2にて準備いたします。
必要なソフトは下記手順にて導入をしていきます。
セキュリティグループはport:22と80インバウンドルールをIP制限にて許可するよう設定しています。

導入操作

インスタンスへのログイン

開発環境用に用意したインスタンスにSSH接続にてログインをおこないます。

ソフトウェアの更新

新規インスタンスを起動したタイミングで導入ソフトを最新の状態にしておきます。

$ sudo yum update

amazon-linux-extrasのソフト確認

EC2にはパッケージ管理ツールとしてamazon-linux-extrasが導入されています。
今回利用するnginxとphp8.1が導入可能か確認をおこないます。

$ amazon-linux-extras
38  nginx1                   available    [ =stable ]
42  php7.4                   available    [ =stable ]
51  php8.0                   available    [ =stable ]

確認をしたところphp8.1は導入できないことがわかりましたのでyumリポジトリを追加して対応を進めていきます。

EPELとRemiレポジトリの有効化

EPELとRemiレポジトリを有効化してphp8.1の導入ができるようにします。
EPELレポジトリのインストールはamazon-linux-extrasにて対応が可能です。

$ sudo amazon-linux-extras install epel
$ sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

パッケージ検索

Yumコマンドにてphp8.1のパッケージが導入可能か検索をおこないます。
設定が正常な場合、下記コマンドにてパッケージが一覧で表示されます。

$ sudo yum search php81

読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
224 packages excluded due to repository priority protections
======================================================================= 
php81-php.x86_64 : PHP scripting language for creating dynamic web sites
php81-php-ast.x86_64 : Abstract Syntax Tree
php81-php-bcmath.x86_64 : A module for PHP applications for using the bcmath library
php81-php-brotli.x86_64 : Brotli Extension for PHP
php81-php-cli.x86_64 : Command-line interface for PHP
以下省略

PHP8.1の導入

パッケージ検索にて表示されたリストからLaravelの動作に必要な物を探しインストール用のコマンドを用意します。 コマンドの準備が出来たら実行をします。

$ sudo yum install php81 php81-php-mbstring php81-php-mysqlnd php81-php-gd php81-php-xml php81-php-fpm

PHPコマンドの調整

インストールが完了するとphpコマンドの実行ができます。
「php81」にてコマンド実行できるのを「php」でもできるように調整をおこないます。

$ php -v
-bash: php: コマンドが見つかりません

$ php81 -v 
PHP 8.1.5 (cli) (built: Apr 12 2022 16:19:58) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.5, Copyright (c) Zend Technologies

alternativesコマンドを利用して「php」で呼び出しできるように調整します。

$ sudo alternatives --install /usr/bin/php php /usr/bin/php81 1

$ php -v
PHP 8.1.5 (cli) (built: Apr 12 2022 16:19:58) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.5, Copyright (c) Zend Technologies

Composerの導入

Laravelの導入操作にはComposerをご利用頂きます。
composerのインストール操作は規約により公式サイトの手順を確認いただく必要がございますので下記リンクに移動頂きDownload導入手順をご利用ください。

■ Download Composer
https://getcomposer.org/download/

Laravelの導入

Composerを利用してLaravelの導入をおこないます。
今回開発環境の配置は「/var/www/app」におこなうようにします。
※/var/wwwの権限をec2-userに変更しておこないます。

$ sudo chown ec2-user /var/www
$ cd /var/www
$ composer create-project --prefer-dist laravel/laravel app

Nginxの導入

amazon-linux-extrasコマンドを利用してnginxを利用いたします。

$ sudo amazon-linux-extras install nginx1

Nginxの設定

開発環境の公開ディレクトリを見るようにNginxを設定します。
また、phpと連携をおこなうためphp-fpmの設定を追加します。

$ sudo vi /etc/nginx/conf.d/app.conf
-- 以下、設定内容 --
server {
    listen 80;

    charset UTF-8;
    root  /var/www/app/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~* /\. {
        deny all;
    }

    location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
                return 404;
        }
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_buffers 256 128k;
        fastcgi_buffer_size 128k;
        fastcgi_intercept_errors on;
        fastcgi_read_timeout 120s;
    }
}

FPMの起動と自動起動設定

FPMの起動とインスタンス起動時に自動で立ち上がるようにします。

$ sudo systemctl start php81-php-fpm.service
$ sudo systemctl enable php81-php-fpm.service

Nginxの起動と自動起動設定

Nginxの起動とインスタンス起動時に自動で立ち上がるようにします。

$ sudo systemctl start nginx.service
$ sudo systemctl enable nginx.service

Laravelの表示確認

Nginxの起動が完了したら、EC2インスタンスのパブリックIPアドレスにブラウザアクセスをおこないLaravelの画面が表示されることを確認します。
画面がアクセスできない場合は、セキュリティグループやACLにて遮断されていないか、FPMまたはNginxが起動できているかを確認ください。

Laravelの表示確認

さいごに

今回はAmazonLinux2にPHP8.1とLaravel9を入れて開発環境を作ってみました。
Laravel6から触っていなかったためLaravel9でのコンテンツ作成がすごく楽しみです!
GW中にわかったこととかがありましたらBlogにしたいと思います。
少しでもお客様の作りたい物の参考になればと考えております。