AWSのEC2にLAMP環境(Linux、Apache、MariaDB、PHP)を作成し、Laravelをインストールする

AWSのEC2にLaravel環境を作成することがあったので、手順をまとめたいと思います。
LAMP環境(Linux、Apache、MariaDB、PHP)で作成しました。

作成する環境

以下の環境を作成します。
2021年10月に作成した時点の情報になります。

  • Linux:Amazon Linux 2
  • Apache:2.4.51
  • MariaDB:10.5.10
  • PHP:7.4.21
  • Laravel:8.6.4

Apacheのインストール

$ sudo yum update
$ sudo yum install httpd

バージョンを確認します。

$ httpd -v
Server version: Apache/2.4.51 ()
Server built:   Oct  8 2021 22:03:47

Apacheを起動する

インストールが完了したら、起動します。

$ sudo systemctl start httpd.service

起動できたかを確認します。

$ sudo systemctl status httpd.service

EC2を起動した時にApacheも自動で起動するように設定しておきます。

$ systemctl is-enabled httpd.service
disabled
$ sudo systemctl enable httpd.service
$ systemctl is-enabled httpd.service
enabled

実際にアクセスしてみると、Apacheの初期画面が表示されることが確認できました。

Apache

ドキュメントルートの権限を設定

ドキュメントルートは、デフォルトではroot権限になっているため、ec2-userで使用できるように設定します。
apacheグループにec2-userを追加します。

$ sudo usermod -a -G apache ec2-user

一度ログアウトして、再ログインします。

$ exit

apacheグループが設定されているかを確認します。

$ groups
ec2-user adm wheel apache systemd-journal

「/var/www/html」のグループ所有権をapacheグループに変更します。

$ cd /var/www
$ ll
合計 0
drwxr-xr-x 2 root root 6 10月  8 22:04 cgi-bin
drwxr-xr-x 2 root root 6 10月  8 22:04 html

$ sudo chown ec2-user:apache /var/www/html

$ ll
合計 0
drwxr-xr-x 2 root     root   6 10月  8 22:04 cgi-bin
drwxr-xr-x 2 ec2-user apache 6 10月  8 22:04 html

PHPのインストール

続いて、PHPをインストールします。
yumのパッケージではバージョンが古いため、「Extrasレポジトリ」からインストールします。

$ yum list | grep php
graphviz-php.x86_64                    2.30.1-21.amzn2.0.1            amzn2-core
php.x86_64                             5.4.16-46.amzn2.0.2            amzn2-core
・
・
・
(略)
$ amazon-linux-extras
  0  ansible2                 available    \
        [ =2.4.2  =2.4.6  =2.8  =stable ]
  2  httpd_modules            available    [ =1.0  =stable ]
  3  memcached1.5             available    \
        [ =1.5.1  =1.5.16  =1.5.17 ]
  ・
  ・
  ・
  (中略)
 42  php7.4                   available    [ =stable ]
$ sudo amazon-linux-extras install php7.4
Installing php-pdo, php-fpm, php-mysqlnd, php-cli, php-json

インストールが完了すると、ステータスが「enabled」に変わりました。

42  php7.4=latest            enabled      [ =stable ]

バージョンを確認します。

$ php -v
PHP 7.4.21 (cli) (built: Jul  7 2021 17:35:08) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

表示を確認

「phpinfo()」を実行するファイルを作成します。
Apacheも再起動しておきます。

$ echo '<?php phpinfo();' > /var/www/html/phpinfo.php

$ sudo systemctl restart httpd.service

「/phpinfo.php」でアクセスし、以下のように表示されることが確認できました。

phpinfo

表示が確認できたら、作成したファイルは削除しておきます。

$ rm -f /var/www/html/phpinfo.php

MariaDBのインストール

続いて、MariaDBをインストールします。
PHP同様、yumのパッケージではバージョンが古いため、「Extrasレポジトリ」からインストールします。

$ yum list | grep maria
mariadb-libs.x86_64                    1:5.5.68-1.amzn2               installed 
mariadb.x86_64                         1:5.5.68-1.amzn2               amzn2-core

MariaDBのクライアントがデフォルトでインストールされているため、予めアンインストールしておきます。

$ sudo yum remove mariadb-libs
$ amazon-linux-extras
  0  ansible2                 available    \
        [ =2.4.2  =2.4.6  =2.8  =stable ]
  2  httpd_modules            available    [ =1.0  =stable ]
  3  memcached1.5             available    \
        [ =1.5.1  =1.5.16  =1.5.17 ]
  ・
  ・
  ・
  (中略)
 54  mariadb10.5              available    [ =stable ]
$ sudo amazon-linux-extras install mariadb10.5
Installing mariadb

インストールが完了すると、ステータスが「enabled」に変わりました。

54  mariadb10.5=latest       enabled      [ =stable ]

バージョンを確認します。

$ mysql --version
mysql  Ver 15.1 Distrib 10.5.10-MariaDB, for Linux (x86_64) using  EditLine wrapper
$ mysqld --version
mysqld  Ver 10.5.10-MariaDB for Linux on x86_64 (MariaDB Server)

MariaDBを起動する

インストールが完了したら、起動します。

$ sudo systemctl start mariadb.service

起動できたかを確認します。

$ sudo systemctl status mariadb.service

EC2を起動した時にMariaDBも自動で起動するように設定しておきます。

$ systemctl is-enabled mariadb.service
disabled

