implantar projeto git e problema de permissão

3

Eu tenho projetos hospedados com gitolite em meu próprio servidor, e gostaria de implantar o projeto inteiro do repositório bare de gitolite para o local acessível do apache, pelo gancho post-receive.

Eu tenho o próximo conteúdo de gancho

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"

o gancho não pode ser concluído sem nenhuma mensagem de erro.

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

significa que o git não tem o direito de fazê-lo.

O caminho de origem do git é /var/lib/gitolite/project.git/ , que pertence a gitolite:gitolite

E com essas permissões, o redmine (que está trabalhando com o usuário do www-data) não pode alcançar o repositório git para buscar todas as alterações

O projeto inteiro deve ser colocado aqui: /var/www_virt.hosting/domain_name/htdocs/ , que pertence a www-data:www-data .

Quais mudanças eu devo fazer para trabalhar apropriadamente no gancho pós-recebimento no git e redimir com o repositório?

o que eu fiz é:

# 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ão ajudou.

Eu não quero ter nenhum problema para trabalhar com o apache (para visualizar o projeto), redimir para ler arquivos de origem para o projeto (sob git) e git (fazendo deploy para o caminho acessível de www-data)

o que devo fazer?

    
por nixer 30.04.2012 / 13:10

2 respostas

0

Estes são problemas típicos de permissões. As soluções estão sempre um pouco sujas, já que implicam em fazer alterações em um sistema de arquivos em execução. Quaisquer opções possíveis que você tenha:

  1. Permissões para todos no servidor http document_root

  2. Executar como sudo ações pós-recebimento

  3. Altere as permissões para o document_root do servidor http sob demanda, por exemplo. quando dentro de post-receive. Para tal opção é comum usar:

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

por 23.05.2012 / 22:45
0

Posso fazer uma sugestão ligeiramente diferente? Em vez de fazer um checkout git para o dir, tente um arquivo git? Em seu gancho faça:

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

Note que você pode definir o umask na variável de configuração tar.umask git.

A partir de sua descrição, não estou totalmente claro sobre quem é o gancho, mas essa abordagem pode simplificar as coisas.

    
por 04.12.2012 / 18:00