Lravel+EC2+Nginxでデプロイする
環境
Amazon Linux2
参考サイト
EC2・RDSでLaravelの環境構築【PHP・MySQL・Nginx】
こちらだとPHP-fpmmとNginxの設定に関しての表記が少なくてハマってしまった所があったので、
そこを補いつつ全体の流れを書いて行こうと思います。
###全体の流れ
①EC2インスタンスの作成
②SSHでEC2に接続
③Nginxのインストール
④PHPのインストール
⑤Nginxを使用するためのPHP-fpmの設定
⑥GitHubからLaravelのリポジトリのclone
⑦Nginxの設定変更
⑧Laravelアプリの設定変更など
⑨RDSの作成
⑩セキュリティグループの設定
⑪.envファイルの設定変更とマイグレーション
・ハマったところと解決法のまとめ
・yumとは
・ApacheとNginxとPHP-FPMの関係性の図解
###EC2インスタンスの作成
ここは標準的な操作で良かったので、参考サイトを参照する。
EC2・RDSでLaravelの環境構築【PHP・MySQL・Nginx】
###SSHでEC2に接続
ファイルのアクセス権を400に変更してから接続
アクセス権変更コマンド
chmod 400 xxxxxxxxx.pem
ssh接続コマンド
ssh -i xxxxxxxxxxxxxxxxxx
###Nginxのインストール
yumのアップデート
sudo yum update -y
nginxのインストール
バージョンは任意のものを指定する。
sudo amazon-linux-extras install nginx1.12 -y
nginxの起動
sudo systemctl start nginx
ブラウザのアドレスバーにEC2インスタンスのIPv4アドレスを入力。
nginxの画面が表示されます。
###④PHPのインストール
PHPのインストール
バージョンは任意のものを指定する。
sudo amazon-linux-extras install php7.3
PHPがインストールされているか確認
php -v
###⑤Nginxを使用するためのPHP-fpmの設定
nginxが使えるようにするために、PHP-fpmの設定を変更する。
sudo vi /etc/php-fpm.d/www.conf
・「user = apache」→「user = nginx」に変更
・「group = apache」→「group = nginx」
・「listen.owner = apache」→「listen.owner = nginx」
・「listen.group = apache」→「listen.group = nginx」
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
#(中略)
listen = /var/run/php-fpm/php-fpm.sock
#(中略)
;listen.owner = nginx
;listen.group = nginx
;listen.mode = 0660
nginxを再起動
sudo systemctl restart nginx
###⑥GitHubからLaravelのリポジトリのclone
Composerとは
ComposerとはPHPのパッケージ管理システムです。 PHPのライブラリなどをファイルに記述して管理することで、簡単にライブラリのインストールやアンインストールなど、様々な管理が簡単できるようになります
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のmbstringとは、PHPでマルチバイト文字を使用できるようにする、PHPの拡張モジュールのことです。 マルチバイト文字とはひらがなや漢字など、2バイト以上で表現される文字のことで、mbstringの設定を行うことで、PHP内で日本語文字を扱えるようになります。
php-xmlとは
PHPから XML(文章の見た目や構造を記述するためのマークアップ言語の一種)を取り扱うために必要。
php-mbstringとphp-xmlをインストール
sudo yum install php-mbstring php-xml -y
Gitのインストール
sudo yum install git
Gitがインストールされたかを確認
git --version
・GitHubのリポジトリからcloneするためのディレクトリをEC2内に作成
・作成したディレクトリに移動
sudo mkdir /var/www
cd /var/www
・今回はHTTPS方式でクローンする
・GitHubのリポジトリのHTTPSアドレスをコピーしてsudo git clone の後に貼り付けると下記のようになるのでエンターを押して実行する
・アカウント名やパーソナルアクセストークンを聞かれる可能性がある
sudo git clone https://github.com/[ユーザー名]/[リポトリ名].git
###⑦Nginxの設定変更
nginxの設定はnginx.confに書かれている。よく見に行くファイルなので下記のパス(/etc/nginx/nginx.conf)は覚えておいてもいいぐらい。
sudo vi /etc/nginx/nginx.conf
・エラーログのパスが書いてある。ここもよく見に行くので、ここに記載されてることを覚えておけばいいかな
・rootのパスをcloneしたディレクトリの中のpublicに変更。ここを見に行くようにする設定
・locationを変更
#(中略)
error_log /var/log/nginx/error.log;
#(中略)
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; # ここを修正
}
#---------------ここから下を追加(fastcgi_passは適宜変えてください)-------------------
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#---------------ここから上を追加-------------------
error_page 404 /404.html;
location = /40x.html {
}
# error_page 500 502 503 504 /50x.html; # ここをコメントアウト
# location = /50x.html { # ここをコメントアウト
# } # ここをコメントアウト
}
#(中略)
Nginxを再起動
sudo systemctl restart nginx
###⑧Laravelアプリの設定変更など
composerのインストール
cd /var/www/リポジトリ名
sudo composer install
storageディレクトリの権限変更
sudo chmod -R 777 storage/
.envファイルの作成
デフォルトではローカルからGitHubにはpushされてない設定なので、通常だとローカルには.envファイルがあるのに、GitHub上にはない。
だから、cloneしたLaravelアプリにも.envがない。
なので、.envファイルを作成する必要がある。
sudo touch .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の画面が表示される。
###⑨RDSの作成
Virtual Private Cloud (VPC)、サブネットグループ、既存のVPCセキュリティグループはEC2の設定に合わせました。
最初のデータベース名、マスターユーザー名、マスターパスワードはこの後.envファイルの設定の際に使用するのでメモしておいてください。
設定の詳細画像を見ながら設定したい方は今回の参考サイトを参考にしてください。
EC2・RDSでLaravelの環境構築【PHP・MySQL・Nginx】
###⑩セキュリティグループの設定
今回のRDSのセキリティグループの設定はEC2と同一のものにしました。
セキリティグループのインバウンドルールの設定は、「HTTP」「SSH」を既存で追加していますので、ここで新たに「MYSQL/Auora」を追加しましょう。
設定の詳細画像を見ながら設定したい方は今回の参考サイトを参考にしてください。
EC2・RDSでLaravelの環境構築【PHP・MySQL・Nginx】
###⑪.envファイルの設定変更とマイグレーション
.envの設定に先ほどのRDSの設定した値を入力します。
sudo vi .env
DB_CONNECTION=mysql
DB_HOST=エンドポイント
DB_PORT=3306
DB_DATABASE=最初のデータベース名
DB_USERNAME=マスターユーザー名
DB_PASSWORD=マスターパスワード
マイグレーション
sudo php artisan migrate
これでIPv4パブリックIPをブラウザに入力するとデータベースが繋がった状態でLaravelの画面が表示されます。
###ハマったところと解決法のまとめ
RDSでマイグレーションができない
状態:エラー文が出ずに応答待ち
原因:RDSのインバウンドのルール設定がおかしかった。マイIPにしていた。EC2からの接続だからEC2のIPアドレスを設定しないといけなかった
.envファイルの設定変更とマイグレーション
mysqlでRDSへの接続をする
mysqlから出る
php artisan migrate
※ここがどのようなハマり方をしていたのかのメモをしていなかったため、とりあえず書いていたものを記載してみた。なにかのヒントになるといいかなぐらい。
key generateを要求された
key generateをすれば解決
php artisan key:generate
failed to open stream: No such file or directory inが出た
Composerをインストールすれば解決
sudo composer install
キャッシュのクリア
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
sudo composer dump-autoload
キャッシュのクリアまとめて実行
php artisan cache:clear; php artisan config:clear; php artisan route:clear; php artisan view:clear; sudo composer dump-autoload
###yumとは
0. パッケージ管理システム
0. rpmというパッケージ管理システムをラッパーしている
yum = rpm + 「リポジトリ」による自動更新機能 + 依存関係の管理
(検出だけじゃない)
「リポジトリ」とは
パッケージを複数格納している場所のこと
・yumで「パッケージの情報を管理する」
・Linuxで「パッケージ(yum)を読み解き、ソフトウェアを正しく動作させるようにする」
yum installで学ぶ! yum の仕組み
###ApacheとNginxとPHP-FPMの関係性の図解
参考サイト集
Amazon LinuxにMysqlのclientだけインストールしてRDSへの接続する方法
https://qiita.com/tamorieeeen/items/d9b2af588f1dfd43120d
Amazon EC2にNginx+PHP8でLaravel8環境を構築する
https://knmts.com/become-engineer-30/