Bonjour,
Avec Symfony 2.7, j'utilise Capistrano pour mettre à jour mon projet. Seulement, à chaque mise à jour, j'ai énormément de soucis avec les Chmod de mes répertoires "logs" et "cache". Visiblement, je n'ai aucun droit dessus. J'aimerais donc appliquer des chmod 0777 lors de la mise à jour.
Après quelques recherches, il faut visiblement que j'installe ACL sur mon serveur, ce que j'ai fait ; un peu au hasard (j'ai trouvé vraiment très très peu de tutoriels sur ça), j'ai fait les commandes suivantes :
sudo setfacl -R -m u:www-data:rwx -m u:myuser:rwx app/cache app/logs
sudo setfacl -dR -m u:www-data:rwx -m u:myuser:rwx app/cache app/logs
Mais bon, bien que les commandes soient bien passées, mes mises à jour ne fonctionnent toujours pas ... j'admet ne pas être très serein dans ce que je fais vu que je connais assez peu les droits et encores moins ACL.
SI quelqu'un pouvait m'aider ce serait sympa :)
Merci d'avance :)
Les ACL, il n'y a rien de bien compliqué. Sous Capistrano, génère une nouvelle task
qui s'éxécutera uniquement avant le deploy:publishing
:
namespace :deploy do
after "deploy:updated" , "composer:install"
# Clear ACL only before switching version
before "deploy:publishing" , "symfony:fixes_acl"
end
namespace :symfony do
desc "Add ACL on cache directory"
task :fixes_acl do
on roles :web do
execute :setfacl, "-R -m u:www-data:rwX #{fetch(:release_path)}/app/cache #{fetch(:release_path)}/app/logs"
end
end
end
Je ne te conseilles pas d'utiliser les ACL par défaut, à savoir cette commande :
sudo setfacl -dR -m u:www-data:rwx -m u:myuser:rwx app/cache app/logs
Seulement celle affectant l'utilisateur suffit, donc tu dois juste effectuer un sudo setfacl -R -m u:www-data:rwX app/cache app/logs
. Ton utilisateur perso n'a pas besoin d'avoir les droits étant donné que tu déploies ton code par Capistrano. L'utilisateur qui déploie aura donc forcément les droits sur les répertoires étant donné que c'est lui qui doit lancer un composer install
. De ce fait, l'ACL te permet d'assigner d'autres permissions que celles mises par défaut (si tu suis les normes Capistrano, ton utilisateur qui publie doit être deploy
, donc l'utilisateur deploy
a droit de lecture, écriture et exécution sur tes dossiers, alors que www-data
non. Donc tu veux que deploy
et www-data
aient les mêmes droits, ce qui justifie l'utilisation des ACL). Une autre solution sera de faire un chown -R www-data
sur les dossiers mais lors de la suppression des vieilles release
, tu auras une erreur lors du rm
étant donné que deploy
ne sera plus titulaire du dossier.
J'espère avoir été assez clair dans mes explications...