git push 후 파일 소유권 문제

git push 후 파일 소유권 문제

집에 웹 서버와 git 저장소로 구성된 Ubuntu 13.10을 실행하는 서버가 있습니다. 내 프로젝트를 내 시스템에서 서버로 푸시하면 파일(Symfony2 프로젝트)을 올바른 가상 서버의 웹 루트로 이동하는 수신 후 후크가 실행됩니다.

내가 이 일을 하는 이유 중 하나는 서버 호스팅의 모범 사례에 대해 더 많이 배우고 싶기 때문입니다.

/opt/git에 있는 git 저장소에 대한 권한이 있는 사용자 git으로 SSH를 통해 내 git 서버에 푸시합니다(일부 가이드에서는 이 방법을 권장함). git 사용자의 쉘은 /usr/bin/git-shell로 설정됩니다.

내 웹서버는 'www-data' 사용자로 실행되는 nginx입니다. 저는 이것을 구성하지 않았기 때문에 이것이 기본 설정이라고 생각합니다.

지금 내가 겪고 있는 문제는 www-data 사용자와 내 사용자(tim)를 배포한 후 캐시 디렉터리에 쓸 수 있는 권한이 없어 Symfony가 충돌한다는 것입니다.

내 사용자(tim)가 관련된 이유는 프로젝트에 내 사용자 계정에 내가 설정한 cronjob이 있기 때문인데, 이는 최고의 아이디어가 아닐 수도 있습니다.

또한 어떤 이유로 커밋 후 캐시/ 디렉터리에 대한 기본 권한은 다음과 같습니다.

drwxr-xr-x 4 git git  4096 Jul 29 09:33 cache

따라서 내가 아는 한 이는 git 사용자만이 캐시 폴더 내에 파일/디렉터리를 만들 수 있다는 것을 의미합니다.

이제 이 문제를 처리하는 101가지 방법을 생각할 수 있지만 문제를 해결하는 올바른/의도된 방법에 더 관심이 있습니다.

  • 어떤 방식으로든 파일을 www-data 사용자에게 chown하고 동일한 사용자로 cronjob을 실행해야 합니까?

    • git 사용자가 "다른 사람에게 파일을 제공"하는 것이 허용되지 않는다고 생각하기 때문에 이것은 복잡해 보입니다.
  • 다른 사용자 www-data 또는 tim으로 수신 후 후크를 실행하는 방법을 찾아야 합니까?

  • 내 cronjob을 어떤 사용자로 실행해야 합니까? 팀만 그럴 수 있나요? 아니면 www-data 사용자여야 합니까? (또는 신이 루트를 금지함)

이것은 내 수신 후 스크립트의 내용입니다. (일부 웹사이트에서 발견했는데 어떤 웹사이트인지 기억이 나지 않습니다.)

#!/bin/sh
# 
## store the arguments given to the script
read oldrev newrev refname

## Where to store the log information about the updates
LOGFILE=./post-receive.log

# The deployed directory (the running site)
DEPLOYDIR=/var/www/project.timfennis.com

##  Record the fact that the push has been received
echo -e "Received Push Request at $( date +%F )" >> $LOGFILE
echo " - Old SHA: $oldrev New SHA: $newrev Branch Name: $refname" >> $LOGFILE

## Update the deployed copy
echo "Starting Deploy" >> $LOGFILE

echo " - Starting code update"
GIT_WORK_TREE="$DEPLOYDIR" git checkout -f
echo " - Finished code update"

echo " - Starting composer update"
cd "$DEPLOYDIR"; composer update; cd -
echo " - Finished composer update"

echo "Finished Deploy" >> $LOGFILE

캐시 디렉토리가 매번 삭제되기 때문에 작곡가가 내 파일 권한을 755로 재설정한 사람이라고 확신합니다.

관련 정보