0.はじめに
作成したEC2インスタンスにLaravel環境を構築します。
また、RDS(MySQL)との接続とチェックも行います。
今回のタスクでAWS本番環境構築はおおよそ完了します!!
EC2 : Nginx, php-fpm
RDS : MySQL
1.前回の記事
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 インストール
- PHP, 拡張のインストール
- opcache インストール (opcacheについて(公式ドキュメント))
- PHPインストール確認z
// 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の設定を変更する
$ sudo vi /etc/php.d/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の状態確認
- 自動起動に設定
$ sudo service php-fpm start
$ sudo systemctl status php-fpm
// Active: active (running)なら起動中
$ sudo systemctl enable php-fpm
3.nginx インストール
- nginxのインストール
- インストール確認
// nginxのインストール
$ sudo amazon-linux-extras enable nginx1
$ sudo yum install nginx -y
// nginxのバージョン確認
$ nginx -v
- nginxを起動
- nginxの状態確認
- 自動起動に設定
$ sudo systemctl start nginx
$ sudo systemctl status nginx
// Active: active (running)なら起動中
$ sudo systemctl enable nginx
4.Composer インストール
- Composerのインストール
- Composerの移動
- Composerのバージョン確認
//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++のインストール
// 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のパッケージ削除
$ sudo yum remove mariadb-*
- MySQLのリポジトリをyumに追加する
- 有効化する
- yumリポジトリの確認
$ 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のインストール
$ 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のログファイル作成
$ sudo touch /var/log/mysqld.log
- インストールされたMySQLパッケージの確認
$ 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のバージョン確認
$ mysqld --version
- MySQLの起動
- 状態確認
- 自動起動に設定
$ sudo systemctl start mysqld.service
$ sudo systemctl status mysqld.service
$ sudo systemctl enable mysqld.service
-
MySQLの接続確認
- エンドポイントは作成したRDSの[接続とセキュリティ]から確認できます
- マスターユーザー、パスワードはRDS作成時に設定したもの
$ 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のバージョン確認
$ sudo yum install git -y
$ git --version
8.git clone
/var/www/にGitHubのリポジトリをクローンする
-
/var/www/に移動
- もし存在しなかった場合は、mkdirコマンドで作成。(sudo mkdir /var/www)
- /var/www/に書き込み権限追加
- git cloneする
- 確認
- ~/に戻る
$ cd /var/www
$ sudo chmod 777 /var/www
$ git clone リモートリポジトリURL
$ ls -l
$ cd ~/
9.php-fpm, nginxの設定
php-fpmの設定
sudo vi /etc/php-fpm.d/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の設定
sudo vi /etc/nginx/conf.d/ドメイン名.conf
- 以下の内容に変更
開発環境と同じ設定にする。
参照 : 【Docker+Laravel6メモ】開発環境構築についてまとめてみました
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再起動
- 状態確認
$ sudo systemctl restart php-fpm
$ sudo systemctl status php-fpm
- nginx再起動
- 状態確認
$ sudo systemctl restart nginx
$ sudo systemctl status nginx
10..envの設定
- アプリディレクトリへ移動
- .env作成
- .envの設定
$ cd /var/www/アプリディレクトリ名
$ cp .env.example .env
$ vi .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の本番環境構築はほぼ完成です。
最後にCircleCIを使用した自動デプロイ設定をします。
またS3を使用した画像アップロードについても記事を執筆中です。
【AWS環境構築メモ⑪】CircleCIを使用した自動デプロイ(執筆中)
【AWS環境構築メモ⑫】AWS S3を使用した画像アップロード(執筆中)
6.参考