【AWS】LaravelプロジェクトをEC2にデプロイ

AWS,LaravelEC2,Laravel,デプロイ

Laravel & Vue CLI で作成したプロジェクトをためしにEC2サーバーにデプロイした際の作業手順メモです。

スクショとか画像で残しておけばよかったな……と思いつつほとんどコマンドラインなのでやりようがなかった気もします。

前提

  • ウェブ:EC2サーバー(Apache)
  • DB:RDS(MySQL)
  • PHP:PHP7.4
  • LaravelプロジェクトはGithubにコミット済み

ログイン

まずはSSHでEC2サーバーにログイン

ssh -i ~/Desktop/project/XXXXXXXXXXX-ssh-key.pem ec2-user@<IPアドレス>

事前準備(1回だけ)

Apacheインストール

Apacheインストール

sudo yum install -y httpd24

webサーバの起動

sudo service httpd start

システムがブートするたびにapacheが起動するよう設定

sudo chkconfig httpd on

有効か確認

chkconfig --list httpd

ec2-userをグループに追加する

ec2-userをApacheグループに追加する

sudo usermod -a -G apache ec2-user

一度ログアウトして再度ログインし、確認

exit
ssh -i ~/Desktop/project/XXXXXXXXXXX-ssh-key.pem ec2-user@<IPアドレス>
groups

/var/wwwの所有権をapacheグループに変更

sudo chown -R ec2-user:apache /var/www

グループの書き込み許可を追加

sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;

PHPのバージョンを合わせる

バージョンを確認

開発環境のPHPと一致していれば問題ない

php -v

PHP7.4をインストール

// PHP7.4を有効に
sudo amazon-linux-extras enable php7.4
// メタデータ削除
sudo yum clean metadata
// PHPインストール
yum install php-cli php-pdo php-fpm php-json php-mysqlnd
// 追加ライブラリのインストール
sudo yum install php php-gd php-mbstring php-opcache php-xml php-common

Gitインストール

git version
sudo yum install git

composerインストール

sudo curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

忘れてしまうのでメモしておくが、初めてデプロイする前に1回だけやればよい。次はデプロイするごとに必要になる手順。

Laravelプロジェクトのデプロイ

GithubにあるLaravelプロジェクトのClone

cd /var/www/html2
git clone URL.git

ドキュメントルートの設定

VirtualHostまたはDocumentRootの設定

sudo vi /etc/httpd/conf/httpd.conf

.htaccessの設定

<Directory /var/www/html2/自分のlaravel_project/public>
    AllowOverride All
</Directory>

apache再起動

sudo service httpd restart

Laravelプロジェクトでcomposerインストール

cd /var/www/html/laravelプロジェクト
composer install

config, routeのキャッシュクリア

php artisan config:cache
php artisan route:cache

プロジェクトのパーミッション変更

chmod 777 storage -R
chmod 777 bootstrap/cache -R

DB作成・権限付与

ルートでRDSのMySQLにログイン

mysql -h XXXXXXXXXX.ap-northeast-1.rds.amazonaws.com -u root -p

データベース作成

CREATE DATABASE my_database_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
show databases;

ユーザ作成

CREATE USER 'username'@'%' IDENTIFIED BY 'mypassword';

権限付与

GRANT ALL ON my_database_name.* TO 'username'@'%';

.envの設定

cp .env.example .env
vi .env
// 共通
APP_URL=http://IPアドレス ←サーバーのIPにする

// DB関連
DB_CONNECTION=mysql
DB_HOST=←RDSのエンドポイント
DB_DATABASE=データベース名
DB_USERNAME=RDS作成時のユーザ名
DB_PASSWORD=設定したパスワード

// メール送信関連(SESを使用する場合)
MAIL_MAILER=ses
MAIL_FROM_ADDRESS=no-reply@mailaddress.com
SES_KEY=XXXXXXXXXXXXX
SES_SECRET=xxxxxxxxxxxxxxxxxx
SES_REGION=ap-northeast-1

キーを作成し、キャッシュをクリアする

php artisan key:generate
php artisan config:clear

テーブル作成

php artisan migrate

HTTPS化する

[Laravel 7.x HTTPリクエスト]リクエストの取得→信用するプロキシの設定

cd app/Http/Middleware/
vi TrustProxies.php
protected $proxies = '*';
protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB;