LoginSignup
1
0

More than 3 years have passed since last update.

AWSでLAMP環境を構築して、Laravelアプリをデプロイする

Last updated at Posted at 2020-08-07

今回はAWSのEC2、RDSを用いてLAMP環境を構築して、Laravelアプリをデプロイする手順を紹介します。

今回の流れ

1.RDSを用いてDBサーバー作成
2.EC2を用いてWEBサーバーを作成
3.サーバー間の連携
4.アプリのデプロイ

前提条件

・Macを使用
・AWSアカウントを作成済みであること
・GitHubのリモートリポジトリに、開発済みのLaravelアプリが置いてあること

1.RDSを用いてDBサーバー作成

コンソールにサインインした後、AmazonRDSに移動します。
スクリーンショット 2020-08-07 9.22.21.png
続いてオレンジ色のCreate databaseボタンをクリックします。
スクリーンショット 2020-08-07 9.24.32.png
使用するデータベースエンジンを選びます。今回はMySQLを選択します。
バージョンはよしなに選択してください。
スクリーンショット 2020-08-07 9.28.31.png
今回は無料利用枠のものを作成します。
本番環境の場合は適したプランを選択してください。
スクリーンショット 2020-08-07 9.33.25.png
インスタンス名、マスターユーザー名、パスワードを設定します。
後ほど使いますので、安全な場所にメモしておきましょう。
スクリーンショット 2020-08-07 9.35.39.png
インスタンスのスペック、ストレージの容量等を設定します。
今回はデフォルト設定で進めますが、本番環境の場合はよしなに選択してください。
スクリーンショット 2020-08-07 9.37.05.png
ネットワークの設定を行います。
VPCを作成済みの方は作成したVPCを、そうでない方はデフォルトのVPCを設定しましょう。
スクリーンショット 2020-08-07 9.43.13.png
最後にオプションの設定をします。
RDSインスタンス初期化時に自動で作られるデータベースの名前を設定します。
今後データベースに接続する際は、ここで設定したデータベース名を使用します。スクリーンショット 2020-08-07 9.51.15.png
スクリーンショット 2020-08-07 9.51.05.png
オレンジ色のCreate databaseボタンをクリックして設定したデータベースを作成します。
スクリーンショット 2020-08-07 12.28.58.png

2.EC2を用いてWEBサーバーを作成

コンソールからAmazon EC2に移動して、青色のLaunch Instanceボタンをクリックします。
スクリーンショット 2020-08-07 12.36.05.png
使用するマシンのイメージを選択します。
今回はAmazon Linux 2 AMIを用います。スクリーンショット 2020-08-07 12.39.41.png
EC2インスタンスタイプを設定します。
CPU、メモリ、ストレージ、ネットワークパフォーマンス等を考慮してよしなに選択します。
今回はt2.microを選択します。(無料利用枠の対象です)スクリーンショット 2020-08-07 13.45.57.png

スクリーンショット 2020-08-07 12.48.01.png
詳細の設定です。
VPCやサブネット等を設定できますが、今回はとりあえずVPCのみ設定しておきます。
RDSで設定したものと同じVPCを選択してください。
スクリーンショット 2020-08-07 12.50.42.png
ストレージの設定をします。
他にインスタンスを作成されない場合は30GBまでは無料枠です。
今回はデフォルトの8GBで進めていきます。
スクリーンショット 2020-08-07 12.56.42.png
続いてタグの設定ですが今回は未設定のまま進み、セキュリティグループの設定をします。
EC2インスタンスへのアクセス許可、制限を指定します。
まずはSSH接続の設定です。
Create a new security groupを選択し、新しいグループを作成します。
TypeのプルダウンからSSHを選択し、SourceのプルダウンからはMyIPを選択しましょう。
次にHTTP接続です。
Add Ruleをクリックした後、TypeのプルダウンからHTTPを選択し、SourceのプルダウンからはMyIPを選択しましょう。
今回は自分のIPからのみ接続できる設定にします。
本番環境で不特定多数のアクセスを集める場合はHTTPのSourceをAnywhereにしてください。
スクリーンショット 2020-08-07 13.45.57.png
Review and Launchをクリックし確認画面に遷移し、設定内容に問題がなければLaunchをクリックしましょう。
最後に、SSH接続するためのキーペアを作成します。
Create new key pairを選択し、キーペアの名前を設定します。
設定後、Download Key Pairをクリックして.pemファイルをダウンロードします。
このファイルがなければSSH接続できないので、安全な場所で保管してください。
青色のボタンLaunch Instanceをクリックしてインスタンスを起動します。
スクリーンショット 2020-08-07 13.59.49.png

3.サーバー間の連携

まずは先に作成したRDSの設定を変更し、EC2インスタンスからRDSインスタンスへのアクセスを可能にします。
AmazonRDSに移動します。
スクリーンショット 2020-08-07 9.22.21.png
左側のダッシュボードのDatabasesをクリックして、先に作成したデータベースを選択します。
Connectivity & securityタブのセキュリティグループをクリックします。
スクリーンショット 2020-08-07 14.11.54.png
デフォルトではEC2インスタンスからRDSインスタンスへのアクセスは許可されていません。
Inboundタブを開きeditをクリックしてセキュリティグループの編集を行います。
スクリーンショット 2020-08-07 14.22.01.png
TypeをMySQL/Auroraに、SourceをCustomeに設定し先ほど作成したEC2のセキュリティグループの名前を入力します。
利用可能なセキュリティグループが表示されるので、先ほど作成したものを選択します。自動で値が入力されます。
青色のSavaボタンをクリックし設定を反映させます。
スクリーンショット 2020-08-07 14.58.00.png
続いてEC2インスタンスにSSH接続していきます。
ターミナル上のキーペアがあるディレクトリで以下のコマンドを実行します。

