Ubuntu + ApacheでLaravelの環境構築方法

Ubuntu + ApacheでLaravelの環境構築方法

Ubuntu上でLaravelをApache環境で動かす場合、必要になるのは「Apache」「PHP」「Composer」「Laravel本体」「公開ディレクトリの正しい設定」の5つ。ここで重要なのは、Laravelを単に配置するだけではなく、ApacheのDocumentRootを public に向け、mod_rewrite を有効にし、.env、APP_KEY、権限、VirtualHostまで整えること。これを順番通りに進めると、初心者でも比較的安定してLaravelの実行環境を作りやすい。

最初に準備するもの

最低限必要なのは次の通り。
・Ubuntuサーバー
・sudo権限を持つユーザー
・インターネット接続
・配置先ドメインまたはサーバーIP
・必要ならMySQLやMariaDB
初心者がつまずきやすいのは、「Apacheだけ入れれば動く」と考えてしまうこと。LaravelはPHPアプリなので、Apache単体ではなくPHP連携まで必要になる。

Ubuntuを最新状態にする

最初にパッケージ情報を更新し、既存のパッケージも最新化しておく。依存関係の不整合を避けやすくなる。

sudo apt update
sudo apt upgrade -y

発生しやすいエラー条件は、
・別のapt処理が走っている
・sudo権限が無い
・古いパッケージ情報のままで依存解決が崩れる
といったもの。

Apacheをインストールする

まずはWebサーバーとしてApacheを入れる。

sudo apt install -y apache2

起動状態を確認する。

sudo systemctl status apache2

自動起動も有効にしておく。

sudo systemctl enable apache2

ここでブラウザからサーバーのIPにアクセスして、Apacheの初期画面が表示されれば一段階クリア。
発生しやすい問題は、
・80番ポートが他サービスに使われている
・ファイアウォールがHTTPを閉じている
・Apacheが起動していない
というもの。

PHPと必要拡張をインストールする

Laravelを動かすにはPHP本体だけでなく、必要な拡張も必要になる。最初からまとめて入れておくと後で楽。

sudo apt install -y php libapache2-mod-php php-cli php-common php-mbstring php-xml php-bcmath php-curl php-zip php-mysql unzip curl git

インストール後はバージョン確認をする。

php -v

発生しやすいエラー条件は、
・PHP本体だけ入れて拡張不足でLaravelが動かない
・複数PHPバージョンが混在していて想定と違うPHPが呼ばれる
libapache2-mod-php が無く、ApacheとPHPが連携していない
というケース。

Composerをインストールする

Laravelの作成や依存管理にはComposerが必須。まだ入っていない場合は次の手順で導入する。

cd ~
php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);”
php composer-setup.php
php -r “unlink(‘composer-setup.php’);”
sudo mv composer.phar /usr/local/bin/composer

インストール確認。

composer –version

発生しやすいエラー条件は、
・ネットワーク制限でインストーラ取得に失敗
・PHP拡張不足でComposerが警告を出す
/usr/local/bin への移動権限が足りない
といったもの。

Laravelプロジェクトを作成する

Apache配下で管理しやすいように、一般的には /var/www の下へプロジェクトを置く。

cd /var/www
sudo composer create-project laravel/laravel myapp

作成後、所有権を操作ユーザーへ寄せる。

sudo chown -R $USER:$USER /var/www/myapp

その後、プロジェクトへ移動する。

cd /var/www/myapp

発生しやすい問題は、
vendor が途中で壊れている
/var/www 配下への書き込み権限が無い
・root所有のまま作って後で編集しづらくなる
というもの。

.envとAPP_KEYを整える

Laravelでは .env と APP_KEY が揃っていないと起動時や認証処理でエラーになりやすい。通常は .env が作成されるが、無い場合はコピーする。

cp .env.example .env
php artisan key:generate

この時点で .envAPP_KEY=... が入る。
発生しやすいエラー条件は、
.env が無い
・APP_KEY が空
・権限不足で .env に書けない
というもの。

Apacheでmod_rewriteを有効にする

Laravelは public/.htaccess のリライトルールでルーティングを処理するため、Apacheの mod_rewrite が有効である必要がある。

sudo a2enmod rewrite
sudo systemctl restart apache2

ここを有効にしないと、トップページは出ても /login/users/1 のようなルートで404になりやすい。
発生しやすいエラー条件は、
・トップだけ表示されて他URLが404
.htaccess が読まれていない
・ Rewrite系設定を有効化していない
というもの。

VirtualHostを作成してDocumentRootをpublicに向ける

Laravelで最も重要なのは、Apacheの公開ディレクトリをプロジェクト直下ではなく public にすること。
新しいVirtualHost設定を作成する。

