LoginSignup
3
2

More than 1 year has passed since last update.

Lravel+EC2+Nginxでデプロイする

Last updated at Posted at 2021-11-07

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

EC2のここに書いてあります。
スクリーンショット 2021-10-27 14.37.16.png

Nginxのインストール

yumのアップデート

sudo yum update -y

nginxのインストール
バージョンは任意のものを指定する。

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

nginxの起動

sudo systemctl start nginx

ブラウザのアドレスバーにEC2インスタンスのIPv4アドレスを入力。
nginxの画面が表示されます。

スクリーンショット 2021-11-07 16.50.03.png

④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を変更

/etc/nginx/nginx.conf
#(中略)

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が下記のようになるようにコピペする。

/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
/var/www/リポジトリ名/.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とは

  1. パッケージ管理システム
  2. rpmというパッケージ管理システムをラッパーしている yum = rpm + 「リポジトリ」による自動更新機能 + 依存関係の管理 (検出だけじゃない)

「リポジトリ」とは
パッケージを複数格納している場所のこと

・yumで「パッケージの情報を管理する」
・Linuxで「パッケージ(yum)を読み解き、ソフトウェアを正しく動作させるようにする」
yum installで学ぶ! yum の仕組み

ApacheとNginxとPHP-FPMの関係性の図解

スクリーンショット 2021-10-27 14.58.07.png

スクリーンショット 2021-10-27 14.58.16.png

参考サイト集
Amazon LinuxにMysqlのclientだけインストールしてRDSへの接続する方法
https://qiita.com/tamorieeeen/items/d9b2af588f1dfd43120d
Amazon EC2にNginx+PHP8でLaravel8環境を構築する
https://knmts.com/become-engineer-30/

3
2
1

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
3
2