Nginx, php-fpm sur OSx Yosemite, fin d’une lutte éreintante !

28. avril 2016 Informatique, Osx 0

Bon, commençons par un peu de contexte et le pourquoi du comment de cet article.

Depuis quelque temps, j’utilise le macbook pro de ma compagne car mon propre portable en dual-boot Debian/Windows 8 est utilisé comme media center grâce à sa prise VGA pour l’écran de 27 qui sert de télé. A la base, je ne suis pas trop, voir du tout, MAC mais il faut bien avouer que son fonctionnement pour s’amuser avec des bouts de codes est sympathique. Voilà pour le contexte.

Le pourquoi de cet article est relativement simple. Je découvre un peu le comportement du Mac est donc farfouille et perds un temps certain, cet article sera donc plus une note qu’un tutoriel, il ne possède aucune prétention didactique !!! Il me fallait un environnement de travail pour pouvoir tripatouiller sereinement sans tout casser sur le serveur qui héberge ce blog.

Le serveur tourne sur Debian 8 avec Nginx et php-fpm donc il me fallait la même chose sur le Mac !!! Hop hop hop ! les affaires commencent… et le temps passe.

Commençons par les pré-requis pour cette installation :

  • Yosemite (oui, je sais El Capitan est sorti mais je venais de faire la mise à jour sur Yosemite lors de sa sortie du coup… flemme)
  • Homebrew (le gestionnaire de paquet pour Mac, le sauveur ! + d’infos : http://brew.sh/index_fr.html )
  • Xcode command line tools (les outils de développement pour mac, je sais pas trop là-dessus)
    • xcode-select --install
  • et s’est terminé !

Les choses sérieuses commencent alors, l’installation en elle-même des paquets nginx et php :

Commençons par Nginx :

brew install nginx  

 

maintenant, nous voulons qu’il se lance au démarrage du mac donc un lien vers LaunchAgents est à faire :

(attention, si le dossier n’existe pas : mkdir ~/Library/LaunchAgents/ )

ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents/

et en bonus un petit mémo des commandes :

sudo nginx            # démarrage  
sudo nginx -s stop    # arrêt
sudo nginx -s reload  # rechargement des fichiers de configuration

A ce niveau de l’installation, si tout va bien, en allant sur : http://localhost:8080/ vous devriez voir apparaître la page d’accueil de Nginx. Il est temps de passer à sa configuration !

Configuration de Nginx avec domaine de test et virtualhost

pour la modifier :

nano /usr/local/etc/nginx/nginx.conf

et voilà le contenu après modification, si vous l’utilisez penser à modifier l’utilisateur en haut du fichier !

user {utilisateur} staff;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
include /usr/local/etc/nginx/sites-enabled/*; # chargement des fichiers de configuration des sites activés
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server {
# configuration des requêtes php
location ~ \.php$ {
try_files $uri $uri/ /index.php?$args ;
index index.html index.htm index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_intercept_errors on;
include fastcgi_params;
}
}
}
view raw nginx.conf hosted with ❤ by GitHub

Préparation et création des virtualhosts

Création des dossiers contenant les VH, available = les disponibles et enabled = les utilisés

mkdir /usr/local/etc/nginx/sites-{available,enabled}

Créons maintenant le premier virtualhost du nom de votre domaine local

nano /usr/local/etc/nginx/sites-available/nom-de-dom-local

mon fichier de configuration du VH :
Pensez à modifier les chemins ! de plus, j’ai modifié aussi le port par défaut pour ne plus avoir à ajouter 8080

server {
listen 80;
server_name nom-dom-local;
access_log /Users/votre-nom-utilisateur/dossier/site/local/logs/access.log;
error_log /Users/votre-nom-utilisateur/dossier/site/local/logs/error.log;
root /Users/votre-nom-utilisateur/dossier/site/local;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri $uri/ /index.php?$args;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_intercept_errors on;
include fastcgi_params;
}
}
view raw nom-dom-local.conf hosted with ❤ by GitHub

Comme j’ai modifié le port par défaut ainsi que le nom de domaine pour avoir un nom de domaine en local différent de localhost il faut faire une redirection.

sudo nano /etc/hosts

et ajouter à la fin du fichier :

127.0.0.1 nom-dom-local

et on va terminer par un petit rechargement des fichiers de configurations nginx : sudo nginx -s reload

Nous pouvons passer à PHP !

Installation de php avec homebrew

Homebrew ne possède pas php en natif il faut ajouter les répertoires

brew tap homebrew/dupes && brew tap homebrew/versions && brew tap homebrew/homebrew-php

une fois cela fais, il ne reste plus qu’à l’installer :

brew install -v --with-fpm --with-mysql --disable-opcache --with-imap --without-apache php56

A ce moment là, un café est possible car l’attente est possible…

L’installation est terminée, comme pour Nginx nous le voulons au démarrage donc :

ln -sfv /usr/local/opt/php56/*.plist ~/Library/LaunchAgents

Pour limiter les problèmes j’ai ensuite modifié le fichier php-fpm.conf pour ajouter l’utilisateur de php

nano /usr/local/etc/php/5.6/php-fpm.conf

Il faut aller chercher ces lignes là :

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = votre-nom-utilisateur
group = staff

Pour que la version de Homebrew soit utiliser il faut modifier le PATH : nano ~/.bash_profile

export PATH="/usr/local/bin:/usr/local/sbin:$PATH"

et ensuite le démarrer réellement

launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

Fin et… Heureusement !

Il faut maintenant faire les quelques vérifications :

lsof -Pni4 | grep LISTEN | grep php

doit renvoyer
php-fpm   39734 nom-utilisateur    9u  IPv4 0x3e6721029e81d0c5      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   39735 nom-utilisateur    0u  IPv4 0x3e6721029e81d0c5      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   39736 nom-utilisateur   0u  IPv4 0x3e6721029e81d0c5      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   39737 nom-utilisateur    0u  IPv4 0x3e6721029e81d0c5      0t0  TCP 127.0.0.1:9000 (LISTEN)

puis vérifications de la version de php et php-fpm :

php -v

php-fpm -v

qui doit renvoyer une chose du genre :

PHP 5.6.20 (fpm-fcgi)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

 

terminé !


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

18 − seize =