Apache, mySQL et PHP 5.3 avec Homebrew

Il y a quelques mois, j’ai publié un article sur l’installation d’Apache, mySQL et PHP 5.3 via le gestionnaire de paquets MacPorts, je vous propose aujourd’hui un nouveau billet sur le même sujet mais avec un autre gestionnaire de paquets : Homebrew !

Pourquoi Homebrew ?

J’ai découvert Homebrew il y a quelques semaines en discutant avec mes collègues Clever Agiens. Comme j’avais eu quelques soucis lors d’une mise à jour de MacPorts, j’ai décidé de voir ce qu’avait ce nouvel outil dans le ventre et s’il était si « simple » et « flexible » que son auteur le clame !

Je partais déjà du constat suivant : MacPorts c’est bien mais ce n’est pas la panacée. Certes, l’outil est puissant mais il a plusieurs gros défauts pour moi : les installations sont affreusement lentes et j’ai eu régulièrement des problèmes lors de la mise à jour des paquets (sans compter le temps qu’elles prennent, cf. premier point).

Cet type d’outil était relativement « vital » pour un développeur web, il faut prendre un minimum de recul sur le projet en lui-même :

  • le projet est « ouvert », son code est disponible via Github… Premier bon point.
  • 3 500 suiveurs du projet, 1 500 forks et plusieurs commits sur la dernière journée… Le projet est actif, deuxième bon point.

Le projet semble actif et bien maintenu, ce qui est donc rassurant. Direction le Dock, clic sur Terminal et c’est parti pour l’installation.

Installation de Homebrew

Préalablement à l’installation de Homebrew, il est conseillé de faire un peu le ménage sur son Mac. Comme toujours, n’oubliez pas de faire une sauvegarde et d’avoir, par exemple, votre disque Time Machine à portée, ça peut toujours servir ;-)

Nous allons donc supprimer notre installation de MacPorts et faire le ménage dans nos dossiers pour l’arrivée du petit dernier :

$ sudo rm -rf /usr/local/include
$ sudo rm -rf /usr/local/lib
$ sudo rm -rf /opt/local /Applications/DarwinPorts /Applications/MacPorts /Library/LaunchDaemons/org.macports.* /Library/Receipts/DarwinPorts*.pkg /Library/Receipts/MacPorts*.pkg /Library/StartupItems/DarwinPortsStartup /Library/Tcl/darwinports1.0 /Library/Tcl/macports1.0 ~/.macports

Une fois cela fait, l’accouchement n’est qu’à la prochaine ligne :

$ ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

Alors que l’on s’attend à devoir partir prendre un café pour échapper au bruit assourdissant du ventilateur de sa machine, rien de tout ça : l’installation est d’une rapidité déconcertante. En quelques secondes, l’outil est prêt à l’emploi. C’est comme l’effet wahou de Windows Vista, Windows et Flavie en moins ;-)

On en profite pour installer quelques petits outils pratiques (wget, git et bash-completion) qui nous permettront de contempler la rapidité d’exécution de Homebrew.

$ brew install wget git bash-completion

Installation de mySQL

On continue avec l’installation de notre serveur mySQL :

$ brew install mysql
$ unset TMPDIR
$ mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp

On ajoute un fichier my.cnf (à placer dans /etc/) pour définir le socket :

[mysqld]
socket = /tmp/mysql.sock

[client]
socket = /tmp/mysql.sock

On copie le fichier de démarrage pour que launchd puisse le lancer au démarrage du Mac :

$ mkdir -p ~/Library/LaunchAgents
$ cp /usr/local/Cellar/mysql/5.5.15/com.mysql.mysqld.plist ~/Library/LaunchAgents/
$ launchctl load -w ~/Library/LaunchAgents/com.mysql.mysqld.plist

Concernant l’avant dernière ligne, j’attire votre attention sur la version installée : n’oubliez pas de modifier le path :)

On sécurise notre installation :

$ mysql_secure_installation

Et le tour est jour ;-)

Installation de PHP et configuration d’Apache

Homebrew ayant la volonté de ne pas proposer d’outil déjà intégré au sein de Mac OS X, il faut utiliser un dépôt alternatif qui propose un certain nombre de paquets avec des versions plus à jour que celles intégrées au système :

