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 :)

1 réponse


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...