AWSのEC2インスタンスおよびRDS(MySQL)データベースを立ち上げ、Laravelを起動してマイグレーションを実行できるように環境構築してみます。
EC2のインスタンス作成
インスタンスの作成においては主な項目のみ記述しています。記述していない部分に関しては基本的にデフォルト設定です。
関連ページ
ステップ 1: Amazon マシンイメージ (AMI)
本記事では、「Amazon Linux 2 AMI (HVM), SSD Volume Type」を利用します。
ステップ 6: セキュリティグループの設定
laravel-sgという名前のセキュリティーグループを作成し、下記のようにルールを追加しました。
RDSのデータベース作成
主な設定項目のみ説明します(それ以外はデフォルト)。
エンジンのオプションはMySQLを選択します。またテンプレートとして本記事では「無料利用枠」を選択しています。
「設定」において、MySQLに接続する際のマスターパスワードを設定します。
「接続」の「追加の接続設定」で「VPC セキュリティグループ」の新規作成をおこないます。適当なセキュリティグループ名を入力(本記事ではmy-sg)し、アベイラビリティゾーンはEC2で作成したインスタンスと同様のものを指定しておきます。
「追加設定」で最初のデータベース名を適当に設定しておきます。今回はlaravelという名前にします。このデータベースはMySQLに接続してからでも作成することができます。
以上で「データベースの作成」ボタンをクリックします。
しばらくしたら利用可能となるので、作成したデータベースの画面に遷移し、VPC セキュリティグループを確認します。上記で新規作成した「my-sg」という名前が確認できます。これからEC2からRDSが利用できるようにこのセキュリティグループを編集するため、クリックします。
EC2の画面に遷移するので、選択されているセキュリティグループをクリックします。
「インバウンドのルールの編集」をクリックします。
編集画面においてソースを変更します。上記で作成したEC2インスタンスのセキュリティグループである「laravel-sg 」を設定します。
以上で画面での設定は完了です。
EC2(Amazon Linux 2)での準備
本記事ではあくまでLaravelを動かすまでの準備で、タイムゾーンの設定やデフォルトユーザ(ec2-user)の削除等はおこなっていませんのであしからず。
リモート接続します。本記事ではMacのターミナルを利用しています。
1 |
$ ssh -i "sample-key.pem" ec2-user@ec2-52-68-32-221.ap-northeast-1.compute.amazonaws.com |
パッケージのアップデートをおこないます。
1 |
$ sudo yum update -y |
MySQL、Git、Apache、cURLをインストールしておきます。
1 |
$ sudo yum -y install mysql git httpd curl |
Apacheを起動してみます。
1 |
$ sudo systemctl start httpd |
インスタンスの説明タブ画面において、パブリックDNS (IPv4)またはIPv4 パブリック IPをコピーし、ブラウザでApacheの「Test Page」が表示されるのが確認できます。
MySQLに接続してみます。
1 |
$ mysql -h database-1.cregbteok89x.ap-northeast-1.rds.amazonaws.com -P 3306 -u admin -p |
database-1~はRDSで作成したデータベースのエンドポイントです。問われるパスワードも上述で設定したマスターパスワードを入力します。
laravelという名前のデータベースが生成されていることが確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 |
MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | innodb | | laravel | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec) |
Laravelの起動
本記事ではGitHubにすでにLaravelのプロジェクトがあることを前提に話を進めます。
Gitのユーザー名とEmailアドレスを設定しておきます。
1 2 |
git config --global user.name "hoge" git config --global user.email hoge@hoge.co.jp |
次にamazon-linux-extrasコマンドを利用してPHPをインストールします。たんにyum install phpだとバージョン5.4.16がインストールされます。
1 |
$ sudo amazon-linux-extras install -y php7.3 |
Composerをインストールし、パスを通します。
1 2 |
$ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer |
今回Laravelのプロジェクトは/var/wwwディレクトリ以下に配置します。
1 |
$ cd /var/www |
/var/wwwディレクトリの所有者とグループを変更しておきます。
1 |
$ sudo chown ec2-user:ec2-user /var/www |
GitHubからLaravelのプロジェクトをクローンします。
1 |
$ git clone https://github.com/hoge/hoge-laravel.git |
Composerのパッケージをインストールするために必要なライブラリをインストールします。
1 |
$ sudo yum install -y php-xml |
パッケージのインストールをおこないます。
1 |
$ composer install |
Apacheに、ダウンロードしたプロジェクトのパスを通します。
1 |
$ sudo vi /etc/httpd/conf/httpd.conf |
まず下記の部分を修正します。
1 |
DocumentRoot "/var/www/hoge-laravel/public" |
そして以下のコードを追記します。
1 2 3 |
<Directory /var/www/hoge-laravel/public> AllowOverride All </Directory> |
再起動します。
1 |
$ sudo service httpd restart |
クローンしたLaravelのプロジェクトディレクトリ内に移動します。
1 |
$ cd hoge-laravel/ |
.envファイルを作成します。
1 |
$ cp .env.example .env |
APP_KEYを生成します。
1 |
$ php artisan key:generate |
成功すると下記メッセージが表示されます。
1 |
Application key set successfully. |
.envファイルのAPP_KEYに値が設定されているのが確認できます。
1 2 3 4 5 6 7 |
$ cat .env APP_NAME=Laravel APP_ENV=local APP_KEY=base64:5W55Fc4jnojcs6FrKjIMugPTxlIEwnlp7YeRcU8F8mk= APP_DEBUG=true APP_URL=http://localhost |
storegeとbootstrap/cacheに書き込み権限を与えます。
1 2 |
$ chmod -R 777 storage $ chmod -R 777 bootstrap/cache |
この時点で、パブリックDNS (IPv4)またはIPv4 パブリック IPにおいてApacheの「Test Page」画面ではなく、Laravelの画面が表示されるのが確認できます。
次にRDSのMySQLをLaravelから利用できるようにします。.envファイルの下記部分を編集します。上述で説明してきたDB_HOST、DB_DATABASE、DB_PASSWORD等を設定してください。
1 2 3 4 5 6 |
DB_CONNECTION=mysql DB_HOST=database-1.cregbteok89x.ap-northeast-1.rds.amazonaws.com DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=admin DB_PASSWORD=password |
実際にマイグレーションを実行してみます。
1 |
$ php artisan migrate |
成功したらMySQLに接続し、laravelデータベースにテーブルが生成されているかを確認してみます。
1 2 3 4 5 6 7 8 9 |
MySQL [laravel]> show tables; +-------------------+ | Tables_in_laravel | +-------------------+ | failed_jobs | | migrations | | users | +-------------------+ 3 rows in set (0.00 sec) |