EC2インスタンス立ち上げから Laravel が動くまで何度も同じところでハマる。
#編集履歴
2018.03.12
- コマンドラインの実行権限の表記が曖昧過ぎたので書き直しました。表記方法の間違いなどあればご指摘いただけますと幸いです。
#EC2インスタンスを立ち上げる
###①IAMユーザーでログインしてインスタンスを作成します
- 無料枠の Amazon Linux AMI 2016.09.1 (HVM), SSD Volume Type の t2.micro を選びます。
###②Elastic IPを取得してインスタンスに関連付けます
- Elastic IP を取得したら必ず関連付けて下さい。無駄なコストが発生してしまいます!
###③SSH接続でログインします
#インスタンスの初期設定
###EC2のタイムゾーン設定
// 一応元ファイルは残しておきます
[ec2-user ~]$ sudo cp /etc/localtime /etc/localtime.org
[ec2-user ~]$ sudo cp -p /usr/share/zoneinfo/Japan /etc/localtime
#LAMP環境とついでにphpMyAdminのインストール
AWSのEC2にLAMP環境とついでにphpMyAdminをインストールする手順
投稿時はチュートリアルでうまくいかなかった部分もあったのですが今は
【チュートリアル: Amazon Linux AMI を使用して LAMP ウェブサーバーをインストールする】に
完璧にまとまってますw(2018.03.12)
#Apacheの設定
###① *.conf の設置
ここからはApache の設定ファイルをしていきます。
/etc/httpd/conf/httpd.conf
の最後に
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
とあり、初期状態でカスタム用の ほにゃらら.conf
を受け入れてくれます。
今回はこれを利用して /etc/httpd/conf.d/custom.conf
で設定していきます。
[ec2-user ~]$ sudo nano /etc/httpd/conf.d/custom.conf
※nanoを使うのは僕の好みですので、エディターはお好きなものをお使いください。
###②エラーログファイルの場所を変更する
ログを見るためにいちいちウィンドウを切り替えたりするのは面倒です。
なので、吐き出されたエラーログファイルを簡単にDLできるよう、 /var/www/log
あたりに吐き出すようにしています。(しなくてもいいです。)
[ec2-user ~]$ sudo mkdir /var/www/log
# エラーログ
ErrorLog "/var/www/log/error_log"
# アクセスログ
<IfModule log_config_module>
CustomLog "/var/www/log/access_log" combined
</IfModule>
###③読み込む php.ini の場所を変更する
ログ同様、php.iniも編集するたびにターミナルでやるのは面倒です。
なので、 /var/www/config
(例)とかに設置することにします。(しなくてもいいです。)
- デフォルトの
php.ini
をコピーします。
[ec2-user ~]$ sudo mkdir /var/www/config
[ec2-user ~]$ sudo cp /etc/php.ini /var/www/config/php.ini
-
php.ini
の参照先を変更します。
PHPIniDir "/var/www/config/"
- ここまで出来たら一度Apacheを再起動します。
[ec2-user ~]$ sudo service httpd restart
###④ハロワついでに phpinfo を確認する
Hello World! と出力するだけでは時間が勿体ないので、同時に設定変更の反映を確認します。
[ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
- あなたの Elastic IP を使ってブラウザでアクセスします。
http://【Your Elastic IP】/phpinfo.php
ちゃんと表示されて、php.ini の読み込み設定が反映されているかどうかもチェックしておきます。(しなくてもいいです。)
設定した通り /var/www/config/php.ini
になっていればOKです。
- phpinfo.php ファイルを削除します。
[ec2-user ~]$ rm /var/www/html/phpinfo.php
#パーミッション設定
###①www グループを追加して ec2-user を所属させる
[ec2-user ~]$ sudo groupadd www
[ec2-user ~]$ sudo usermod -a -G www ec2-user
[ec2-user ~]$ exit
一度ログアウトして再度入り直します
[ec2-user ~]$ groups // 確認
- ec2-user wheel www と表示されればOKです。
次に /var/www 以下の所有者情報を再帰的に変更します。
[ec2-user ~]$ sudo chown -R root:www /var/www
###②さらにパーミッションを変更
[ec2-user ~]$ sudo chmod 2775 /var/www
[ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} +
[ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} +
ここまでで、ひとまず環境の構築は完了です。
次にフレームワークLaravelをインストールしていきます。
#Laravelインストール
###①その前に色々インストール
- Composer
[ec2-user ~]$ curl -sS https://getcomposer.org/installer | sudo php
// Downloading...
[ec2-user ~]$ sudo cp composer.phar /usr/local/bin/composer
[ec2-user ~]$ sudo ln -s /usr/local/bin/composer /usr/bin/composer
- 拡張ライブラリ
[ec2-user ~]$ sudo yum install -y php56-mbstring php56-pdo php56-mysqlnd
###②Laravelプロジェクトの作成
laravel をインストールするディレクトリに移動
今回は /var/www/laravel
にします。
[ec2-user ~]$ cd /var/www
[ec2-user www]$ ~/composer.phar create-project --prefer-dist laravel/laravel
###③Apacheのドキュメントルートを変更
[ec2-user ~]$ sudo nano /etc/httpd/conf.d/custom.conf
# ドキュメントルート
DocumentRoot "/var/www/laravel/public"
###④ .htaccess 有効化
- t2.microでは初期状態では
.htaccess
が働きませんので、動くように設定します。
[ec2-user ~]$ sudo nano /etc/httpd/conf.d/custom.conf
# .htaccess 有効化
<Directory /var/www/laravel/public>
AllowOverride All
</Directory>
###⑤Apache を再起動
[ec2-user ~]$ sudo service httpd restart
###⑥パーミッション変更
Laravelではいくつかのディレクトリ以下に書き込み権限が必要となります。
[ec2-user ~]$ cd /var/www
[ec2-user www]$ sudo chmod -R 777 laravel/storage
[ec2-user www]$ sudo chmod -R 775 laravel/bootstrap/cache
[ec2-user www]$ sudo chown -R root:www /var/www
#Laravelの設定
.env
順に設定をしていきます。
[ec2-user ~]$ cd /var/www/laravel
[ec2-user laravel]$ sudo nano .env
データベースにRDSを使っている場合には DB_HOST にエンドポイントを入れます。
このときポート番号も一緒にコピーされてくることがありますが、次の DB_PORT に分けて設定します。
メールサーバーの設定は、gmailではMFA認証の関係か、上手くいきませんでした。
レンタルサーバー等のIMAPメール設定を使って下さい。
ログイン機能を有効にする
Laravel にはログイン周りの機能が一通り揃っています。
Laravel 5.3 になってその使い方はより柔軟になったように思います。
ログイン周りの機能をとりあえず使うにはたったこれだけでOKです。
[ec2-user laravel]$ php artisan make:auth
[ec2-user laravel]$ php artisan migrate
ブラウザで確認する
あなたの Elastic IP を使ってブラウザでアクセスします。
http://**Your Elastic IP**/home
以上です!