4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【AWS環境構築メモ⑩】EC2インスタンスにLaravel環境を構築してアプリのデプロイをする

Last updated at Posted at 2022-03-31

0.はじめに

作成したEC2インスタンスにLaravel環境を構築します。
また、RDS(MySQL)との接続とチェックも行います。

今回のタスクでAWS本番環境構築はおおよそ完了します!!

EC2 : Nginx, php-fpm
RDS : MySQL

1.前回の記事

【AWS環境構築メモ⑨】RDSを作成する

2.前提条件

  • AWSアカウント作成済み
  • リージョンはアジアパシフィック(東京) ap-northeast-1
  • VPC作成済み
  • セキュリティーグループ作成済み
  • EC2インスタンス作成済み
  • SSL証明書発行済み
  • ELB作成済み
  • Aレコードのエイリアス作成済み
  • RDS作成済み
  • RDS作成時のマスターユーザー名、パスワード、DB名をメモしている

3.作成手順(サマリー)

順番 手順
1 yum アップデート
2 PHP インストール
3 nginx インストール
4 Composer インストール
5 Node.js インストール
6 MySQL インストール / 接続確認
7 Git インストール
8 git clone
9 php-fpm, nginxの設定
10 .envの設定
11 composerインストールとマイグレーション
12 アクセス確認

4.作成手順

1.yum アップデート

yum(パッケージ管理システム)のアップデート

  • EC2にSSH接続
  • yumのアップデート
$ ssh ec2-user@関連付けたElasticIPアドレス -i ~/.ssh/キーペア名.pem
$ sudo yum update -y

2.PHP インストール

ec2-user
// PHP, 拡張のインストール
$ sudo amazon-linux-extras enable php7.4
$ sudo yum install php-cli php-pdo php-fpm php-json php-mysqlnd -y
$ sudo yum install php-bcmath php-mbstring php-xml -y

// opcache インストール
$ sudo yum install php-opcache

// PHPのバージョン確認
$ php -v
  • opcache.iniの設定を変更する

推奨される php.ini の設定

ec2-user
$ sudo vi /etc/php.d/10-opcache.ini
10-opcache.ini
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
  • php-fpmを起動
  • php-fpmの状態確認
  • 自動起動に設定
ec2-user
$ sudo service php-fpm start
$ sudo systemctl status php-fpm
  // Active: active (running)なら起動中

$ sudo systemctl enable php-fpm

3.nginx インストール

  • nginxのインストール
  • インストール確認
ec2-user
// nginxのインストール
$ sudo amazon-linux-extras enable nginx1
$ sudo yum install nginx -y

// nginxのバージョン確認
$ nginx -v
  • nginxを起動
  • nginxの状態確認
  • 自動起動に設定
ec2-user
$ sudo systemctl start nginx
$ sudo systemctl status nginx
  // Active: active (running)なら起動中

$ sudo systemctl enable nginx

4.Composer インストール

  • Composerのインストール
  • Composerの移動
  • Composerのバージョン確認
ec2-user
//Composerのインストール
$ sudo curl -sS https://getcomposer.org/installer | php

//composerの移動
$ sudo chown root:root composer.phar
$ sudo mv composer.phar /usr/bin/composer

//Composerのバージョン確認
$ composer -V

↓↓以下のように表示されたらOK↓↓

   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.2.6 2022-02-04 17:00:38

5.Node.js インストール

  • Node.jsのインストール
  • Node.jsのバージョン確認
  • gcc-c++のインストール
ec2-user
// Node.jsのインストール
$ curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
$ sudo yum install -y nodejs

// Node.jsのバージョン確認
$ node -v

// gcc-c++のインストール
$ sudo yum -y install gcc-c++

6.MySQL インストール / 接続確認

EC2(Amazon Linux)にはMariaDBがデフォルトでインストールされているので、
アンインストールした後にMySQLをインストールします

  • MariaDBのパッケージ削除
ec2-user
$ sudo yum remove mariadb-*
  • MySQLのリポジトリをyumに追加する
  • 有効化する
  • yumリポジトリの確認
ec2-user
$ sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm -y
$ sudo yum-config-manager –enable mysql80-community
$ sudo cat /etc/yum.repos.d/mysql-community.repo

//以下の結果が出ていればOK
   ↓ ↓ ↓
[mysql-cluster-8.0-community]
name=MySQL Cluster 8.0 Community
baseurl=http://repo.mysql.com/yum/mysql-cluster-8.0-community/el/7/$basearch/
enabled=0
gpgcheck=1
  • MySQLのインストール
ec2-user
$ sudo yum install --enablerepo=mysql80-community mysql-community-server
$ sudo yum install --enablerepo=mysql80-community mysql-community-devel

//インストール時にGPGキーに関するエラーが出た場合は以下コマンドを実行
$ sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

参考 : [MySQL] アップデート時にGPGキーのエラーで停止してしまう場合

  • MySQLのログファイル作成
ec2-user
$ sudo touch /var/log/mysqld.log
  • インストールされたMySQLパッケージの確認
ec2-user
$ yum list installed | grep mysql
// 以下が表示されたら完了
   ↓ ↓ ↓
