Un problème récurrent pour beaucoup de développeurs utilisant Symfony est l’éternel conflit avec l’utilisateur “www-data” lors des accès, par exemple, aux fichiers du cache et aux logs. Sur Symfony 2 ce problème devient encore plus visible avec l’utilisation massive du répertoire cache même en environnement “dev”. Le cas de conflit le plus flagrant est certainement le app/console cache:clear
qui renvoie une erreur car le cache a été généré par www-data lors du chargement du site par apache. Le bon gros sudo rm -rf app/cache/*
n’est pas une solution acceptable, tout juste une rustine. Il existe différents moyens d’éviter ces conflits, que ce soit via scripts personnalisés, configurations avancées, ou packages additionnels. SuPHP est un module pour Apache très facile à mettre en place pour un environnement de “dev”, et il va répondre à notre problème d’une manière très simple: Apache ne va plus éxécuter les sites via ‘www-data’, mais via l’utilisateur propriétaire des fichiers éxécutés, c’est-à-dire le plus souvent le compte du développeur. L’installation comprend deux packages dispos sur synaptic ou directement depuis la console:
sudo apt-get install suphp-common libapache2-mod-suphp
Pour une station de dev, une configuration fonctionnelle et simple est très bien décrite sur http://doc.ubuntu-fr.org/suphp#installation_de_suphp. Cette configuration empêche l’intervention de suphp dans les répertoires de /usr/share pour permettre entre autres à phpmyadmin (dans son emplacement par défaut) de continuer à fonctionner sans problèmes. Il faudra éventuellement supprimer les fichiers de sessions en cours appartenent encore à www-data (dans /var/lib/php5 par défaut). Si vos projets ne sont pas stockés dans les répertoires /var/www ou ~/public_html, il faut éditer la valeur de “docroot” dans /etc/suphp/suphp.conf pour y ajouter les répertoires supplémentaires. Par exemple, mes projets sont dans ~/www/ :
docroot=/var/www:${HOME}/public_html
devient alors:
docroot=/var/www:${HOME}/public_html:${HOME}/www
Pensez à nettoyer vos fichiers appartenant encore à www-data (cette fois avec des sudo rm
par contre), comme les répertoires cache et logs, et redémarrez simplement Apache (sudo service apache2 restart
). Après ça vous ne devriez plus voir de www-data dans vos projets, et vous pourrez oublier ce mauvais réflexe du sudo rm -rf
à tout bout de champ !