実現したいこと
既存で作成したLaravelのWebアプリケーションをEC2・RDSの環境にデプロイすることです。
前提
- GitHubに自身で作成したLaravelのWebアプリケーションがリポジトリに上がっている
- Laravel6.1
- PHP7.3
- MySQL5.7.31
- Nginx1.17.10
EC2
EC2の作成
ステップ 1: Amazon マシンイメージ (AMI)
- Amazon Linux 2 AMIを選択
ステップ 2: インスタンスタイプの選択
- t2.micro
ステップ 3: インスタンスの詳細の設定
- 全てデフォルト
ステップ 4: ストレージの追加
- 全てデフォルト
ステップ 5: タグの追加
- キー Name
- 値 適宜好きな名前
ステップ 6: セキュリティグループの設定
- ルールの追加
- SSH *アクセス元を絞るため、ソースをマイIPを選択しましょう。
- HTTP
ステップ 7: インスタンス作成の確認
- 起動
- キーペアの作成 *すでに作っているなら既存のキーペアを使用しましょう。ECSにSSHでログインする際に必要になります
SSHで接続
- キーペアファイルを配置
- アクセス権を400に設定
- 接続
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をブラウザに入力すると下記の画面が表示されます。
PHPのインストール
PHPのインストール
*適宜、ローカルのバージョンに合わせてインストールしてください。
$ sudo amazon-linux-extras install php7.3
下記のコマンドでインストールされているか確認
$ php -v
Nginxを使用するため、PHPの設定情報を変更
$ sudo vi /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
# 略
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の設定後に行います。
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
設定情報の値は適宜情報を入力し、作成を行ってください。
参考までに私は下記の画像の値を入力しました。
Virtual Private Cloud (VPC)、サブネットグループ、既存のVPCセキュリティグループはEC2の設定に合わせました。
最初のデータベース名の値は.envファイルを設定する際に使用します。
セキリティグループ
今回のRDSのセキリティグループの設定はEC2と同一のものにしました。
セキリティグループのインバウンドルールの設定は、「HTTP」「SSH」を既存で追加していますので、ここで新たに「MYSQL/Auora」を追加しましょう。
.envの設定、マイグーレション
.envの設定に先ほどのRDSの設定した値を入力します。
$ sudo vi .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の画面が表示されます。