EC2/PHP7.4/Apache/Aurora MySQLでLaravel環境を作ってみた
少し前に業務でEC2/PHP7.4/Apache/Aurora MySQLでLaravel環境を作成したのでそのナレッジを残しておきます。
作業手順
今回利用したインスタンスタイプはt2.medium
ですがt2.micro
とかでも同じ設定で作成は可能です。
環境構築
今回は単純なEC2(WEB)1台、Aurora1台構成の設定となります。
EC2とAuroraは通信可能なセキュリティグループを設定しておいてください。
ざっくりした図を書くと以下のような感じです。
気が向いたら環境作成用のテンプレートを作っておきます。
日付をJSTに設定する
EC2は初期の日付がUTCになっているので必要であれば以下の手順で変更します。
まずdate
コマンドで現在の設定を確認します。
$ date Tue Mar 3 07:21:04 UTC 2019
念のため/etc/llocaltime
のバックアップをcp
コマンドで作成します。
$ ls /etc/localtime* /etc/localtime $ sudo cp /etc/localtime /etc/localtime.org $ ls /etc/localtime* /etc/localtime /etc/localtime.org
$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime $ date Tue Mar 3 16:41:30 JST 2019 $ strings /etc/localtime TZif2 TZif2 JST-9
再起動でタイムゾーンが戻らないように/etc/sysconfig/clock
ファイルに設定を書き込みます。
※書き込みをおこなう前に念のためcp
コマンドでバックアップを作成します。
$ sudo cp /etc/sysconfig/clock /etc/sysconfig/clock.org $ sudo vim /etc/sysconfig/clock ZONE="Asia/Tokyo" UTC=false $ diff /etc/sysconfig/clock /etc/sysconfig/clock.org 1,2c1,2 < ZONE="Asia/Tokyo" < UTC=false --- > ZONE="UTC" > UTC=true
設定を反映させるためにreboot
コマンドで再起動をおこないます。
$ sudo reboot
Swap設定
Swap設定の設定がされていないインスタンの場合ですと、
EC2にLaravelをインストールする際インスタンスによってメモリ不足でエラーになる時があります。その際は以下を参考にしてSwap設定をおこなってください。
free
コマンドでSwapの利用状況の確認をおこないます。
以下のようにSwapの結果が0
の場合はSwapの設定が必要となります。
$ free total used free shared buff/cache available Mem: 4037608 100016 3074136 468 863456 3708216 Swap: 0 0 0
念のためgrep
コマンドを使って/proc/meminfo
でも確認しておきます。
$ grep Mem /proc/meminfo MemTotal: 4037608 kB MemFree: 3074136 kB MemAvailable: 3708244 kB $ grep Swap /proc/meminfo SwapCached: 0 kB SwapTotal: 0 kB SwapFree: 0 kB
以下のコマンドで512MB
のSwapを作成します。
$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 0.277538 s, 1.9 GB/s
先ほど作成したswapfile1
があるか念のため確認します。
$ ll /swapfile1 -rw-r--r-- 1 root root 536870912 Mar 3 16:47 /swapfile1
swapfile1
ファイルの権限を変更し、フォーマットをおこないます。
$ sudo chmod 600 /swapfile1 $ sudo mkswap /swapfile1 Setting up swapspace version 1, size = 512 MiB (536866816 bytes) no label, UUID=2331f2ba-449d-45ca-8d96-29e1fd7d1862
作成したswapfile1
ファイルを有効化します。
$ sudo swapon /swapfile1 $ sudo swapon -s Filename Type Size Used Priority /swapfile1 file 524284 0 -2
システムリブートでswapfile1
ファイルを認識できるよう以下の設定をします。
$ sudo cp -p /etc/fstab /etc/fstab.org $ sudo sh -c "echo '/swapfile1 swap swap defaults 0 0' >> /etc/fstab" $ cat /etc/fstab | grep swapfile1 /swapfile1 swap swap defaults 0 0
Swapが設定できたことを確認します。
$ free total used free shared buff/cache available Mem: 4037604 77708 3745892 412 214004 3747868 Swap: 524284 0 524284
PHP7.4/Apache/php-mysqlndなどのアプリインストール
まずはパッケージを最新にします。
$ sudo yum update -y
Amazon Linuxが持っているリポジトリはPHP5.4
しか入っていないので、
yum
のリポジトリにPHP7.4
が入っているremi
リポジトリを使えるようにしてあげます。
対象のEC2にepel-release
パッケージをインストールを行うため、下記のコマンドを実行します。
$ sudo amazon-linux-extras install epel -y $ sudo yum install epel-release -y
remi
リポジトリの有効化をおこないます。
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm Retrieving http://rpms.famillecollet.com/enterprise/remi-release-7.rpm warning: /var/tmp/rpm-tmp.30IKQl: Header V4 DSA/SHA1 Signature, key ID 00f97f56: NOKEY Preparing... ################################# [100%] Updating / installing... 1:remi-release-7.7-2.el7.remi ################################# [100%]
PHP7.4
/Apache
をインストールしていきます。
$ sudo yum install -y php74 php74-php php74-php-fpm $ sudo ln -s /usr/bin/php74 /usr/bin/php $ php -v PHP 7.4.3 (cli) (built: Feb 18 2020 11:53:05) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies
その他Laravelに必要なPHP7.4
のパッケージをインストールします。
$ sudo yum install php74-php-mbstring.x86_64 -y $ sudo yum install php74-php-xml.x86_64 -y $ sudo yum install php74-php-pdo.x86_64 -y $ sudo yum install php74-php-mysqlnd.x86_64 -y
php-mysqlnd
のインストールをします。
$ sudo yum install php74-php-mysqlnd.x86_64 -y
mysql
コマンドを使えるようにしておきたいので下記もインストールします。
$ sudo yum install mysql-community-client mysql-community-devel
パーミッション設定
www
グループを追加してec2-user
を所属させます。
$ sudo groupadd www $ sudo usermod -a -G www ec2-user $ exit
一度ログアウトして再度EC2にログインします。
cat /etc/group
コマンドで設定内容の確認をおこないます。
$ cat /etc/group |grep www www:x:1002:ec2-user
/var/www
以下の所有者情報を再帰的に変更します。
$ sudo chown -R ec2-user:www /var/www $ sudo chmod 2775 /var/www $ find /var/www -type d -exec sudo chmod 2775 {} + $ find /var/www -type f -exec sudo chmod 0664 {} +
Laravelインストール
まずはComposerをインストールします。
$ cd ~ $ curl -sS https://getcomposer.org/installer | sudo php All settings correct for using Composer Downloading... Composer (version 1.9.3) successfully installed to: /home/ec2-user/composer.phar Use it: php composer.phar $ sudo cp composer.phar /usr/local/bin/composer $ sudo ln -s /usr/local/bin/composer /usr/bin/composer
Laravelプロジェクトの作成をおこないます。
$ cd /var/www $ sudo composer create-project --prefer-dist laravel/laravel
ドキュメントルートの変更をおこないます。
$ sudo vim /etc/httpd/conf.d/custom.conf # ドキュメントルート DocumentRoot "/var/www/laravel/public" # .htaccess 有効化 <Directory /var/www/laravel/public> AllowOverride All </Directory>
Apache再起動とLaravel配下のパーミッションの変更します。
$ sudo service httpd restart $ sudo chmod -R 777 /var/www/laravel/storage $ sudo chmod -R 777 /var/www/laravel/bootstrap/cache/
ここまで設定したらEC2のパブリック DNS名でブラウザアクセスをおこなうとLaravelの画面が見れるかと思います。
LaravelのAurora接続設定
LaravelをAuroraに接続する際に/var/www/laravel/
配下の.env
ファイスの設定を変更する必要があります。
変更箇所は色変えておきました。
$ sudo cd /var/www/laravel/ $ sudo vim .env ~~~省略~~~ DB_HOST=Auroraのエンドポイント DB_PORT=3306 DB_DATABASE=Aurora作成時に設定したデータベース名 DB_USERNAME=Aurora作成時に設定したDBマスターユーザ名 DB_PASSWORD=Aurora作成時に設定したDBマスターパスワード ~~~省略~~~
Auroraに接続をして、Aurora作成時に設定したデータベース名と同じデータベースを作成します。今回は例としてtestdb
とします。
$ mysql -h Auroraクラスタのエンドポイント -u DBマスターユーザ名 -p Enter password:DBマスターパスワード mysql>show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql> create database testdb; Query OK, 1 row affected (0.02 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | testdb | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)
migration
の実行をおこないます。
$ sudo php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.1 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.03 seconds)
テーブルが作成されているか確認します。
$ mysql -h Auroraクラスタのエンドポイント -u DBマスターユーザ名 -p Enter password:DBマスターパスワード mysql> use testdb; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +--------------------+ | Tables_in_testdb | +--------------------+ | failed_jobs | | migrations | | users | +--------------------+ 3 rows in set (0.03 sec)
これでEC2/PHP7.4/Apache/Aurora MySQLでLaravel環境構築は完了となります。
終わりに
純粋に作成したときにいろいろ困ったので、
メモ書きを残しておこうと思いました。
PHP7.4
の利用やWEBとDBを別のインスタンスでLaravelを構築予定の方の役に立てば幸いです。