How to Serve Laravel Apps With Valet on MacOS

How to Serve Laravel Apps With Valet on MacOS

If you’re here, you probably already have Laravel installed on your machine (and you run macOS). If you don’t have Laravel set up properly and you use a different operating system, I’ve written a guide to help you set up Laravel.

This is specifically for macOS users who:

  • Have Laravel installed.

  • would like to run and manage Laravel applications on a single domain (e.g., mylaravelapp.awesome, myapp.app).

  • Would like to run Laravel sites over encrypted TLS (HTTP/2).

  • Would like to share their local sites with the world.

  • Just want to tinker.


Understanding How Valet Works

Valet is a PHP development environment for PHP frameworks, including Laravel, WordPress, etc. Valet configures your Mac to always run Nginx Server in the background when your machine starts.

Using dnsmasq, Valet proxies all requests on the *.test (this can be changed to a custom domain) domain to point to sites installed on your local machine. Valet also allows you to share your sites publicly using local tunnels.

Out of the box, Valet support includes, but is not limited to:


Installation

Valet requires macOS and Homebrew. Before installation, you should make sure that no other programs, such as Apache or Nginx, are binding to your local machine’s port 80.

  • Install Homebrew.

      /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
  • Update brew

      brew update
    
  • Install PHP7.3.

      brew install php
    
  • Install Composer.

  1. Download the installer to the current directory.

     php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    
  2. Verify the installer SHA-384, which you can also cross-check here.

       php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
    
  3. Run the installer.

     php composer-setup.php
    
  4. Remove the installer.

     php -r "unlink('composer-setup.php');"
    
  • Install Valet with Composer.

      composer global require laravel/valet
    

To have the Valet command available globally on your system, make sure you have the~/.composer/vendor/bin directory in your system’s “PATH”.

You can also see how to add the bin folder to your path here.

Configure and install Valet and Dnsmasq to always run when you start your machine:

valet install

Once Valet is installed, try pinging any *.test domain on your terminal using a command such as ping foobar.test. If Valet is installed correctly, you should see this domain responding on 127.0.0.1.


Using a Custom Domain

If you would like to use a different domain other than the default (.test), you can simply tell Valet to use a new domain name:

valet tld new-name

e.g

valet tld app

You should see an output on your terminal verifying that your new domain has been updated:

Restarting dnsmasq...
Valet is configured to serve for TLD [.app]
Restarting php...
Restarting nginx...
Your Valet TLD has been updated to [app].

Valet will automatically start serving your projects at *.app.


Serving Laravel Sites

Once Valet is installed, you’re ready to start serving sites. First, you’ll need to configure a folder where Valet should search for your sites. Think of this as your htdocs folder (if you ever used Xampp or a similar tool).

Create a folder where you’ll have your Laravel sites:

mkdir ~/Laravel_Sites/

Navigate into that directory:

cd ~/Laravel_Sites/

Now run:

valet park

The park command will register your current directory as a path that Valet should search for your sites.

You can proceed to create a new Laravel application in the same folder.

laravel new sleek_site

Your new site should now be accessible at http://sleek_site.app.


Securing Local Sites With TLS

You can serve your Laravel sites locally over HTTPS, thanks to Valet. Simply change into your site directory (~/Laravel_Sites) and run:

valet secure site_name # e.g valet secure sleek_site

You should now be able to access your Laravel application at https://sleek_site.app.


Sharing Local Sites

Valet comes coupled with ngrok for sharing your local sites on a public URL. No additional software installation is required. To share your local site, navigate into your project directory and run

cd sleek_site

valet serve

You should see a server running in your terminal.

Image for post

You can publicly access your Laravel site by opening the URL http://5e44d238.ngrok.io in your browser or from a secure source via https://5e44d238.ngrok.io.


At this point, you’ve successfully set up Valet to serve Laravel applications locally.

Cheers ☕️