8
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

EC2・RDSでLaravelの環境構築【PHP・MySQL・Nginx】

Last updated at Posted at 2020-09-13

実現したいこと

既存で作成したLaravelのWebアプリケーションをEC2・RDSの環境にデプロイすることです。

前提

  • GitHubに自身で作成したLaravelのWebアプリケーションがリポジトリに上がっている
  • Laravel6.1
  • PHP7.3
  • MySQL5.7.31
  • Nginx1.17.10

EC2

EC2の作成

ステップ 1: Amazon マシンイメージ (AMI)

スクリーンショット 2020-09-07 7.52.19.png

  • Amazon Linux 2 AMIを選択

ステップ 2: インスタンスタイプの選択

スクリーンショット 2020-09-09 8.12.51.png

  • t2.micro

ステップ 3: インスタンスの詳細の設定

スクリーンショット 2020-09-07 7.54.53.png

  • 全てデフォルト

ステップ 4: ストレージの追加

スクリーンショット 2020-09-07 7.55.31.png

  • 全てデフォルト

ステップ 5: タグの追加

スクリーンショット 2020-09-07 7.56.11.png

  • キー Name
  • 値 適宜好きな名前

ステップ 6: セキュリティグループの設定

スクリーンショット 2020-09-07 7.57.29.png

  • ルールの追加
    • SSH *アクセス元を絞るため、ソースをマイIPを選択しましょう。
    • HTTP

ステップ 7: インスタンス作成の確認

スクリーンショット 2020-09-09 8.21.19.png

  • 起動

スクリーンショット 2020-09-09 8.22.48.png

  • キーペアの作成 *すでに作っているなら既存のキーペアを使用しましょう。ECSにSSHでログインする際に必要になります

SSHで接続

スクリーンショット 2020-09-09 8.34.14.png

  1. キーペアファイルを配置
  2. アクセス権を400に設定
  3. 接続 ssh -i ~/.ssh/[SHHキー.pem] ec2-user@[ドメイン名かIPアドレス(パブリック DNS (IPv4))]

■参考記事
MacのターミナルでEC2にSSHでログインする

Nginxのインストール

yum update

$ sudo yum update -y

Nginxをインストール
*適宜、ローカルのバージョンに合わせてインストールしてください。

$ sudo amazon-linux-extras install nginx1.12 -y

Nginxを起動

$ sudo systemctl start nginx

IPv4パブリックIPをブラウザに入力すると下記の画面が表示されます。

スクリーンショット 2020-09-09 8.59.03.png

PHPのインストール

PHPのインストール
*適宜、ローカルのバージョンに合わせてインストールしてください。

$ sudo amazon-linux-extras install php7.3

下記のコマンドでインストールされているか確認

$ php -v

Nginxを使用するため、PHPの設定情報を変更

$ sudo vi /etc/php-fpm.d/www.conf
/etc/php-fpm.d/www.conf
# 略
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx # デフォルトは「user = apache」
; RPM: Keep a group allowed to write in log dir.
group = nginx # デフォルトは「user = apache」
# 略

Nginxを再起動

$ sudo systemctl restart nginx

■参考記事
AWS EC2 + nginx + Laravel + RDS(PostgreSQL)の環境を構築する

Laraveのリポジトリをclone

Composer

Composerをインストール

$ cd ~
$ sudo curl -sS https://getcomposer.org/installer | php # コンポーザーのインストール
$ sudo chown root:root composer.phar 
$ sudo mv composer.phar /usr/bin/composer # パスを通す
$ composer # インストールされたか確認

php-mbstringとphp-xmlをインストール

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

Git

Gitのインストール

$ sudo yum install git # インストール
$ git --version # インストールされたかバージョン確認

GitHubのリポジトリからclone

ディレクトリ作成

$ sudo mkdir /var/www
$ cd /var/www

clone
*今回はHTTPS方式でクローンしましたが、もちろんSSH方式でも可能です。

$ sudo git clone https://github.com/[ユーザー名]/[リポトリ名].git

Nginxの設定情報の変更

$ sudo vi /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
# 略
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /var/www/リポジトリ名/public; # ここを修正

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            try_files $uri $uri/ /index.php$is_args$args; # ここを修正
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}
# 略

Nginxを再起動

$ sudo systemctl restart nginx

各種インストール、設定

$ cd /var/www/リポジトリ名
$ sudo composer install # composerのインストール
$ sudo chmod -R 777 storage/ # 権限変更

.envファイルの作成

$ sudo touch .env 

.envの情報を適宜変更してください。DBの設定はRDSの設定後に行います。

/var/www/リポジトリ名/.env
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

これでIPv4パブリックIPをブラウザに入力すればLaravelの画面が表示されると思います。

■参考記事
Laravelのプロジェクトをgit cloneしたときの手順

RDS

設定情報の値は適宜情報を入力し、作成を行ってください。

参考までに私は下記の画像の値を入力しました。

スクリーンショット 2020-09-13 12.01.11.png

スクリーンショット 2020-09-13 12.01.30.png

スクリーンショット 2020-09-13 12.02.08.png

スクリーンショット 2020-09-13 12.02.34.png

スクリーンショット 2020-09-13 12.03.14.png

Virtual Private Cloud (VPC)、サブネットグループ、既存のVPCセキュリティグループはEC2の設定に合わせました。
最初のデータベース名の値は.envファイルを設定する際に使用します。

セキリティグループ

今回のRDSのセキリティグループの設定はEC2と同一のものにしました。

セキリティグループのインバウンドルールの設定は、「HTTP」「SSH」を既存で追加していますので、ここで新たに「MYSQL/Auora」を追加しましょう。

スクリーンショット 2020-09-13 12.42.28.png

.envの設定、マイグーレション

.envの設定に先ほどのRDSの設定した値を入力します。

$ sudo vi .env
/var/www/リポジトリ名/.env
DB_CONNECTION=mysql
DB_HOST=エンドポイント
DB_PORT=3306
DB_DATABASE=最初のデータベース名
DB_USERNAME=マスターユーザー名
DB_PASSWORD=マスターパスワード

私は誤ってDB_DATABASEの値をDBクラスター識別子で設定してかなりハマりました。

最後にマイグレーションを実行

$ sudo php artisan migrate

これでIPv4パブリックIPをブラウザに入力するとデータベースが繋がった状態でLaravelの画面が表示されます。

参考

ゼロからわかるAmazon Web Services超入門 はじめてのクラウド

8
12
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
8
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?