Serveur Web Nginx/PHP/MySQL sous MacOS X
- jeudi 16 avril 2009
- Publié dans Administration . Base de données . Hébergement . Mac OS X . MySQL . Nginx
- Ecrire
Après différents essais d’utilisation Apache / MySQL / PHP sous MacOS X que ce soit avec les versions out-of-the box d’Apple ou les packages spécifiques qui ne fonctionnent pas bien/du tout comme ca, çà, et çà, la raison m’a amené à compiler/installer une suite Web complète : plus d’Apache mais du Nginx (et çà j’y tiens), un PHP 5 avec les extensions standards et en exécution CGI, et enfin un MySQL 5.
Alors quelle solution permet de faciliter tout çà ? La réponse se trouve dans MacPorts : un système de ports pour MacOS, fortement inspiré des ports BSD. Un port est un package permettant de télécharger/compiler/installer les sources d’un logiciel. Une unique commande permet de remplir ce rôle. Donc autant vous le dire, une fois qu’on l’a utilisée, on s’en passe plus. Il faut uniquement mettre à jour de temps à autre l’arborescence des ports pour récupérer et mettre à jour les dernières versions. Tous les programmes sont installés dans /opt/local ce qui fait que rien n’est touché au système. Bref, la complexité est de ce niveau à peu près.
Installation de MacPorts : http://www.macports.org/install.php. N’oubliez pas d’installer la dernière version des outils XCode et le serveur X11 pour pouvoir compiler certains ports.
A partir de maintenant, le terminal est notre ami. Voici les commandes courantes de MacPorts :
port search <string> : chercher un port par son nom port info <port> : affiche les informations du port port variants <port> : afficher les options de compilation du port port install <port> : installe le port, les variants sont à fournir à la suite et préfixées par + port uninstall <port : désinstalle le port port deps <port> : les dépendances du port port contents <port> : les fichiers installés par le port
Avant de débuter l’installation des ports, une mise à jour de l’arborescence des ports s’impose :
$ sudo port -v selfupdate
Installation de Nginx :
$ sudo port install nginx
Il faut copier les fichiers exemples et éditer le fichier de configuration :
$ cd /opt/local/etc/nginx $ sudo cp mime.types.example mime.types $ sudo cp nginx.conf.example nginx.conf $ sudo cp fastcgi_params.example fastcgi_params $ sudo nano nginx.conf
Vérifiez que le répertoire root de l’hôte prédéfini est valide.
Installation de MySQL :
$ sudo port install mysql5-server
Une fois installé, il faut installer les db de gestion de MySQL :
$ sudo /opt/local/bin/mysql_install_db5 --user=mysql
Installation de PHP et son extension MySQL :
$ sudo port install php5 +fastcgi +pear $ sudo port install php5-mysql
Le mode d’exécution CGI est nécessaire pour Nginx et son module FastCGI. Il faut également créer le fichier php.ini :
$ cd /opt/local/etc/php5 $ cp php.ini-production php.ini
Pour le support FastCGI/PHP, je vous invite à consulter mon article traitant de ce sujet (et la configuration de Nginx pour le support PHP). Il faudra installer le port spawn-fcgi :
$ sudo port install spawn-fcgi
Concernant le script FCGI-PHP, j’utilise une socket UNIX dans /opt/local/var/run/nginx/.
Installation de PHPMyAdmin :
$ sudo port install phpmyadmin
Si besoin, copiez le répertoire /opt/local/www/phpmyadmin (ou faites un lien symbolique) vers votre répertoire root.
A présent que tout est installé, il convient de lancer les logiciels. Il existe deux méthodes : la méthode manuelle par scripts start/stop et la méthode launchd. Si la seconde permet d’automatiser le lancement automatique, la première est préférable sur une station de développement, notamment en cas d’erreur dans le fichier de configuration Nginx.
Les scripts manuels start / stop sont les suivants :
$ more /opt/local/etc/nginx/start.sh
#!/bin/sh /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper start nginx /opt/local/etc/nginx/fcgi-php.sh start
$ more /opt/local/etc/nginx/stop.sh
#!/bin/sh /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper stop kill `cat /opt/local/var/run/nginx/nginx.pid` /opt/local/etc/nginx/fcgi-php.sh stop
Si vous préférez la méthode launchd :
$ sudo launchctl load -w /opt/local/etc/LaunchDaemons/org.macports.mysql5/org/macports.mysql5.plist $ sudo launchctl start org.macports.mysql5 $ sudo launchctl load -w /opt/local/etc/LaunchDaemons/org.macports.nginx/org.macports.nginx.plist $ sudo launchctl start org.macports.nginx
Le script FCGI-PHP est à lancer manuellement (cf script start/stop).
Une fois le serveur MySQL en exécution, n’oubliez pas de modifier le mot de passe root :
$ mysqladmin5 -u root password 'new-password'
Un test de navigation sur http://localhost doit valider l’installation de Nginx. Créez un fichier PHP avec une sortie phpinfo () pour valider l’interprétation PHP-CGI.
Votre Mac dispose à présent d’une suite Web complète digne de ce nom.
Quelques remarques suite aux nouveautés de MacPorts :
– MySQL possède quant à lui deux ports distincts, un pour la partie client et un autre pour la partie serveur (mysql5-server).
– PHP5 ne supporte plus que certaines variantes : sudo port install php5 +fastcgi +pear. Il faut installer en plus le port php5-mysql pour l’extension MySQL. Son répertoire de configuration à changé : /opt/local/etc/php5
– spawn-fcgi a un port spécifique, il est donc inutile de compiler lighttpd : sudo port install spawn-fcgi
Voici un script permettant le démarrage automatique de votre PHP et de tous les composants dont il a besoin pour fonctionner avec la configuration ci-dessus (auteur Boris, bien évidemment)
start.sh
#!/bin/sh
/opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper start
nginx
/opt/local/etc/nginx/fcgi-php.sh start
Et son petit frère pour tout arrêter…
stop.sh
#!/bin/sh
/opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper stop
kill `cat /opt/local/var/run/nginx/nginx.pid`
/opt/local/etc/nginx/fcgi-php.sh stop
Article mis à jour pour la dernière monture de MacPorts.