0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHP備忘録:Docker上でLaravelのartisanとWebルートを両立させる方法をまとめてみた

Posted at

はじめに

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)を指す必要あり
.htaccesspublic/ に存在する Laravelが自動生成、Rewrite処理が含まれる
mod_rewrite が有効 .htaccess をApacheが解釈できるようにする
AllowOverride All/etc/apache2/apache2.conf に設定されている .htaccess を有効にするための必須条件
routes/web.php/hello のルート定義がある 例:Route::get('/hello', [HelloController::class, 'index']);

実際のアクセスの流れ

  1. http://localhost:8080/hello にアクセス
  2. Apache が .htaccess を参照して index.php にリライト
  3. Laravelが /hello のルート定義に基づきコントローラを実行
  4. HelloController@index がレスポンスを返す

実際の画面

Screenshot 2025-05-05 at 10.14.32.png

注意点:WORKDIR を public にしない

Laravelのartisanコマンドなどは /var/www/html を前提に動作するため、WORKDIRpublic にしてしまうと CLI が機能しなくなる。

まとめ

Laravel + Apache 構成で「Webアクセス(Apache)」と「CLI操作(artisan)」の両立をするには:

  • WORKDIR は Laravel のルート /var/www/html
  • Apache のルートは publicsed で変更
  • .htaccess のRewriteを有効にするために mod_rewriteAllowOverride All を設定

この構成を整えることで、CLIとWeb両方からスムーズにLaravelアプリケーションを扱えるようになりました...!

現在は /hello にアクセスでき、モデルとマイグレーションも作成できる段階に到達しました!!

実際の開発画面

Screenshot 2025-05-05 at 10.16.05.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?