概要
前回は、起動済みのまっさらなEC2インスタンスに nginx
+ PHP7
+ (php-fpm)
環境を構築しました。
Qiita - AWS EC2 Amazon Linux 2016.09 + nginx + PHP7.0でサーバー構築
今回は、このEC2 + nginx + php7なサーバー上に、ローカルで作成したLaravel5プロジェクトを配置します。
LaravelプロジェクトはEC2サーバー上の/var/www/html/MyProject
に配置することとします。
構成
- Amazon Linux - 2016.09.0
- nginx - 1.10.1
- PHP - 7.0
- Laravel - 5.3
ハマりポイント
この作業、5時間ぐらいハマりました(かかりすぎ。。。)
ハマらなければ、15分もかからずに終わるのですがorz
肝は、
nginxの設定でROOTを/var/www/html
ではなく、
/var/www/html/MyProject/public
に設定することです。
同じサーバーに複数プロジェクトを配置するため、
/var/www/html
をドメインのルートにしたかったのですが、断念しました。1ドメイン1プロジェクトにします。
ちなみに、どうしても複数プロジェクトにする場合は下記を参考にしてください。
nginx+PHP-FPMが稼働中のLinuxにLaravelを導入する
手順
gitのインストール
$ sudo yum install git
var/www/htmlフォルダの所有者変更
デフォルトではroot
所有になっており、この後の作業でsudoが必要になってしまいます。
composerをsudoで使うのはよろしくなく、警告が出るので所有者をec2-user
に変更します。
$ sudo chown -R ec2-user:root /var/www/html
git経由でLaravelプロジェクトを取得
$ cd /var/www/html
$ git clone [https://user@project/~~~/~~~.git] MyProject
期待するフォルダ名になるよう、名前を指定してgitから取得しています。
参考:Qiita - cloneしてきたプロジェクトの名前を変えてクローンしてくる方法
Composer経由で依存ライブラリ取得
デフォルトの.gitignore
では、venderフォルダが無視されていて、Gitリポジトリ内に存在しないので、Composerで取得します。gitにvenderフォルダを含めるのはLaravel的に非推奨みたいです。
Composerのインストール
ホームディレクトリでcomposerパッケージをDLしてからbinに移動させています。
$ cd
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
Composerで依存ライブラリを取得
composer.lockで指定されているライブラリ/バージョンを取得します。
ローカルプロジェクトで使ったバージョンで固定されるので安心です。
$ cd /var/www/html/MyProject
$ composer install
storageフォルダに書き込み権限を追加
$ chmod -R o+w /var/www/html/MyProject/storage
nginxの設定を変更
前回、設定したものをさらに変更します。
以下のように、rootをプロジェクトのMyProject/public
フォルダに指定し、すべてのリクエストをMyProject/public/index.php
で受けるようにします。これがハマらないための肝です。
# これだとうまくいかない
# root /var/www/html;
# 今回修正
root /var/www/html/GuideMap/public;
# 今回追加
location / {
# リクエストURI, /index.phpの順に処理を試みる
try_files $uri /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
あとはnginxのリスタートをして完了です。
$ sudo service nginx restart
まとめ
これでLaravelプロジェクトをEC2のサーバーに配置することができました。
次はgit + CodeDeployなどで自動デプロイを企んでます。
gitクローンした後に、$ composer install
とstorageフォルダの書き込み権限追加のスクリプトを流せれば自動デプロイできる気がします。