Sätt upp din utvecklingsmiljö för PHP-utveckling med Homebrew

Homebrew är en "package manager" för OS X som gör det snabbt och enkelt att installera all den mjukvaran du kan tänkas behöva. Eller som de själva så bra skriver:

Homebrew installs the stuff you need that Apple didn’t.

Bland fördelarna med Homebrew är att att allting installeras och placeras på en och samma plats, vilket gör det enklare att uppdatera och avinstallera moduler i framtiden – man slipper helt enkelt leta runt överallt i OS:et för hitta var man har placerat alla ens filer.

En annan fördel är att man skapa skapa "brew formulas" som kan installera flera olika moduler samtidigt, om så skulle behövas (t.ex. om man ska installera PHP, och behöver mcrypt).

Här ska vi gå igenom att sätta upp en komplett utvecklingsmiljö för PHP, där man bl.a. enkelt kan installera och köra Wordpress, Laraval eller vad som helst man kan tänkas vilja utveckla. MySQL kommer behövas, Composer likaså, och så vill vi så klart ha en bra struktur för alla våra projekt med hjälp av vhosts och annat.

Den här guiden innehåller delar som är självklara för många, men jag ville ändå göra den så grundläggande som möjligt.

Installera Homebrew

Steg 1 är så klart att få in Homebrew i vårt system, det gör man så enkelt som:

$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Som svar bör du få något i stil med:

==> This script will install:
/usr/local/bin/brew
/usr/local/Library/...
/usr/local/share/man/man1/brew.1

Press ENTER to continue or any other key to abort

Beroende på vilka "dependencies" du redan har installerade så kan du vara tvungen att gå igenom ett par extra steg, t.ex. så kommer Command Line Tools från Apple att behövas. Dock så behöver du inte installera hela XCode om du inte så önskar.

Hela installationen bör endast ta 1-5 minuter.

När installationen är färdig ber den dig att köra brew doctor, så gör det – den ser bara efter så att alla filerna är installerade som de ska.

Installera MySQL

Att installera MySQL med Homebrew är enkelt:

$ brew install mysql

Nu kan du starta MySQL med:

$ mysql.server start

Standarduppgifter för inloggning till din MySQL-server är host: localhost och user: root. Lösenordet kan du lämna blankt.

Installera PHP

Den formeln" vi kommer att använda oss av denna på Github. Först behöver vi med lite dependencies som den formeln använder sig av:

$ brew tap homebrew/dupes

När det väl är klart ska vi in med själva PHP:

$ brew tap josegonzalez/homebrew-php

Nu är det lite upp till var och en vad man har för krav, för med kommandot $ brew options php55 så får man en hel lista med alternativ. Stöd för Apache och MySQL ingår i grundinstallation (vill man absolut inte ha med dem kan man ta med t.ex. --without-mysql), så vi kör utan några extra parametrar.

$ brew install php55

Nu kommer en rad av olika saker att installeras, allting som behövs för att kompilera och installera PHP (I skrivande stund 5.5.8). Allt som allt tar det cirka 5-10 minuter.

OBS! Beroende på om du kör OS X 10.8 eller 10.9 så kan diverse fel uppstå. På Github-sidan för PHP-formeln listas en del av de vanligt förekommande problemen. På OS X 10.9.1 kunde jag installera allting helt utan problem, men på ett annat system som körde 10.8.5 så fick jag gå igenom ett par extra steg. Här är som alltid Google din vän.

Apache, httpd.conf, vhosts.conf och annat

Apache är inbyggt i OS X, och den fungerar gott och väl att köra på. För att starta upp Apache så är det bara att köra kommandot:

$ sudo apachectl -k start

Och för att starta om (något man kommer att göra ofta när man ändrar konfigurationsfiler):

$ sudo apachectl -k restart

Om du får felmeddelandet "httpd: Could not reliably determine the server's fully quilified domain name [...]" – öppna httpd.conf i /private/etc/apache2/ och sätt serverName till 127.0.0.1.

Vi vill också använda vår nyinstallerade PHP-modul, så lägg även till:

LoadModule php5_module /usr/local/opt/php55/libexec/apache2/libphp5.so

Hur som, det är i /etc/apache2/extra/httpd-vhosts.conf som vi vill ändra, så att vi kan tala om var vi vill att localhost ska peka, och kan t.ex. sätta upp "utvecklingsdomäner" så som projekt.dev.

Först, localhost:

<VirtualHost *:80>
   DocumentRoot "/Users/marcus/Dev"
   <Directory "/Users/marcus/Dev">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
</VirtualHost>

Jag kör kort och gott med en Dev-mapp i mitt "home directory".

I den här Dev-mappen så skapar jag en undermapp för varje projekt. Nyligen så programmerade jag t.ex. lite för VehoBil.se, då använde jag:

<VirtualHost *:80>
   DocumentRoot "/Users/marcus/Dev/vehobil.se/"
   ServerName vehobil.dev
   <Directory "/Users/marcus/Dev/vehobil.se/">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
</VirtualHost>

Lägger du till en utvecklingsdomän, behöver du öppna upp din hosts-fil (/private/etc/hosts) och tala om att den ska gå till din Apache-server:

127.0.0.1   vehobil.dev

Startar du om Apache och går till vehobil.dev/ så kommer du nu att hamna rätt.

I php.ini finns säkerligen en hel inställningar som man vill ändra på också; den hittar man i /usr/local/etc/php/5.5/.

Övrigt

Nu finns det så klart en massa saker man kan göra för att få en miljö som passar ens arbete och arbetssätt på bästa vis. Men vi vill i alla fall ha Composer, för att enkelt hantera alla dependencies för våra projekt, och för att jobba med t.ex. Laravel:

$ brew install composer

Det fina här är att Composer lägger sig globalt, så inget mer av att ladda ner per projekt och köra php composer.phar.

Vi vill också så klart ha ett GUI för MySQL. phpMyAdmin kan man såklart installera om man så önskar, men jag föredrar Sequel Pro för alla mina projekt. Gratis och bra.

För att ansluta till ens lokala MySQL server så behöver man bara fyll i uppgifterna:

'Sequel Pro MySQL Homebrew'

Till sist...

... En liten snabbguide till var alla viktiga filer finns. Tar alltid ett tag att lägga på minnet:

php.ini:            /usr/local/etc/php/5.5/php.ini
httpd.conf:         /private/etc/apache2/httpd.conf
httpd-vhosts.conf:  /etc/apache2/extra/httpd-vhosts.conf
hosts:              /private/etc/hosts

Och användbara kommandon:

$ mysql.server start/stop/restart
$ sudo apachectl -k start/stop/restart

kommentarer är varmt välkomna, @olssonm är jag på Twitter.