Edited at

Laravel:EC2-PHP72-Apacheで環境を作成する

こちらの記事はブログに投稿しています。

Laravelについてはこちらにまとめていこうと思います。

https://ksysnote.com/tag/laravel/

はじめに



Laravelの環境をAWSのEC2上で構築していきます。

インスタンスタイプはt2.microで作成しましたが特に問題はなかったです。

環境構築



EC2のインスタンスを作成して、パッケージを最新にする



$ sudo yum update -y


日付をJSTに設定する



日付を確認するとUTCとなっているので、JSTに変更します

$ date

2018年 9月 19日 水曜日 02:27:42 UTC


タイムゾーンの設定

$ sudo cp /etc/localtime /etc/localtime.org

$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ sudo cp /etc/sysconfig/clock /etc/sysconfig/clock.org


再起動で戻らないように設定する

# sudo vi /etc/sysconfig/clock

ZONE="Asia/Tokyo"
UTC=false


確認するとJSTに変わっています。

$ date

Tue Oct 31 11:56:35 JST 2017
$ strings /etc/localtime
TZif2
TZif2
JST-9


・反映をさせるためにrebootします。

$ sudo reboot


・swapの設定



laravelインストール時にt2-minerだとメモリ不足でエラーになりますのでswapを設定していきます。

確認するとswapがないようです。(EC2はswapが設定されていません)

$ grep Mem /proc/meminfo

MemTotal: 1009420 kB
MemFree: 847152 kB
MemAvailable: 836316 kB

$ grep Swap /proc/meminfo
SwapCached: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB

$ free
total used free shared buffers cached
Mem: 1009420 161640 847780 60 8656 98424
-/+ buffers/cache: 54560 954860
Swap: 0 0 0



512MBのスワップを作成していきます

$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512

512+0 レコード入力
512+0 レコード出力
536870912 バイト (537 MB) コピーされました、 5.02482 秒、 107 MB/秒


・確認

$ ll /swapfile1

-rw-r--r-- 1 root root 536870912 9月 18 11:56 /swapfile1


・スワップファイルの権限を変更し、フォーマットをする

$ sudo chmod 600 /swapfile1

$ sudo mkswap /swapfile1
スワップ空間バージョン1を設定します、サイズ = 524284 KiB
ラベルはありません, UUID=9b98d845-40f9-4944-a07b-88dd082a2439


・swapファイルを有効化

$ sudo swapon /swapfile1

$ $ sudo swapon -s
Filename Type Size Used Priority
/swapfile1 file 524284 0 -2


・システムリブートでswapファイルが反映するように設定

# sudo cp -p /etc/fstab /etc/fstab.org

sudo sh -c "echo '/swapfile1 swap swap defaults 0 0' >> /etc/fstab"

cat /etc/fstab

LABEL=/ / ext4 defaults,noatime 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/swapfile1 swap swap defaults 0 0



swapが設定できたことを確認します。

$ grep Mem /proc/meminfo

MemTotal: 1009432 kB
MemFree: 307224 kB
MemAvailable: 828360 kB
$ grep Swap /proc/meminfo
SwapCached: 0 kB
SwapTotal: 524284 kB
SwapFree: 524284 kB
$ free
total used free shared buffers cached
Mem: 1009432 702208 307224 60 9164 625360
-/+ buffers/cache: 67684 941748
Swap: 524284 0 524284


・PHP7.0・mySQLの5.7をインストールする



$ sudo yum install -y httpd24 php72 mysql57-server php72-mysqlnd


・Apacheを起動・システム再起動しても起動するように対応

$ sudo service httpd start

Starting httpd: [ OK ]
$ sudo chkconfig httpd on
$ chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off


・ブラウザで確認します。このときセキュリティグループでポートを開けておくこと。

ドキュメントルートの権限を設定

apacheのドキュメントルート(/var/www)はrootが所有しているためec2-userで使用できるように設定をします。

apacheグループにec2-userを追加します。

$ sudo usermod -a -G apache ec2-user

$ exit


一度ログアウトをして反映させます。

$ exit


再ログインして、apacheグループが設定されているかを確認します。

$ groups

ec2-user wheel apache


/var/www/のグループ所有権をapacheグループに変更する

$ sudo chown -R ec2-user:apache /var/www


