はじめに
LaravelとApacheをDocker環境で構築し、実際にルートへアクセスできるまでの過程を整理しました。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
PHPのキャッチアップを目的とした、初学者による備忘録的な記事です。
書こうと思ったきっかけ
個人的にPHPの学習を進めたく、Laravel環境をDocker上で構築しようと考えました。
途中、「/hello」ルートにアクセスできない問題にぶつかり、Apacheの設定とLaravelの構成について深掘りしたことで多くの知見が得られたため、それを記録します。
内容
LaravelとApacheを連携させる構成
- Laravel CLI(
php artisan
)を使用するにはWORKDIR /var/www/html
が必要 - Apache の公開ディレクトリは
public/index.php
であるため、Apacheのルートは/var/www/html/public
に設定する
Dockerfile の設定ポイント
# PHP 8.2 + Apache の公式イメージをベースにする
FROM php:8.2-apache
# Laravelで必要なパッケージをインストール(zip, git, curl など)
RUN apt-get update && apt-get install -y \
zip unzip git curl libzip-dev libonig-dev \
&& docker-php-ext-install pdo_mysql zip
# Composer(PHPのパッケージ管理ツール)をインストール
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Apache のドキュメントルートを Laravel の public ディレクトリに変更
RUN sed -i 's!/var/www/html!/var/www/html/public!g' /etc/apache2/sites-available/000-default.conf
# mod_rewrite を有効化(.htaccess が使えるように)
RUN a2enmod rewrite
# ✅ Laravel CLIが正しく動くように、作業ディレクトリはアプリルートにする
WORKDIR /var/www/html
# Laravelアプリのソースコードをコピー(public/ も含まれる)
COPY src/ /var/www/html/
/hello にアクセスできる条件(※あくまで自分調べ)
条件 | 内容 |
---|---|
Apacheのドキュメントルートが /var/www/html/public
|
Laravelのエントリポイント(index.php)を指す必要あり |
.htaccess が public/ に存在する |
Laravelが自動生成、Rewrite処理が含まれる |
mod_rewrite が有効 |
.htaccess をApacheが解釈できるようにする |
AllowOverride All が /etc/apache2/apache2.conf に設定されている |
.htaccess を有効にするための必須条件 |
routes/web.php に /hello のルート定義がある |
例:Route::get('/hello', [HelloController::class, 'index']);
|
実際のアクセスの流れ
-
http://localhost:8080/hello
にアクセス - Apache が
.htaccess
を参照してindex.php
にリライト - Laravelが
/hello
のルート定義に基づきコントローラを実行 -
HelloController@index
がレスポンスを返す
実際の画面
注意点:WORKDIR を public
にしない
Laravelのartisanコマンドなどは /var/www/html
を前提に動作するため、WORKDIR
を public
にしてしまうと CLI が機能しなくなる。
まとめ
Laravel + Apache 構成で「Webアクセス(Apache)」と「CLI操作(artisan)」の両立をするには:
-
WORKDIR
は Laravel のルート/var/www/html
- Apache のルートは
public
にsed
で変更 -
.htaccess
のRewriteを有効にするためにmod_rewrite
とAllowOverride All
を設定
この構成を整えることで、CLIとWeb両方からスムーズにLaravelアプリケーションを扱えるようになりました...!
現在は /hello
にアクセスでき、モデルとマイグレーションも作成できる段階に到達しました!!
実際の開発画面