$ sudo systemctl enable mariadb.service
Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

$ systemctl is-enabled mariadb.service
enabled

セキュリティの初期設定を行う

初期設定を行います。
対話モードになるので、回答して設定します。

$ sudo mysql_secure_installation

# ルートのパスワードを入力、初期状態では設定されていないので、何も入力せずエンター
Enter current password for root (enter for none): 

# unix_socket認証を使用するか
Switch to unix_socket authentication [Y/n] n

# ルートのパスワードを変更するか
Change the root password? [Y/n] y
New password: 
Re-enter new password:

# 匿名ユーザーを削除するか
Remove anonymous users? [Y/n] y

# リモートでのrootログインを許可しないか
Disallow root login remotely? [Y/n] y

# テストデータベースを削除するか
Remove test database and access to it? [Y/n] y

# 特権テーブルをリロードするか
Reload privilege tables now? [Y/n] y

データベースへの接続を確認

データベースへ接続できるかを確認します。

$ sudo mysql -u root -p
Enter password: 

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.000 sec)

Laravelのインストール

続いて、Laravelをインストールします。

まず、Laravelに必要なパッケージをインストールします。

$ yum list installed | grep php
php-cli.x86_64                 7.4.21-1.amzn2            @amzn2extra-php7.4     
php-common.x86_64              7.4.21-1.amzn2            @amzn2extra-php7.4     
php-fpm.x86_64                 7.4.21-1.amzn2            @amzn2extra-php7.4     
php-json.x86_64                7.4.21-1.amzn2            @amzn2extra-php7.4     
php-mysqlnd.x86_64             7.4.21-1.amzn2            @amzn2extra-php7.4     
php-pdo.x86_64                 7.4.21-1.amzn2            @amzn2extra-php7.4 

$ yum list | grep php
php-cli.x86_64                         7.4.21-1.amzn2                 @amzn2extra-php7.4
php-common.x86_64                      7.4.21-1.amzn2                 @amzn2extra-php7.4
(中略)
php-mbstring.x86_64                    7.4.21-1.amzn2                 amzn2extra-php7.4
(中略)
php-xml.x86_64                         7.4.21-1.amzn2                 amzn2extra-php7.4

$ sudo yum install -y php-mbstring php-xml

$ yum list installed | grep php
php-cli.x86_64                 7.4.21-1.amzn2            @amzn2extra-php7.4     
php-common.x86_64              7.4.21-1.amzn2            @amzn2extra-php7.4     
php-fpm.x86_64                 7.4.21-1.amzn2            @amzn2extra-php7.4     
php-json.x86_64                7.4.21-1.amzn2            @amzn2extra-php7.4     
php-mbstring.x86_64            7.4.21-1.amzn2            @amzn2extra-php7.4     
php-mysqlnd.x86_64             7.4.21-1.amzn2            @amzn2extra-php7.4     
php-pdo.x86_64                 7.4.21-1.amzn2            @amzn2extra-php7.4     
php-xml.x86_64                 7.4.21-1.amzn2            @amzn2extra-php7.4 

LaravelはComposerを利用してインストールするので、Composerをインストールします。

$ curl -sS https://getcomposer.org/installer | sudo php
All settings correct for using Composer
Downloading...

Composer (version 2.1.9) successfully installed to: /var/www/html/composer.phar
Use it: php composer.phar

$ ll
合計 2216
-rwxr-xr-x 1 root root 2268732 10月 22 02:36 composer.phar

$ sudo mv composer.phar /usr/local/bin/composer

Composerのインストールが正常に完了したかを確認します。
下記のようにバージョンが表示されれば、インストール完了です。

$ composer -V
Composer version 2.1.9 2021-10-05 09:47:38

Laravelのプロジェクトを作成します。

$ cd /var/www/html
$ composer create-project --prefer-dist laravel/laravel [ここにプロジェクト名を入れる]
Creating a "laravel/laravel" project at "./[プロジェクト名]"
Installing laravel/laravel (v8.6.4)
  - Installing laravel/laravel (v8.6.4): Extracting archive

作成したプロジェクトの所有者を変更しておきます。

$ sudo chown -R ec2-user:apache /var/www/html/[プロジェクト名]

Apacheのドキュメントルートを作成したプロジェクトに変更します。

$ sudo vi /etc/httpd/conf/httpd.conf

以下のようにドキュメントルートを変更します。
.htaccess にアクセスできるように、ディレクトリの権限も変更しておきます。

DocumentRoot "/var/www/html/[プロジェクト名]/public"
<Directory /var/www/html/[プロジェクト名]/public>
    AllowOverride All
</Directory>

Apacheを再起動します。

$ sudo systemctl restart httpd.service

ブラウザで表示を確認します。

Laravel

Laravelの初期設定

Laravelのアプリケーションキーを生成します。

$ cd [プロジェクト名]
$ php artisan key:generate

Laravelのデータベースの設定

Laravelのプロジェクトで使用するデータベースの設定を行います。

$ sudo mysql -u root -p

MariaDB [(none)]> create database [データベース名];
create user [ユーザー名] identified by '[パスワード]';
grant all privileges on [データベース名].* to [ユーザー名];

Laravelの設定ファイルを変更します。

$ vi .env

データソースの設定を変更します。

DB_DATABASE=[データベース名]
DB_USERNAME=[ユーザー名]
DB_PASSWORD=[パスワード]

これでひとまずLAMP環境にて、Laravelのインストールができました。