参考にした記事
- AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得
- AWS EC2 に Nginx + PHP8 で Laravel8 環境を構築する
- 【デプロイマスター#1】LaravelアプリをAWSのEC2にインストール
- 【AWS入門】EC2+NGINX+MySQL環境へLaravelをデプロイする手順
手順(重要なところ抜粋)
結果これで行けた : 【AWS入門】EC2+NGINX+MySQL環境へLaravelをデプロイする手順
-
Laravelのプロジェクトをgithubへpush
(一番初期の公式からinstallしたLaravelプロジェクトだと今回のデプロイはいけた) -
EC2インスタンス作成→SSH接続→Elastic IPアドレス設定はUdemyにて
-
EC2インスタンスにnginx or apatch と php、 composer、Laravel、mysqlを入れる
-
nginxの設定ファイルの「root」パスにEC2のルートディレクトリ「/var/www/public」を指定する
-
publicディレクトリ内でgit cloneでgithubのLaravelプロジェクトをcloneする
※この時、git clone git@github.com:ユーザー名/プロジェクト名.git .
上記のように末尾に「.」を入れる。
それにより、githubのトップディクトリ以下のファイルがカレントディレクトリの直下にcloneされる。
詰まったところ
上記URLだけでは詰まるのでそのあたりを以下で説明する
phpインストール
このサイトはphp7.3だが、8以上を指定してOK
sudo amazon-linux-extras install -y php8.0
AWS EC2 に Nginx + PHP8 で Laravel8 環境を構築する
この場合、上記記事が参考になる
php-fpm
/var/www/public直下にlaravelアプリをgithubからクローンするなら、記事の方法でOK
別の記事ではnginxのルート指定を/var/www/自分のアプリ名/publicにしているものがあった。
しかし自分のアプリ名をルートに指定する方法ではLaravelをクローンしてもURL入れても表示されなかった。
Nginx
$ sudo vi /etc/nginx/nginx.conf
上記コマンドでnginxの設定ファイルを修正する。
基本参考記事の通りコピペで動いた。
注意点は
server {
listen 80;
server_name _;
root /var/www/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
上記のうち
root /var/www/public;
この部分で表示させるファイルのドキュメントルートを指定している。
上記の場合public直下にindex.htmlがあればEC2のURLにその記述が表示できるといったもの。
そのため、LaravelをGithubからクローンする際はこのroot /var/www/publicのディレクトリ内で行う!(この時上述の末尾に「.」を入れるクローンにする)
Githubにパブリックキー登録
この部分はAWS EC2 に Nginx + PHP8 で Laravel8 環境を構築する
上記、記事の方がわかりやすいのでこちらの方法で行う
Laravel のデプロイ(GitHub から Pull)
ブラウザでの表示確認用に作成したファイルとディレクトリは削除しておく。
sudo rm -rf /var/www/your_project_name/
Git をインストールする。
sudo yum install -y git
インストールされたことを確認。
git --version
GitHub に登録する鍵を作成。
ssh-keygen -t rsa
~/.ssh 配下に以下の2ファイルが作成される。
- id_rsa
- id_rsa.pub
id_rsa.pub の内容を GitHub に登録する。
cat ~/.ssh/id_rsa.pub
上記で表示された内容を GitHub のリポジトリの、Settings > SSH keys > Add deploy key より登録。
※記事では「Deploy keys」となっているがSSH keysが正しい。
www フォルダのオーナーを変更する。
sudo chown ec2-user:ec2-user /var/www/
GitHub からプロジェクトをroot /var/www/publicディレクトリに移動してから Clone する。
.envファイル作成
AWS EC2 に Nginx + PHP8 で Laravel8 環境を構築するのやり方で進める。
cp .env.example .env
このコマンドで.envファイルを作成する。
vi /var/www/.env
.envの内容はアプリによって違うと思いますので、適宜設定してください。
APP_NAME=”アプリ名”
APP_ENV=production
APP_KEY=この後生成
APP_DEBUG=false
APP_URL=”アプリURL”
中略
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=”DB作成時の名前”
DB_USERNAME=root
DB_PASSWORD=”MySQL設定時のパスワード”
中略
上記にて.envファイルの項目を記入する
DB_PASSWORD=”MySQL設定時のパスワード”
これについてはmysqlインストール時に指定したものを使用する。
パッケージインストール
$ composer install
アプリケーションキー(APP_KEY)生成
$ php artisan key:generate
DBテーブル作成
$ php artisan migrate
確認
先程確認したパブリックIPアドレスを開いて確認してみましょう。
ここまでの手順が問題なくできていれば、Laravelが表示される。
EC2でnpm(Node.js)を使える様にする
⑴ インストール可能な Node.js のバージョン一覧を表示
$ nvm ls-remote
すると
v0.1.14
v0.1.15
v0.1.16
...
v5.0.0
...
というように、インストール可能なNodeの一覧が表示
最新の安定版(LTS)バージョンの確認はNode.js公式のDownloadページから行える。
⑵ Node.js のインストール
$ nvm install 5.0.0
⑶ 使用するバージョンの指定
インストールしたバージョンをnvmで指定します
$ nvm use v5.0.0
確認のため、以下のコマンドを打ち、
$ node -v
v5.0.0
と表示されたら成功。
TODOアプリ作成
参考記事:Laravel8 x Todoリスト チュートリアル
上記記事を参考に作成できた。
2回目以降のデプロイ時のコマンド
失敗例
git pull origin main
上記git pull ではマージ作業が必要になりうまくいかなかった。
成功例
[VSCode] Remote-SSH でサーバ上のファイルを直接編集する方法
この記事のVSCode拡張機能を使用して、直接EC2のコードで実装を進める。
この時、githubからクローンしているので、gitも使える!