3 votes

déploiement du projet git et problème de permission

J'ai un projet hébergé avec gitolite sur mon propre serveur, et je voudrais déployer l'ensemble du projet à partir du dépôt nu de gitolite vers le lieu accessible d'apache, par un hook post-receive.

J'ai le contenu du prochain crochet

echo "starting deploy..."

WWW_ROOT="/var/www_virt.hosting/domain_name/htdocs/"

GIT_WORK_TREE=$WWW_ROOT git checkout -f

exec chmod -R 750 $WWW_ROOT
exec chown -R www-data:www-data $WWW_ROOT
echo "finished"

Le crochet ne peut pas être terminé sans message d'erreur.

chmod: changing permissions of `/var/www_virt.hosting/domain_name/file_name': Operation not permitted

signifie que git n'a pas le droit de le faire.

Le chemin de la source git est /var/lib/gitolite/project.git/ qui appartient à gitolite:gitolite

Et avec ces permissions, redmine (qui travaille sous l'utilisateur www-data) ne peut pas accéder au dépôt git pour récupérer toutes les modifications.

L'ensemble du projet devrait être placé ici : /var/www_virt.hosting/domain_name/htdocs/ qui appartient à www-data:www-data .

Quels changements dois-je faire pour que le hook post-receive fonctionne correctement dans git, et redmine avec le dépôt ?

ce que j'ai fait, c'est :

# id www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data),119(gitolite)
# id gitolite 
uid=110(gitolite) gid=119(gitolite) groups=119(gitolite),33(www-data)

n'est pas aidé.

Je veux avoir aucun problème pour faire fonctionner apache (pour voir le projet), redmine pour lire les fichiers sources du projet (sous git) et git (faire le déploiement vers le chemin accessible www-data).

que dois-je faire ?

0voto

grosshat Points 336

Il s'agit de problèmes typiques liés aux autorisations. Les solutions sont toujours un peu sales car elles impliquent de faire des changements sur un système de fichiers en cours d'exécution. En tout cas, vous avez des options possibles :

  1. Permissions pour tout le monde sur le serveur http document_root

  2. Exécuter en tant que sudo actions post-réception

  3. Changer les permissions pour le document_root du serveur http à la demande, c'est-à-dire lors de la post-recette. Pour cette option, il est courant d'utiliser :

    find $PUBLIC_WWW -type f -print0 | xargs -0 chmod 666
    find $PUBLIC_WWW -type d -print0 | xargs -0 chmod 777

0voto

mreggen Points 2940

Puis-je faire une suggestion légèrement différente ? Au lieu de faire un git checkout dans le répertoire, essayez un git archive ? Dans votre hook, faites :

git archive --format=tar | (cd $WWW_ROOT; tar xf -)

Notez que vous pouvez définir le umask dans la variable de configuration git tar.umask.

D'après votre description, je ne sais pas exactement sous quel nom le crochet est exécuté, mais cette approche pourrait simplifier les choses.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X