ssh -i .pemファイル名 ec2-user@パブリックIP

パブリックIPは、接続するインスタンスのこちらをコピーペーストしましょう。
スクリーンショット 2020-08-07 15.15.22.png
EC2インスタンスにSSH接続できたら、RDSに接続するための準備をしていきます。
MySQLをインストールしたいのですが、MariaDBがデフォルトでインストールされていると競合してしまうので、アンインストールしておきます。

$ sudo yum remove mariadb-libs

MySQLのリポジトリを追加して、MySQLをインストールします。

$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
$ sudo yum install mysql

MySQLのホスト名を環境変数に設定して、データベースに接続します。
エンドポイントはRDSインスタンスのホスト名を入力します。
ユーザー名、パスワード、DB名は先に作成したものです。

$ export MYSQL_HOST=エンドポイント
$ mysql --user=ユーザー名 --password=パスワード DB名

スクリーンショット 2020-08-07 17.11.38.png
Laravelアプリのためのユーザーを作成し、データベースへのアクセス権限を付与します。

mysql> CREATE USER 'ユーザー名' IDENTIFIED BY 'パスワード';
mysql> GRANT ALL PRIVILEGES ON DB名.* TO ユーザー名;
mysql> FLUSH PRIVILEGES;
mysql> Exit

次にEC2インスタンスにApacheとPHPをインストールします。
まずはApacheのインストールです。

$ sudo yum install -y httpd
$ sudo service httpd start

パブリックIPアドレスにアクセスして、以下の画面が表示されていればインストール成功です。
スクリーンショット 2020-08-07 17.47.44.png
PHP並びにLaravelアプリに必要な拡張モジュール等をインストールしていきます。
今回のLaravelのバージョンは5.5なので、対応したPHP拡張モジュールも合わせてインストールしておきます。
また、自分の開発したアプリに必要な拡張モジュールがあれば適宜追加でインストールしてください。

$ sudo amazon-linux-extras install -y php7.2
$ sudo yum -y install php-openssl php-pdo php-mbstring php-tokenizer php-xml

これでLAMP環境を構築することができました。

4.アプリのデプロイ

Laravelアプリのデプロイ、デプロイのための最終準備をしていきます。
まずはEC2インスタンスにGitをインストールします。

$ sudo yum -y install git

続いて/var/www/htmlに移動して、完成済みのLaravelアプリをgit cloneします。

$ cd /var/www/html
$ sudo git clone URL

Apacheの設定を変更していきます。
/etc/httpd/confに移動して、httpd.confを編集します。

$ cd /etc/httpd/conf
$ vi httpd.conf

以下が編集箇所です。
119行目付近でドキュメントルートを変更し、アクセスがあった際にアプリ直下のpublicディレクトリにファイルを探しにいってくれるようにします。
131行目付近、151行目付近でpublicディレクトリ内での設定の変更を有効にします。
最終行でmod_rewriteを許可することでURLの書き換えを可能にします。

#119行目付近 
DocumentRoot "/var/www/html/Laravelアプリ/public"
#131行目付近
<Directory "/var/www/html/Laravelアプリ/public">
#151行目付近
AllowOverride All
#最終行に追加
LoadModule rewrite_module modules/mod_rewrite.so

変更後はApacheを再起動させます。

$ sudo systemctl restart httpd

続いてComposerをインストールします。
/usr/local/bin/にインストールしてファイル名を変更することで、どこからでもcomposerコマンド一つで呼び出し可能にします。

$ cd /usr/local/bin/
$ sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ sudo php -r "if (hash_file('sha384', 'composer-setup.php') === 'e5325b19b381bfd88ce90a5ddb7823406b2a38cff6bb704b0acc289a09c8128d4a8ce2bbafcd1fcbdc38666422fe2806') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified
$ sudo php composer-setup.php
$ sudo php -r "unlink('composer-setup.php');"
$ sudo mv composer.phar composer

最後の仕上げです。
アプリの環境変数の設定等を行っていきます。
まずはcomposer.lockファイルを基にパッケージをインストールします。
ディレクトリの権限も変更しておきます。こちらの変更はアプリ起動完了後によしなに変更しても良いかと思います。

$ cd /var/www/html
$ chmod 777 Laravelアプリ
$ cd Laravelアプリ
$ chmod 777 bootstrap/cache
$ chmod 777 storage/framework/sessions
$ chmod 777 storage/framework/views
$ chmod 777 storage/logs vendor
$ composer install

.env.exampleファイルを基に.envファイルを作成します。

$ cp .env.example .env
$ vi .env

先に作成したRDCインスタンスを基に、DB接続に関する変数を定義していきます。
ユーザー名、パスワードはRDCインスタンスに接続して登録したものを設定します。

DB_CONNECTION=mysql
DB_HOST=ホスト名(エンドポイント)
DB_PORT=3306
DB_DATABASE=DB名
DB_USERNAME=ユーザー名
DB_PASSWORD=パスワード

artisanコマンドを叩いてアプリケーションキーを作成します。
マイグレーションも実行しておきます。(開発済みのアプリなのでマイグレーションファイルがあることが前提です)

php artisan key:generate
php artisan migrate

これでパブリックIPアドレスにアクセスすれば、アプリケーションが動作しているはずです!
ここまでお疲れ様でした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0