【 AWS 】手探りでEC2にLaravel構築したメモ

かれー

EC2にLaravelを構築した忘備録

EC2

  • ダッシュボードで、「インスタンスを起動」を押下
  • マシンイメージでAmazon Linux 2 を選択

  • インスタンスタイプでt2.microを選択して次に進む
  • 基本的にはデフォルト設定のまま進み、「セキュリティグループの設定」までいく
  • セキュリティグループの設定で、適当なセキュリティグループ名 (後から探す時にわかりやすいもの、ここではlaravel-testとした)と、HTTPとHTTPSルールを追加して「確認と作成」押下
  • インスタンス作成の確認で内容を確認し、「起動」ボタンで作成 & 起動する
  • EC2のダッシュボードから「実行中のインスタンス」を押下して一覧へ移動
  • 作成したインスタンスが、少しすると実行中になるので、
    インスタンスIDを押下して詳細へ移動
  • Elastic IP アドレスが紐付けられていない場合、作成&紐付けを行う
  • 検索窓に「Elastic IP」を入力して移動する
  • Elastic IPアドレスの割り当て」を押下して割り当て画面に移動後、「割り当て」を押下
  • 一覧から、作成したIPの「割り当てられた IPv4 アドレス」をクリックして詳細画面に移動
  • 右上の「関連付け」ボタンを押下
  • インスタンスで今回作成したインスタンスを選択 &
    プライベートIPアドレスで今回作成したプライベートIPアドレスを選択して
    関連付ける」押下

  • ロードバランサー 設定
  • ロードバランサーの作成」を押下
  • HTTP/HTTPS」を選択
  • 適当な名前を入力、HTTPSリスナーを追加、
    アベイラビリティーゾーン」でインスタンスのゾーンを選んで次へ
  • セキュリティ設定の構成」で証明書を選択して次へ
  • セキュリティグループの設定」でEC2作成時に指定したセキュリティグループ名を選択して次へ
  • ルーティングの設定」で適当な名前を入力して新しくターゲットグループを作成
  • ターゲットの登録」で作成したインスタンスを選択して次へ
  • 入力内容を確認&「作成」ボタン押下

Route 53でドメイン設定

  • 検索窓でRoute 53と入力
  • ドメイン追加
  • Aレコードでインスタンスの「Elastic IP アドレス」を指定する

SSH接続

  • 対象のインスタンス詳細画面の「接続」ボタン押下でSSH情報が確認できる

RDS作成

  • RDSを検索して画面遷移
  • データベースの作成」を押下して作成画面へ
  • エンジンのオプションはMySQLを選択、バージョンは5.7にした
  • DB インスタンス識別子はわかりやすい名前に変更した方がいいかも
  • VPC セキュリティグループは適当な名前で新規作成しておく
    アベイラビリティーゾーンはEC2インスタンスと同じにしておく
  • 諸々確認して、作成ボタン押下
  • 作成したデータベースの詳細に移動し、「VPC セキュリティグループ」をクリック
  • 選択されているセキュリティグループをクリックして詳細へ移動
  • インバウンドのルールを編集」を押下
  • MySQL/Aurora」のルールを追加して、EC2インスタンスのセキュリティグループを指定する

s3作成

  • S3に移動
  • バケットを作成」押下
  • 適当な名前を入力して「作成」押下
  • S3アクセス用のIAMロールを作成
  • IAMに移動
  • ロールをクリックしてロール一覧へ移動
  • ロールの作成」を押下
  • EC2を選択して次へ
  • ポリシーの作成」を押下
  • JSONタブを押下して下記内容を入力
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": "*",
            "Resource": [
                "arn:aws:s3:::[許可をするバケット名]",
                "arn:aws:s3:::[許可をするバケット名]/*"
            ],
            "Effect": "Allow"
        }
    ]
}
  • タグはそのままスキップして確認
  • ポリシーの名前を入力して「ポリシーの作成」押下
  • ロールの作成で登録したポリシーを選択して次へ
  • タグはスキップして確認へ
  • ロール名を入力して「ロールの作成」押下

  • 作成したロールをEC2に適用する
  • インスタンス一覧に移動して、
    Laravelのインスタンスを選択 > アクション > セキュリティ > IAMロールの変更を選択
  • 先程作成したロールを選択して「保存

Apacheいれる

  • ssh接続をしてApacheいれる
sudo yum update -y
sudo yum -y install mysql git httpd curl
sudo systemctl start httpd
  • これでドメインにアクセスするとApacheのテストページが表示される
  • MySQL接続確認

ホスト: RDS詳細にある「エンドポイント
ユーザー: 作成したユーザー (admin)
パスワード: 入力したパスワード

 mysql -h xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -P 3306 -u admin -p

  • PHPいれる
$ sudo amazon-linux-extras install -y php7.4
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
$ sudo yum install -y php-xml
$ sudo yum install -y php-mbstring
$ composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
(省略)

  • LaravelのソースをGitからプルする
$ sudo chown ec2-user:ec2-user /var/www
$ cd /var/www
$ git clone {URL}
$ ls
cgi-bin  html  laravel_test
$ cd laravel_test
$ composer install
$ cp .env.example .env
$ vim .env

# MySQLの情報を更新
DB_CONNECTION=mysql
DB_HOST=XXXXX.rds.amazonaws.com # RDSのエンドポイント
DB_PORT=3306
DB_DATABASE=laravel_test # RDSのデータベース名
DB_USERNAME=admin # RDSのユーザー名
DB_PASSWORD=password # RDSのユーザーパスワード

# S3の情報
# EC2にS3アクセス用のIAMロールを設定しているためアクセスキーとシークレットキーは空白でOK
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET=バケット名

$ php artisan key:generate
$ php artisan migrate
  • パスを通す
$ sudo vi /etc/httpd/conf/httpd.conf

# DocumentRoot "/var/www/html"
DocumentRoot "/var/www/{今回作成したディレクトリ名}/public"

# 追記
<Directory /var/www/{今回作成したディレクトリ名}/public>
 AllowOverride All
</Directory>

$ sudo service httpd restart