Every local development environment is based on a stack of some sort. My goal here was to remove as many barriers to development as possible, and for me that aligns with installing everything locally. Local for me equates to OS X, so everything in this series is based on that setup.
Install Homebrew
Homebrew on OS X is one of your best friends as a developer. Touted as The missing package manager for macOS Homebrew allows you to easily install various UNIX tools that aren’t included with macOS.
Installation instructions are kept at the top of Homebrew’s home page, at the time of this writing it’s a single command you can enter into your Terminal prompt.
Install nginx via Homebrew
The E in MEMP stands for Nginx (because it’s pronounced engine-X) which is supported in a few different ways through Homebrew. While there is a default nginx
tap (i.e. Homebrew package) available, I prefer to use the community version because it offers a module that’s essential for a customization outlined in MyLocalDev Part 4: Differentiating Your Local Environment.
If you’ve already got nginx
installed via Homebrew, it’s easily uninstalled by executing the following on your command line:
brew uninstall nginx
Once uninstalled, we can install a Valet-compatible version of Nginx called nginx-full
with a couple of modules like so:
brew install nginx-full --with-sub --with-http2
Installing in this way includes support for HTTP/2 which is necessary for Valet, along with another module that allows us to customize content served by our local Nginx installation. For more information on why this is necessary check out MyLocalDev Part 4: Differentiating Your Local Environment.
Install PHP and MySQL via Homebrew
Homebrew makes it really simple to install PHP and MySQL with just a couple of commands, but I found that a slight customization is needed to ensure that SSL works when performing certain operations.
I discovered that without this customization, migrations run through WP Migrate DB Pro don’t always work as expected when you’re pulling from (or pushing to) an environment over HTTPS. There is documentation from WP Migrate DB Pro about SSL issues that includes a link to a Valet GitHub Issue that has a comment from lekkerduidelijk that had a fix that worked great for me. Hello open source!
Remove existing version of PHP
If you already have PHP 7.1 installed via Homebrew like I did, you’ll need to remove it first. Don’t worry, this will not break Valet!
(If you’re running PHP 7.0 instead of 7.1, simply replace php71
with php71
in the following commands)
valet stop
brew unlink php71
brew remove php71
brew uninstall --ignore-dependencies php71
This will fully remove your existing installation of PHP 7.1, allowing for a reinstallation of PHP 7.1 using OpenSSL.
Installing PHP with OpenSSL
The commands that worked for me are as follows, each command executed in the following sequence on the command line:
brew update
valet stop
composer global require laravel/valet
brew install openssl
brew install --with-openssl curl
brew install --with-homebrew-curl php71
brew services start homebrew/php/php71
export PATH="$(brew --prefix homebrew/php/php71)/bin:$PATH"
php -i | grep "SSL Version"
Should return SSL Version => OpenSSL/1.0.2kvalet restart
valet secure mywebsite
Where mywebsite is the directory name of the site you want to serve over HTTPS
Installing MySQL
This one’s much easier:
brew install mysql
Done! To ensure MySQL starts and restarts when you reboot your machine execute this command:
brew services start mysql
Connect to the database at 127.0.0.1
with a username of root
and an empty string for the password.
Installing Valet
Installation of Valet itself is just a single command as per the Valet Installation instructions:
valet install
Once Valet is installed, the last thing you need to do is tell Valet where it should look for your sites.
On your command line, change directories to where you store your sites (cd ~/dev
for me) and execute this Valet command:
valet park
This will tell Valet to look in ~/dev
for folders that match the URL you enter in your browser. The default TLD is .dev
so if you have a folder ~/dev/mysite
entering http://mysite.dev/
into your browser will have Valet map that request to ~/dev/mysite
and it’s as easy as that!
To have Valet serve a site over HTTPS first see the note above about ensuring OpenSSL support and then execute
valet secure mysite
Where mysite
is the directory name of the site you want to secure. Too easy.
Read more from this series
This article is part of a MyLocalDev series all about local web development on OS X. Check out the other articles in this series:
- MyLocalDev Part 1: Background
- MyLocalDev Part 2: MEMP and Valet
- MyLocalDev Part 3: MailHog and mhsendmail on OS X
- MyLocalDev Part 4: Differentiating Your Local Environment