グループの書き込み権限を追加とサブディレクトリにグループIDを設定する

$ sudo chmod 2775 /var/www

$ find /var/www -type d -exec sudo chmod 2775 {} \;
$ find /var/www -type f -exec sudo chmod 0664 {} \;


動作確認



$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php


・ブラウザで確認する

MySQL実行する

$ sudo service mysqld start

Starting mysqld: [ OK ]

・MySQLサーバーの設定
$ sudo mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:


rootのパスーワード入力しますが、デフォルトでは設定されていないので『Enter』を押します。
Please set the password for root here.

New password:

Re-enter new password:


新しいパスワードを設定します。
By default, a MySQL installation has an anonymous user,

allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :


「Y」を入力して匿名ユーザアカウントを削除します。
Normally, root should only be allowed to connect from

'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :


「Y」を入力してリモートログインを無効にします。
By default, MySQL comes with a database named 'test' that

anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) :


「Y」と入力してテストデータベースを削除します。
Reloading the privilege tables will ensure that all changes

made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :


「Y」と入力してリロードします。

システムrebootしてもMySQLを起動するように設定をする

$ sudo chkconfig mysqld on

phpMyAdminのインストール


必要なパッケージをインストールする
$ sudo yum install php72-mbstring php72-zip -y

再起動をする
$ sudo service httpd restart

ドキュメントルートにphpMyAdminを展開する

$ cd /var/www/html/

$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
$ rm phpMyAdmin-latest-all-languages.tar.gz


ブラウザで確認(http://xxx.xxx.xxx.xxx/phpMyAdmin/)

Laravelインストール

・まずはComposerをインストールする

$ cd ~

$ curl -sS https://getcomposer.org/installer | sudo php
All settings correct for using Composer
Downloading...

Composer (version 1.7.2) successfully installed to: /home/ec2-user/composer.phar
Use it: php composer.phar

$ sudo cp composer.phar /usr/local/bin/composer
$ sudo ln -s /usr/local/bin/composer /usr/bin/composer



・Laravelプロジェクトの作成

$ cd /var/www

$ composer create-project --prefer-dist laravel/laravel


・ドキュメントルートを変更

$ sudo vi /etc/httpd/conf.d/custom.conf


# ドキュメントルート

DocumentRoot "/var/www/laravel/public"


・.htaccess有効化

# .htaccess 有効化

<Directory /var/www/laravel/public>
AllowOverride All
</Directory>


・Apache再起動

$ sudo service httpd restart


・パーミッションの変更

$ sudo chmod -R 777 laravel/storage

$ sudo chmod -R 775 laravel/bootstrap/cache


 

ブラウザで確認

Laravelの設定

プロジェクト用にlaravelというデータベースを作成する

$ mysql -u root -p

Enter password:

mysql> create database laravel;

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| laravel |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)



.envファイルの設定

APP_URL=http://xxx.xxx.xxx.xxx

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=xxxx
DB_PASSWORD=xxxx



ログイン認証を設定します。

$ php artisan make:auth

$ php artisan migrate


『LOGIN』と『REGISTER』のメニューが出たら完了です。

その他

Laravelプロジェクト作成時にエラー

以下はメモリエラーになったときの画面です。swapを設定して再度実行してください

$ composer create-project --prefer-dist laravel/laravel

Installing laravel/laravel (v5.4.30)
- Installing laravel/laravel (v5.4.30): Downloading (100%)
Created project in /var/www/laravel
> php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 61 installs, 0 updates, 0 removals
- Installing doctrine/inflector (v1.1.0): Downloading (100%)
proc_open(): fork failed - Cannot allocate memory
The archive may contain identical file names with different capitalization (which fails on case insensitive filesystems)
Unzip with unzip command failed, falling back to ZipArchive class
The following exception is caused by a lack of memory or swap, or not having swap configured
Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details

PHP Warning: proc_open(): fork failed - Cannot allocate memory in phar:///home/ec2-user/composer.phar/vendor/symfony/console/Application.php on line 959

Warning: proc_open(): fork failed - Cannot allocate memory in phar:///home/ec2-user/composer.phar/vendor/symfony/console/Application.php on line 959

[ErrorException]
proc_open(): fork failed - Cannot allocate memory

create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--ignore-platform-reqs] [--] [<package>] [<directory>] [<version>]