Install Commandline Tools
xcode-select --install
Install Homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Check Installation
brew doctor
Install brew services
brew tap homebrew/services
Install bash completion (Optional)
brew install bash-completion
Update Brew and Packages if allready installed
brew update && brew upgrade
Setup Environment
sudo nano ~/.bash_profile
Add following lines
##
# Homebrew
##
export PATH="/usr/local/bin:$PATH"
export PATH="/usr/local/sbin:$PATH"
##
# Homebrew bash completion
##
if [ -f $(brew --prefix)/etc/bash_completion ]; then
source $(brew --prefix)/etc/bash_completion
fi
DNSMasq
DNSMasq is used to resolve all domains that end with .dev to 127.0.0.1. So you don´t need to touch hosts-File anymore.
Install
brew install dnsmasq
Configure
curl -L https://gist.githubusercontent.com/dtomasi/ab76d14338db82ec24a1fc137caff75b/raw/550c84393c4c1eef8a3e68bb720df561b5d3f175/dnsmasq.conf -o /usr/local/etc/dnsmasq.conf
sudo curl -L https://gist.githubusercontent.com/dtomasi/ab76d14338db82ec24a1fc137caff75b/raw/550c84393c4c1eef8a3e68bb720df561b5d3f175/dev -o /etc/resolver/dev
Start, Stop and Restart
# Start
sudo brew services start dnsmasq
# Stop
sudo brew services stop dnsmasq
# Restart
sudo brew services restart dnsmasq
Test
dig testing.a.domain.that.should.point.to.localhost.dev @127.0.0.1
PHP-FPM
Install php70
brew tap homebrew/dupes && \
brew tap homebrew/php && \
brew install --without-apache --with-fpm --with-mysql php70
Configure
sudo nano /usr/local/etc/php/7.0/php-fpm.d/www.conf
user = YOUR_USERNAME
group = YOUR_GROUP || staff
Testing
start php-fpm
sudo brew services start php70
show running processes
lsof -Pni4 | grep LISTEN | grep php
NGINX
Install NGINX
brew tap homebrew/nginx && \
brew install nginx
Test Installation
## Start Nginx
sudo brew services start nginx
## Check if Nginx is running on default port
curl -IL http://127.0.0.1:8080
Output should look like this
HTTP/1.1 200 OK
Server: nginx/1.10.0
Date: Sat, 07 May 2016 07:36:32 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 26 Apr 2016 13:31:24 GMT
Connection: keep-alive
ETag: "571f6dac-264"
Accept-Ranges: bytes
Stop Nginx
sudo brew services stop nginx
Configure
Create missing directories
mkdir -p /usr/local/etc/nginx/sites-available && \
mkdir -p /usr/local/etc/nginx/sites-enabled && \
mkdir -p /usr/local/etc/nginx/conf.d && \
mkdir -p /usr/local/etc/nginx/ssl
Configure nginx.conf
# Remove default
rm /usr/local/etc/nginx/nginx.conf
# Copy mine
curl -L https://gist.githubusercontent.com/dtomasi/ab76d14338db82ec24a1fc137caff75b/raw/c7c99476e6d8bd5b23e814c5593861adb9b54765/nginx.conf -o /usr/local/etc/nginx/nginx.conf
Start and Test Nginx
## Start Nginx
sudo brew services start nginx
## Check if Nginx is running on default port
curl -IL http://localhost
## Output should look like this
HTTP/1.1 200 OK
Server: nginx/1.10.0
Date: Sat, 07 May 2016 08:35:57 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 26 Apr 2016 13:31:24 GMT
Connection: keep-alive
ETag: "571f6dac-264"
Accept-Ranges: bytes
Setup SSL
Create a folder for our SSL certificates and private keys:
mkdir -p /usr/local/etc/nginx/ssl
Generate 4096 bit RSA keys and the self-sign the certificates in one command:
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=State/L=Town/O=Office/CN=localhost" -keyout /usr/local/etc/nginx/ssl/localhost.key -out /usr/local/etc/nginx/ssl/localhost.crt
Setup example virtual hosts
These are working presets. But you need to edit Document-Root
curl -L https://gist.githubusercontent.com/dtomasi/ab76d14338db82ec24a1fc137caff75b/raw/c7c99476e6d8bd5b23e814c5593861adb9b54765/default -o /usr/local/etc/nginx/sites-available/default && \
curl -L https://gist.githubusercontent.com/dtomasi/ab76d14338db82ec24a1fc137caff75b/raw/c7c99476e6d8bd5b23e814c5593861adb9b54765/default-ssl -o /usr/local/etc/nginx/sites-available/default-ssl
Activate Virtual Hosts
ln -sfv /usr/local/etc/nginx/sites-available/default /usr/local/etc/nginx/sites-enabled/default
ln -sfv /usr/local/etc/nginx/sites-available/default-ssl /usr/local/etc/nginx/sites-enabled/default-ssl
Create info.php for testing
echo "<?php phpinfo();" > /path/to/your/document/root
Test
sudo brew services restart nginx
curl -IL http://localhost/info.php
# Output should look like this
HTTP/1.1 200 OK
Server: nginx/1.10.0
Date: Sat, 07 May 2016 08:40:36 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/7.0.6