sudo nano /etc/apache2/sites-available/myapp.conf

内容例は次の通り。


ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/myapp/public

<Directory /var/www/myapp/public>
    AllowOverride All
    Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/myapp_error.log
CustomLog ${APACHE_LOG_DIR}/myapp_access.log combined

ここでの最重要ポイントは、
DocumentRoot/public を向いていること
AllowOverride All.htaccess を有効にしていること
の2つ。
これがズレると、Laravelの内部ファイルが見えたり、ルーティングが機能しなかったりする。

デフォルトサイトを外し、VirtualHostを有効化する

作成したVirtualHostを有効にし、必要ならデフォルト設定を無効化する。

sudo a2dissite 000-default.conf
sudo a2ensite myapp.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

configtestSyntax OK が出るまでApacheを再読み込みしない方が安全。
発生しやすい問題は、
・設定ファイルのタイプミス
・ServerNameの書き間違い
・sites-enabledへ反映されていない
というもの。

storageとbootstrap/cacheの権限を整える

Laravelは storagebootstrap/cache にログやキャッシュを書き込むため、ここが書けないと500エラーになりやすい。
Apache実行ユーザー(Ubuntuでは通常 www-data)に合わせて権限を調整する。

sudo chown -R www-data:www-data /var/www/myapp/storage /var/www/myapp/bootstrap/cache
sudo chmod -R 775 /var/www/myapp/storage /var/www/myapp/bootstrap/cache

発生しやすい問題は、
・500エラーが出るのにログも残らない
・キャッシュやセッションが動かない
・画面は出るが保存処理で落ちる
といった権限系トラブル。

データベース設定を整える

LaravelでDBを使うなら .env の接続情報を設定する。MySQLを例にすると次のような形になる。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=myapp_user
DB_PASSWORD=secret

設定後はマイグレーションを実行する。

php artisan migrate

発生しやすいエラー条件は、
・DB自体が存在しない
・ユーザー権限不足
・パスワード不一致
.env を変えたのに設定キャッシュが古い
といったもの。

設定変更後はキャッシュを意識する

.envconfig を変えたのに反映されない場合、設定キャッシュが残っていることがある。
トラブル時はまずクリアすると切り分けしやすい。

php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear

必要ならまとめて消すこともできる。

php artisan optimize:clear

本番運用で config:cache を使う場合は、変更後に再生成する運用を揃えておく必要がある。

動作確認とログ確認

ここまで終わったら、ブラウザでドメインやサーバーIPにアクセスしてLaravelの初期画面が表示されるか確認する。
問題がある場合は、ApacheログとLaravelログを確認する。

tail -n 100 /var/log/apache2/myapp_error.log
tail -n 100 /var/www/myapp/storage/logs/laravel.log

見るべきポイントは、
・404ならVirtualHostやDocumentRoot
・500ならLaravel内部や権限
・403ならDirectory設定や権限
という切り分け。
ApacheログとLaravelログを分けて見るだけでも、原因特定はかなり速くなる。

よくあるエラーと発生条件

Ubuntu + Apache + Laravelでよくある問題は次の通り。
・404 Not Found
発生条件:DocumentRootが public ではない、mod_rewrite未有効、AllowOverride不足
・500 Internal Server Error
発生条件:APP_KEY未設定、storage権限不足、DB接続エラー
・403 Forbidden
発生条件:Directory設定不足、権限不整合、Apacheユーザーが読めない
・CSSやJSだけ読めない
発生条件:public配下のパスや権限が崩れている
・設定変更が反映されない
発生条件:設定キャッシュの残留、Apache再読み込み忘れ
初心者は「全部Apacheの問題」と考えがちだが、実際にはApache、Laravel、権限、.env のどこで落ちているかを分けて見る必要がある。

初心者向けの最短確認手順

構築後に最低限確認すべきポイントは次の通り。
php -v でPHPが動く
composer --version でComposerが動く
php artisan key:generate が成功する
・Apacheで public を見ている
a2enmod rewrite 済み
storagebootstrap/cache が書ける
.env のDB設定が正しい
・ブラウザで初期画面が出る
この順でチェックすると、原因箇所をかなり狭めやすい。

まとめ

Ubuntu + ApacheでLaravelを動かすには、
・Apacheを入れる
・PHPと拡張を揃える
・ComposerでLaravelを作る
.env と APP_KEY を整える
mod_rewrite を有効にする
・VirtualHostのDocumentRootを public に向ける
・権限とDB設定を整える
という流れで進めると安定しやすい。
特に重要なのは、Laravel本体ではなく public だけを公開すること、そして AllowOverride Allmod_rewrite を揃えること。
ここが合っていれば、Apache環境でもLaravelはかなり素直に動かしやすい。