(Mac)ApacheのVirtual HostでLaravelを実行する

(Mac)LaravelプロジェクトをApache上で動作させる

Macのローカル環境で作成したLaravelのプロジェクトを
php artisan serve コマンドで起動する簡易Webサーバではなく、
Mac同梱のApache Webサーバで実行する手順をメモします。

環境: Mac 10.13.6、 Laravel Framework 5.8.35、Apache 2.4.33

本記事ではApacheのVirtual Host機能を利用してLaravelプロジェクトを動作させていきます。

ApacheのVirtual Host設定詳細については下記を参照

(Mac)ApacheのVirtual Hostでローカル開発環境を構築する

Apacheの設定を行う

ターミナルを開き、Apacheの設定ファイルを変更していきます。
Virtual Hostを利用する為のApacheの基本的な設定に加えて、
Laravelプロジェクトを動作させるために以下の設定を追加します。

(重要).htaccessによるリダイレクトを有効化する

ターミナルから、
sudo vi /etc/apache2/httpd.conf

/etc/apache2/httpd.confを管理者権限で開き、
インサートモードに切り替えて以下の内容に書き換えます。

行頭の#を外して有効化する
(前)#LoadModule rewrite_module libexec/apache2/mod_rewrite.so
(後)LoadModule rewrite_module libexec/apache2/mod_rewrite.so

Laravelプロジェクト内のpublicディレクトリに存在する.htaccessファイルの設定を有効化する事が出来ます。
こちらの設定を行うことでアクセスするドメイン以下、いずれのパスでアクセスしても
Laravelプロジェクトの処理起点であるpublic/index.phpを介するようになります。
(Laravelプロジェクト public/.htaccessファイル)

Virtual Hostドキュメントルート指定

ターミナルから、
sudo vi /etc/apache2/extra/httpd-vhosts.conf

/etc/apache2/extra/httpd-vhosts.confを管理者権限で開き、
インサートモードに切り替えて以下の内容に書き換えます。

上記のようにDocumentRootと、Directoryタグの値へ
該当のLaravelプロジェクト(今回はlaravel-project)の公開ディレクトリであるpublicディレクトリまでを指定します。
ServerNameへアクセスするドメイン名を指定します。

編集が完了したら、Apacheを再起動し設定を反映させます。
sudo apachectl restart

(/etc/hostsファイルの編集も忘れないように)

 

プロジェクトの所有者とグループを変更する

前述のApacheの設定を行うと指定ドメインhttp://laravel-project/で
プロジェクトへブラウザアクセス出来るようになりますが、例外が発生します。

could not be opened: failed to open stream: Permission denied
(アクセス権が無くて開けません)

composerで作成したLaravelプロジェクトのディレクトリやファイルに対して
Apacheが実行の権限を持っていないので、プロジェクトの所有者と所有グループをApacheに変更して解決します。

プロジェクトのあるパスへ移動し、

以下のコマンドを実行してプロジェクト丸ごと所有者と所有グループを変更します。
(元の所有はユーザがMacのログインユーザー、グループがstaffになっている)

sudo chown -R _www:_www laravel-project/

Apacheの実行ユーザとグループは/etc/apache2/httpd.conf内で確認出来ます。
デフォルトではどちらも _wwwでした。(apacheではなかった)

変更が完了するとApacheで実行出来るようになります。

ソースの編集を許可する

プロジェクトの所有をApacheに変更しましたが、
このままだと通常の※ユーザーに実行権限がないのでソースの編集が出来ません。
(※Macのログインユーザー)

ユーザをApacheのグループ_wwwへ所属させ、プロジェクトソースに対してグループの実行権限を与えるようにします。

ターミナルから、

Macのdsclコマンドを使用して、グループへ追加する

グループの所属ユーザーを確認する

こちらを実行して表示される「GroupMembership:」にユーザーが存在していればOKです。

プロジェクトのあるパスへ移動して、グループの実行権限を与えます。
sudo chmod -R 775 laravel-project/

こちらの設定でエディタでの編集が可能になり、Laravelの簡易サーバでも今まで通り実行出来ます。

簡易サーバーでも実行出来るようにしたい場合

前述のプロジェクトの所有者を変更する方法だと当然Apacheでしか実行出来なくなります。
もし、Laravelの簡易サーバ(php artisan serveコマンド)とApacheのどちらでも実行出来るようにしておきたいという場合は
所有者、グループを変更するのではなくソースの権限を広くします。

chmodコマンドを実行しアクセスエラーとなったディレクトリ、ファイルのパーミッションを変更します。

ターミナルからプロジェクトのあるパスへ移動してコマンド実行。

(上の画像の場合)
sudo chmod -R 777 storage/framework/sessions/

参考:
【apache】mod_rewriteの設定について
PHPフレームワーク「Laravel」における処理の流れと、ルーティングを理解しよう

Follow me!