Twitter Facebook Google Plus Linkedin email

  Format .pdf

Serveur nginx php mysql sur raspbian pour Symfony2

Comment monter un serveur nginx php mysql sur une Raspberry pi (raspbian) et l'optimiser pour faire tourner Symfony2?

Se logger en root

Commencer par vous logger en root (sinon ajouter sudo devant chaque ligne de commandes).

Pour activer le compte root sur la Raspberry pi, il faut simplement ajouter un mot de passe, se connecter avec pi et faire :

sudo passwd root

Par soucis de performance, je vous conseille de ne surtout pas lancer X au démarrage du Raspberry pi.

Pour supprimer le lancement de l'interface graphique au démarrage faites :

sudo raspi-config

Selectionner « Enable Boot to Desktop/Scratch» et choisir console text console (l'interface et la façon d'écrire changent souvent selon les versions de Raspbian)

J'ai d’ailleurs supprimé l'interface graphique car ça prend de la place inutilement.
(On trouve facilement des scripts qui font ça en cherchant un peu).

Pour les nouvelles versions de Raspbian Apache est installé d'origine, j'ai fait des tests de performance avec les 2 et je vous conseille d'utiliser plutôt nginx car le Raspberry n'est pas très puissant, les performances sont meilleures sur nginx.

Pour supprimer Apache

L’arrêter

/etc/init.d/apache2 stop

Il y a des liens symboliques dans /etc/rc*.d qui lancent Apache au démarrage.

Pour les lister faire

find /etc/rc*.d -name *apache*

Ensuite faire cette commande pour les supprimer (il n'y a pas de lien entre la commande ci-dessus c'était pour vérifier)

update-rc.d -f apache2 remove

Installer nginx php et mysql

aptitude install nginx php5-fpm php5-mysql mysql-server mysql-client

Configuration de Nginx

Vous pouvez travailler directement dans default, car il s'agit d'un site Symfony qui s’installe généralement seul sur un serveur (déjà bien lourd pour une Raspberry pi), donc à mon sens pas besoin de créer d'autres sites ou d'autres configurations.

Si vous ne voulez pas travailler dans la configur ation par défaut il faudra faire un lien symbolique de votre nom de fichier de configuration dans site sites-enabled pour mon exemple la config serait le fichier symfony

ln -s /etc/nginx/sites-available/symfony /etc/nginx/sites-enabled/symfony

Et dans ce cas il faut supprimer la configuration par defaut dans /etc/nginx/sites-enabled

rm default

Si nous travaillons dans le dossier default

nano /etc/nginx/sites-available/default

Voici le contenu du fichier

server  
{  
# tout ce qui passe par le port 80  
listen 80;  

# nom du serveur  
server_name localhost;  

# racine des fichiers  
root /var/www/symfony/web/;  

# en environnement de prod, invoquer le contrôleur app.php  
/page/curriculum-vitae app.php;  

# servir le fichier si il existe, sinon invoquer une réécriture  
try_files $uri $uri/ @php;  

# comment réécrire ?  
location @php  
{  
rewrite ^/(.*)$ /app.php/$1;  
}  

# exécution des fichiers PHP  
location ~ \.php  
{  
include fastcgi_params;  
fastcgi_pass unix:/var/run/php5-fpm.sock;  
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
}  
}

Vous pouvez copier votre projet Symfony directement dans /var/www/
S'il n'y a pas de dossier créer le repertoire /var/www

mkdir www

Moi je fais la copie via ssh dans le dossier de l'utilisateur pi, je fais donc un lien symbolique qui pointe dans le répertoire /var/www/. Voici la commande pour faire le lien :

ln -s /home/pi/symfony /var/www/symfony

Installer php5-cli pour pouvoir exécuter PHP en ligne de commande

aptitude install php5-cli

Je vous invite a redémarrer nginx et fpm pour tester la configuration.

service nginx restart  
service php5-fpm restart

Vérifier la configuration de Symfony.

cd /var/www/Symfony/app  
php check.php

Il faudra résoudre les erreurs.

Installer php5-intl

aptitude install php5-intl

Installer php5-apc

aptitude install php-apc

Connectez-vous sur l’adresse Ip de votre raspberry pi.
pour la connaître tapez la commande:

ifconfig

Taper l'adresse suivante dans votre navigateur.

http://votreIp/

Votre site doit s'afficher.

Si ce n'est pas le cas commencez par supprimer le cache de production.

Dans le dossier de votre site faire la commande:

php app/console cache:clear --env=prod

Si tout fonctionne correctement faire les commandes suivantes pour ajouter php5-fpm et nginx au démarrage.

update-rc.d php5-fpm defaults  
update-rc.d nginx defaults

Régler les problèmes de droits dans app/cache et app/logs

setfacl -R -m u:www-data:rwx -m u:pi:rwx app/cache app/logs
setfacl -dR -m u:www-data:rwx -m u:pi:rwx app/cache app/logs

Voilà c'est terminé, j'ajouterai des optimisations prochainement avec l'utilisation de Varnish.