$ brew install https://github.com/adamv/homebrew-alt/raw/master/duplicates/php.rb --with-apache --with-mysql
$ chmod -R ug+w /usr/local/Cellar/php/5.3.8/lib/php
$ pear config-set php_ini /usr/local/etc/php.ini

A noter que si vous avez besoin de pouvoir switcher simplement entre PHP 5.2 et 5.3, Bastnic propose une solution élégante.

Comme nous utilisons le serveur Apache fourni par Mac OS X, il faut modifier le fichier de configuration de ce dernier afin qu’il utilise notre version de PHP :

$ vim /etc/apache2/httpd.conf
+ LoadModule php5_module    /usr/local/Cellar/php/5.3.8/libexec/apache2/libphp5.so

Afin que la CLI de PHP soit celle de notre version de PHP, nous ajoutons une petite ligne à notre fichier de profil Bash :

$ echo 'export PATH='`brew --prefix php`'/bin:$PATH' >> .bash_profile

On peut aussi installer Xdebug via la commande suivante :

$ brew install xdebug

On ajoutera également la ligne suivante à notre php.ini (n’oubliez pas de modifier le path par la version installée) :

$ vim /usr/local/etc/php.ini
+ zend_extension="/usr/local/Cellar/xdebug/2.1.0/xdebug.so"

On en profite également pour définir quelques valeurs par défaut pour notre php.ini :

$ sudo -i
$ cd /usr/local/etc/
$ defSock=`mysql_config --socket`
$ cat php.ini | sudo sed \
-e "s#pdo_mysql\.default_socket.*#pdo_mysql\.default_socket=${defSock}#" \
-e "s#mysql\.default_socket.*#mysql\.default_socket=${defSock}#" \
-e "s#mysqli\.default_socket.*#mysqli\.default_socket=${defSock}#" > php.ini-tmp
$ grep default_socket php.ini-tmp
$ mv php.ini-tmp php.ini
$ exit

C’est fini

Les principaux services dont nous avions besoin sont installés. Il reste encore un peu de tuning à faire pour activer le server-status d’Apache, définir notre premier Virtualhost ou configurer phpMyAdmin. Tout étant expliqué en détail dans mon post sur MacPorts, je vous invite à suivre les explications ;-) .

Sources

Apache, mySQL et PHP 5.3 avec MacPorts

Ayant récemment changé mon Mac, il m’a fallu repasser par l’étape (pénible) de réinstallation complète du système afin de repartir sur une base saine. Je ne détaillerai pas ici pourquoi je n’ai pas souhaité migrer mon ancien système sur le nouveau Mac mais je vais vous livrer un petit tutorial rapide pour installer un environnement de développement LAMP avec l’excellent gestionnaire de paquets MacPorts.

Ce billet repose principalement sur le howto proposé par MacPorts modifié par mes soins pour coller à mes besoins. Vos remarques sont d’ailleurs les bienvenues en commentaire, tout étant évidemment perfectible !

Première étape : installation de MacPorts

Au cas où vous ne l’auriez pas fait, téléchargez MacPorts en veillant bien à choisir la version de votre système d’exploitation. Lancez-le, prenez un café (au passage, prévoyez-en un stock pour la suite, ça sera utile) et patientez :)

Deuxième étape : installation d’Apache

Dans un terminal, lancez la commande suivante :

$ sudo port install apache2

N’oubliez pas de faire un tour dans les préférences système de Mac OS X pour désactiver le « Partage Web », aka l’Apache fourni avec le système, histoire d’éviter tout conflit (bien qu’il soit possible de facilement faire tourner Apache sur un autre port que celui par défaut).

Afin qu’Apache se lance à chaque démarrage du Mac, il faut spécifier l’emplacement du fichier de lancement à launchd, le gestionnaire de lancement de programmes de Mac OS X. MacPorts fourni une commande pour faire cela aisément :

$ sudo port load apache2

Passons ensuite à la configuration d’Apache (avec l’activation, entres autres, des VirtualHosts) :

$ sudo vim /opt/local/apache2/conf/httpd.conf
+ Include conf/extra/httpd-info.conf
+ Include conf/extra/httpd-vhosts.conf
+ Include conf/extra/httpd-default.conf

$ sudo vim /opt/local/apache2/conf/extra/httpd-info.conf

<Location /server-status>
  SetHandler server-status
  Order deny,allow
  Deny from all
