Laravelで開発をするとき、毎回php artisan serveをするのがちょっと手間でした。起動中だけにTera Termを一つ占有してしまうし…
どうせなら開発サーバー立ち上げと同時に、指定のドメイン名でアクセスしたら必ず指定のLaravelプロジェクトが動くようにしたい!
これは「仮想ホスト」と「ドキュメントルート」の設定で解決できました。
手順
- Laravelプロジェクトを任意の場所に設置
- nginxの仮想ホストの設定とドキュメントルートの指定
- 設定ファイルにシンポリックリンクを貼る
- nginxの再起動
- 仮想ホストにアクセスして動作を確認
こんな流れになります。
Laravelプロジェクトを任意の場所に設置
/var/www/html内など、任意の場所にLaravelプロジェクトを設置します。
設置した場所を忘れないようにメモしておきます。あとでnginxの設定ファイルに書きます。
nginxの仮想ホストの設定とドキュメントルートの指定
sites-availableにおそらく「default」ファイルがあるので、それをコピーします。/p>
cd /etc/nginx/sites-available
sudo cp default laravel
以下を入力します。
server {
listen 80;
server_name laravel.local;
root /var/www/laravel/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
「server_name laravel.local;」と「root /var/www/laravel/public;」がポイント。
「server_nameがlaravel.localのときは/var/www/laravel/publicをみるよ」となります。
設定ファイルにシンポリックリンクを貼る
書いた設定ファイルを、nginxが実際に読み込みに行く場所にシンボリックリンクを貼ります。
sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/
sites-availableにあるファイルに書いただけでは設定が反映されないので注意です。
nginxの再起動
シンボリックリンクが貼れたら、nginxを再起動します。
sudo nginx -t
sudo systemctl restart nginx
ブラウザでhttp://laravel.local(自分で設定したserver_name)にアクセスし、ページが表示されたら成功です。
アクセスする端末と開発サーバーが異なる場合
私はこの環境をラズパイ開発サーバー、Windows端末でアクセスしています。Windows端末のブラウザからただserver_nameを書いただけではアクセスできません。
hostsファイルに「指定の開発サーバーIPとドメイン名の紐づけ」を書いてアクセスできるようにしています。
192.168.xxx.xxx laravel.local
※hostsファイル記入例
最後はLaravel側の設定など
設定したserver_nameをLaravelの.envのAPP_URLに設定し、キャッシュのクリアを行っておくと良好になると思います。
php artisan config:clear
php artisan cache:clear
php artisan route:clear
まとめ
nginxで仮想ホストを作成、ドキュメントルートの設定。そのホストにアクセスすればLaravelプロジェクトが起動されている…毎回php artisan serveしないだけでもすごく便利になります。
初めは時間がかかるかもしれませんが、やっておくと開発するときのハードルが一つ減るような、とても良い設定でした。