mysql-community-client.x86_64  8.0.28-1.el7                   @mysql80-community
mysql-community-client-plugins.x86_64  8.0.28-1.el7           @mysql80-community
mysql-community-common.x86_64  8.0.28-1.el7                   @mysql80-community
mysql-community-devel.x86_64   8.0.28-1.el7                   @mysql80-community
mysql-community-icu-data-files.x86_64  8.0.28-1.el7           @mysql80-community
mysql-community-libs.x86_64    8.0.28-1.el7                   @mysql80-community
mysql-community-server.x86_64  8.0.28-1.el7                   @mysql80-community
mysql80-community-release.noarch
  • MySQLのバージョン確認
ec2-user
$ mysqld --version
  • MySQLの起動
  • 状態確認
  • 自動起動に設定
ec2-user
$ sudo systemctl start mysqld.service
$ sudo systemctl status mysqld.service
$ sudo systemctl enable mysqld.service
  • MySQLの接続確認
    • エンドポイントは作成したRDSの[接続とセキュリティ]から確認できます
    • マスターユーザー、パスワードはRDS作成時に設定したもの
ec2-user
$ mysql -h エンドポイント -u 設定したマスターユーザー名 -p
Enter password:設定したパスワード

//以下のように表示されたら接続成功
  ↓ ↓ ↓
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 313101
Server version: 8.0.27 Source distribution

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

7.Git インストール

  • Gitのインストール
  • Gitのバージョン確認
ec2-user
$ sudo yum install git -y
$ git --version

8.git clone

/var/www/にGitHubのリポジトリをクローンする

  • /var/www/に移動
    • もし存在しなかった場合は、mkdirコマンドで作成。(sudo mkdir /var/www)
  • /var/www/に書き込み権限追加
  • git cloneする
  • 確認
  • ~/に戻る
ec2-user
$ cd /var/www
$ sudo chmod 777 /var/www
$ git clone リモートリポジトリURL
$ ls -l
$ cd ~/

9.php-fpm, nginxの設定

php-fpmの設定

ec2-user
sudo vi /etc/php-fpm.d/www.conf
  • 以下の内容に変更
www.conf
; 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.owner = nginx  //変更箇所
;listen.group = nginx  //変更箇所
;listen.mode = 0660   //変更箇所

nginxの設定

  • ドメイン名.confの設定
     
ec2-user
sudo vi /etc/nginx/conf.d/ドメイン名.conf
  • 以下の内容に変更

開発環境と同じ設定にする。

参照 : 【Docker+Laravel6メモ】開発環境構築についてまとめてみました

ドメイン名.conf
server {
    listen       80;
    server_name  ドメイン名;

    root /var/www/アプリディレクトリ名/public;
    index index.php index.html index.htm;

    access_log  /var/log/nginx/dev.access.log main;
    error_log  /var/log/nginx/dev.error.log;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
	root /var/www/アプリディレクトリ名/public;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
    }
}

php-fpm, nginxの再起動

  • php-fpm再起動
  • 状態確認
ec2-user
$ sudo systemctl restart php-fpm
$ sudo systemctl status php-fpm
  • nginx再起動
  • 状態確認
ec2-user
$ sudo systemctl restart nginx
$ sudo systemctl status nginx

10..envの設定

  • アプリディレクトリへ移動
  • .env作成
  • .envの設定
ec2-user
$ cd /var/www/アプリディレクトリ名
$ cp .env.example .env
$ vi .env
  • .envを以下の内容に変更
.env
APP_NAME="アプリ名"  //変更箇所
APP_ENV=production  //変更箇所
APP_KEY=
APP_DEBUG=false  //変更箇所(削除してもOK)
APP_URL=https://ドメイン名  //変更箇所

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=エンドポイント  //変更箇所 (RDS作成時に設定したもの)
DB_PORT=3306
DB_DATABASE=DB名  //変更箇所 (RDS作成時に設定したもの)
DB_USERNAME=マスターユーザー名  //変更箇所 (RDS作成時に設定したもの)
DB_PASSWORD=マスターパスワード  //変更箇所 (RDS作成時に設定したもの)

・・・省略・・・
  • APP_KEYの生成
  • APP_KEYの確認
  • 権限の変更(660)
アプリディレクトリ
$ php artisan key:generate
$ cat .env
$ chmod 660 .env

11.Composerインストールとマイグレーション

  • Composer インストール(本番環境用)
  • Composerバージョン確認
アプリディレクトリ
$ composer install --no-dev
$ composer
  • マイグレーション実行
  • シーダー実行(必要あれば)
アプリディレクトリ
$ php artisan migrate
$ php artisan db:seed
  • キャッシュ作成
アプリディレクトリ
php artisan config:cache

12.アクセス確認

  • storegeとbootstrap/cacheの権限変更
アプリディレクトリ
$ chmod -R 777 storage
$ chmod -R 777 bootstrap/cache
  • [https://ドメイン名/]でアプリが表示されることを確認
  • [http://ドメイン名/]でも[https]でアクセスできることを確認

無事アプリのホーム画面が表示されたら完了です。

Laravel環境構築とアプリのデプロイが完了しました!!

5.最後に

以上でEC2インスタンスのLaravel環境構築、アプリのデプロイ完了しました。

これでAWSの本番環境構築はほぼ完成です。

スクリーンショット 2022-04-01 2.18.16.png

最後にCircleCIを使用した自動デプロイ設定をします。
またS3を使用した画像アップロードについても記事を執筆中です。

【AWS環境構築メモ⑪】CircleCIを使用した自動デプロイ(執筆中)
【AWS環境構築メモ⑫】AWS S3を使用した画像アップロード(執筆中)

6.参考

4
0
0

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
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?