+ Allow from 127.0.0.1
</Location>
<Location /server-info>
  SetHandler server-info
  Order deny,allow
  Deny from all
+ Allow from 127.0.0.1
</Location>

Afin de pouvoir accéder facilement à la commande de contrôle Apache, nous allons définir un alias dans notre fichier de profile bash :

$ vim .profile
+  alias apache2ctl='sudo /opt/local/apache2/bin/apachectl'

$ source .profile

Ainsi, vous pouvez démarrer, redémarrer, arrêter, vérifier la syntaxe des fichiers de configuration Apache, connaître le statut du serveur simplement à l’aide de la commande :

$ apache2ctl start/restart/stop/configtest/status

Enfin, je vous conseille d’installer lynx, le navigateur en mode texte afin d’utiliser l’option status de la commande :

$ sudo port install lynx

Troisième étape : installation de mySQL

Vient ensuite l’installation du SGBD mySQL :

$ sudo port install mysql5-server
$ sudo port load mysql-server
$ sudo -u _mysql mysql_install_db5

Enfin, afin de sécuriser l’installation de mySQL, saisissez la commande :

/opt/local/lib/mysql5/bin/mysql_secure_installation

On profite également de l’occasion pour que mySQL utilise par défaut l’UTF8, ça sera toujours un peu de temps de gagné pour la suite :

$ sudo vim /opt/local/etc/mysql5/my.cnf
+ [mysqld]
+ default-character-set=utf8
+ default-collation=utf8_unicode_ci
+ character_set_server=utf8
+ collation_server=utf8_unicode_ci
+ default-storage-engine=INNODB

Quatrième étape : installation de PHP

MacPorts propose par défaut la dernière version de PHP, soit la 5.3. Si vous souhaitez installer la version 5.2, il faudra installer le paquet php52.

$ sudo port install php5 +apache2
$ sudo port install php5-apc php5-curl php5-exif php5-ftp php5-gd php5-imagick php5-mbstring php5-memcache php5-mysql php5-soap php5-solr php5-xdebug php5-xmlrpc php5-xsl

Afin que PHP soit reconnu comme module Apache, il est nécessaire de faire une petite bidouille :

$ cd /opt/local/apache2/modules
$ sudo /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so

$ sudo vim /opt/local/apache2/conf/httpd.conf
+ Include conf/extra/mod_php.conf
<IfModule dir_module>
+  DirectoryIndex index.php index.html
</IfModule>

On peut ensuite configurer PHP et définir le socket mySQL utilisé par MacPorts :

$ sudo -i
$ cd /opt/local/etc/php5
$ cp php.ini-development php.ini
$ defSock=`/opt/local/bin/mysql_config5 --socket`
$ cat php.ini | sudo sed \
-e "s#pdo_mysql\.default_socket.*#pdo_mysql\.default_socket=${defSock}#" \
-e "s#mysql\.default_socket.*#mysql\.default_socket=${defSock}#" \
-e "s#mysqli\.default_socket.*#mysqli\.default_socket=${defSock}#" > tmp.ini
$ grep default_socket php.ini.tmp
$ mv php.ini.tmp php.ini
$ exit

Cinquième étape : configuration d’un VirtualHost Apache

$ sudo vim /opt/local/apache2/conf/extra/httpd-vhosts.conf
NameVirtualHost *:80

<VirtualHost *:80>
 DocumentRoot "/path/de/votre/
 ServerName projet.local

 <Directory "/path/de/votre/projet">
 Order allow,deny
 Allow from 127.0.0.1
 </Directory>
</VirtualHost>

$ sudo vim /etc/hosts
+  127.0.0.1       projet.local

Etape complémentaire : installation de phpMyAdmin

$ sudo port install phpmyadmin
$ sudo vim /opt/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
  DocumentRoot "/opt/local/www/phpmyadmin"
  ServerName phpmyadmin.local

  <Directory "/opt/local/www/phpmyadmin">
    Order allow,deny
    Allow from 127.0.0.1
  </Directory>
</VirtualHost>

$ sudo vim /etc/hosts
+  127.0.0.1       phpmyadmin.local

$ apache2ctl restart

Vous avez désormais une plateforme LAMP de développement disponible sur votre Mac. Il existe beaucoup de « ports » disponibles, je vous invite à faire un tour dans la liste des paquets disponibles et à lire le guide pour que la liste de commande de MacPorts n’ait plus de secret pour vous !