🛠 BookStackがHTTP 500を返して復旧しないときの対処法
⚠️ はじめに:500エラーの本当の原因を探る
BookStackで突然すべてのページがHTTP 500を返すようになり、サーバーを再起動するまで回復しないという症状が発生しました。このとき laravel.log
を確認すると、以下のような致命的エラーが記録されていました。
SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select * from `users` where `id` = 6 limit 1)
これは、LaravelがMariaDB(MySQL)に接続しようとして「拒否された」状態です。つまり、BookStack側ではなく、データベース側が停止・クラッシュしていたことが原因でした。
Laravelはデータベース接続が失敗すると、全画面のレンダリングができなくなり、500エラーが永続的に発生します。再起動せずとも復旧可能なケースが多いため、適切に対処すればリブートは不要です。
Laravelのログはscpを使ってサーバからダウンロードします。方法は別記事【Windows】scpを用いたubuntuサーバのファイルのダウンロード方法を参考にしてください。パスは通常/var/www/BookStack/storage/logs/laravel.log
です。
🔧 Laravelの500エラーから復旧する手順
✅ 手順1:MariaDBを再起動する
まずはデータベースを復活させます。
sudo systemctl restart mariadb
サービス名は mysql
の場合もあります。systemctl status mariadb
で確認可能です。
✅ 手順2:Apache(またはnginx)を再起動する
PHPのプロセスがエラー状態を保持している可能性があるため、Webサーバーも再起動します。
sudo systemctl restart apache2
✅ 手順3:Laravelのキャッシュをクリアする
Laravelは一度発生したエラーをキャッシュしているため、キャッシュを全て削除する必要があります。
cd /var/www/BookStack
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
キャッシュのクリアに失敗して、Failed to clear cache. Make sure you have the appropriate permissions.
と表示された場合は別記事Laravelのキャッシュクリアに失敗した場合の対処法を参考にしてください。
🔁 再発防止策
🔁 MariaDBの自動再起動を設定する
データベースが落ちたときに自動で復活するようにしておきましょう。
sudo systemctl edit mariadb
エディタが開いたら、以下を追記して保存します。
[Service]
Restart=always
RestartSec=5
その後、設定を反映してMariaDBを再起動します。
sudo systemctl daemon-reexec
sudo systemctl restart mariadb
これでMariaDBがクラッシュしても自動で再起動するようになります。
🛠 .env
の DB_HOST
を見直す
BookStackの .env
ファイルにある DB_HOST
が localhost
になっている場合、UNIXソケット経由になり、意図しない接続トラブルになることがあります。
以下のように変更するのが安全です。
DB_HOST=127.0.0.1
変更後は以下のコマンドで再キャッシュしてください。
php artisan config:clear
この変更により、LaravelはTCP/IP接続を使用するようになります。
🧠 swapの設定でメモリ不足を防ぐ
MariaDBが落ちる原因が「メモリ不足」の場合、swapがないことで即死することがあります。
まず現在のメモリ状態を確認します。
free -h
swapが0になっている場合は、以下のように作成できます(1GBの場合)。
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
詳しくは別記事MariaDB、PHPのクラッシュ防止のためのスワップ設定を参照してください。
📝 まとめ
-
BookStackのHTTP 500は、Laravelの問題というよりMariaDBの接続エラーが原因
-
ApacheとLaravelのキャッシュをクリアすればリブートなしで復旧可能
-
MariaDBの自動再起動と
.env
の見直し、swap設定で安定運用が可能に
この手順で再起動せずに復旧・安定運用できるようになりました。トラブル時の参考にしてください。