Ubuntu + ApacheでLaravelの環境構築方法
- 作成日 2026.03.23
- その他
Ubuntu上でLaravelをApache環境で動かす場合、必要になるのは「Apache」「PHP」「Composer」「Laravel本体」「公開ディレクトリの正しい設定」の5つ。ここで重要なのは、Laravelを単に配置するだけではなく、ApacheのDocumentRootを public に向け、mod_rewrite を有効にし、.env、APP_KEY、権限、VirtualHostまで整えること。これを順番通りに進めると、初心者でも比較的安定してLaravelの実行環境を作りやすい。
- 1. 最初に準備するもの
- 2. Ubuntuを最新状態にする
- 3. Apacheをインストールする
- 4. PHPと必要拡張をインストールする
- 5. Composerをインストールする
- 6. Laravelプロジェクトを作成する
- 7. .envとAPP_KEYを整える
- 8. Apacheでmod_rewriteを有効にする
- 9. VirtualHostを作成してDocumentRootをpublicに向ける
- 10. デフォルトサイトを外し、VirtualHostを有効化する
- 11. storageとbootstrap/cacheの権限を整える
- 12. データベース設定を整える
- 13. 設定変更後はキャッシュを意識する
- 14. 動作確認とログ確認
- 15. よくあるエラーと発生条件
- 16. 初心者向けの最短確認手順
- 17. まとめ
最初に準備するもの
最低限必要なのは次の通り。
・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
この時点で .env に APP_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
configtest で Syntax OK が出るまでApacheを再読み込みしない方が安全。
発生しやすい問題は、
・設定ファイルのタイプミス
・ServerNameの書き間違い
・sites-enabledへ反映されていない
というもの。
storageとbootstrap/cacheの権限を整える
Laravelは storage と bootstrap/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 を変えたのに設定キャッシュが古い
といったもの。
設定変更後はキャッシュを意識する
.env や config を変えたのに反映されない場合、設定キャッシュが残っていることがある。
トラブル時はまずクリアすると切り分けしやすい。
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 済み
・ storage と bootstrap/cache が書ける
・ .env のDB設定が正しい
・ブラウザで初期画面が出る
この順でチェックすると、原因箇所をかなり狭めやすい。
まとめ
Ubuntu + ApacheでLaravelを動かすには、
・Apacheを入れる
・PHPと拡張を揃える
・ComposerでLaravelを作る
・ .env と APP_KEY を整える
・ mod_rewrite を有効にする
・VirtualHostのDocumentRootを public に向ける
・権限とDB設定を整える
という流れで進めると安定しやすい。
特に重要なのは、Laravel本体ではなく public だけを公開すること、そして AllowOverride All と mod_rewrite を揃えること。
ここが合っていれば、Apache環境でもLaravelはかなり素直に動かしやすい。
-
前の記事
LaravelでAPI認証を実装する方法(Sanctum) 2026.03.19
-
次の記事
記事がありません
コメントを書く