Laravelをセットアップ

最近話題のPHPフレームワーク「Laravel」をLinuxサーバにセットアップする手順を紹介します。
Composerのインストール
まずはLaravelのセットアップに必須の「Composer」をインストールします。
すでにComposerをインストール済みである場合は次へ進んでください。
Composer公式サイトのガイドに従ってインストールしていきます。
以下の例はVersion 1.9.1のものです。
# mkdir /tmp/php
# cd /tmp/php
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" <--- やらなくても良い
# php composer-setup.php
# php -r "unlink('composer-setup.php');"
# mv composer.phar /usr/local/bin/composer
# composer -v
Laravelプロジェクトの生成
以下のようにcomposerコマンドにてLaravelプロジェクトを生成します。
以下の例では、「/var/www/html」ディレクトリの場所に「lara」という名前でLaravelのバージョン「5.8」のプロジェクトを生成します。
# composer create-project laravel/laravel --prefer-dist /var/www/html/lara 5.8
- rootでcomposerを実行することは推奨されていない旨のメッセージが表示されますが、Enterキーを押下するとそのまま続行します。
必要なパーミッションを設定します。
# cd /var/www/html/lara
# chmod -R 777 storage
# chmod -R 777 bootstrap/cache
RedHat/CentOSサーバなど、SELinuxを有効にしている場合は生成したLaravelプロジェクトディレクトリに書き込み権限を与えておきます。
# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/lara(/.*)?"
# restorecon -RFv /var/www/html/lara*
Webサーバの設定
LaravelのようなPHPフレームワークはインストールしただけでは動作しないものが多いようです。
特にセキュリティ面を向上させたWebサーバの場合、設定を変更する箇所が発生します。
以下ではWebサーバとしてApache2.4を想定した例を示します。
httpd.conf設定
このままではLaravelプロジェクトにアクセスするためには「http://Webサーバ/lara/public」にアクセスしないと正しく表示されません(http://Webサーバ/laraにアクセスすると「403 Forbidden」になってしまう)。
「http://Webサーバ/lara/」のURLでアクセスできるようにhttpd.confファイルにエイリアスを設定します。
※dockerの場合、「/etc/apache2/sites-available/000-default.conf」に設定するケースもあります。
#-----------------------------------------------------------------
# for Laravel
#-----------------------------------------------------------------
Alias /lara/ "/var/www/html/lara/public/"
<Directory "/var/www/html/lara/public">
Options FollowSymLinks <-------------------------------- ①
AllowOverride All <------------------------------------- ②
Require all granted
</Directory>
- ① LaravelでのURI操作を有効にします(これがないと「403 Forbidden」になってしまいます)
- ②.htaccessを有効にします
public/.htaccess設定
Laravelプロジェクトのディレクトリ下にある「public」ディレクトリにある「.htaccess」を編集します。
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
Options +FollowSymLinks <-------------------- ①
RewriteEngine On
RewriteBase /lara <-------------------------- ②
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
- ① Webサーバ側で「FollowSymLinks」を設定できない環境の場合、ここで設定します。
- ②ドキュメントルート以外にLaravelをセットアップする際にはエイリアス名(例では「lara」)を指定します。
これを指定しないとルーティング時に「500 Internal Server Error」が発生します。
Dockerの場合の注意点
Dockerを利用する際、「php:7.2-apache」イメージを使った場合、初期設定ではApacheのmod_rewriteが有効になっていません。そのままではLaravelのルーティングができません。
したがって次のようにmod_rewriteを有効にする必要があります。
Dockerホスト側からコンテナにログインします。
$ docker container exec -it コンテナID bash
コンテナ側で「/etc/apache2/mods-enabled」に「/etc/apache2/mods-available/rewrite.load」のリンクを作成します。
# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/rewrite.load rewrite.load
# exit
apacheを再起動、またはコンテナを再起動します。
動作確認
動作確認用コードの追記
動作確認用に、Laravelプロジェクト内「routes/web.php」に下記コードを追記します。
:
Route::get('/', function () {
//return view('welcome'); <------ コメントアウト
return "Hello Laravel";
});
Route::get('/change', function () {
return "Change Rooting";
});
動作確認
ブラウザにて下記にアクセスして正しい表示になることを確認します。
- 「http://Webサーバ/lara」にアクセスすると「Hello Laravel」が表示されること。
- 「http://Webサーバ/lara/change」にアクセスすると「Change Rooting」が表示されること。