Проблемы с владением файлами после git push

Проблемы с владением файлами после git push

У меня есть сервер дома, работающий под управлением Ubuntu 13.10, настроенный как веб-сервер и репозиторий git. Если я отправляю свой проект из своей системы на сервер, выполняется post-receive hook, который перемещает файлы (проект Symfony2) в правильный веб-корень виртуального сервера.

Одной из причин, по которой я это делаю (размещаю свой собственный сервер), является то, что я хочу узнать больше о передовых методах хостинга серверов.

Я отправляю данные на свой сервер git через SSH как пользователь git, у которого есть разрешение на репозитории git в /opt/git (некоторые руководства рекомендуют делать это именно так). Оболочка для пользователя git установлена ​​на /usr/bin/git-shell.

Мой веб-сервер — nginx, работающий от имени пользователя «www-data». Я полагаю, что это настройка по умолчанию, поскольку я ее не настраивал.

Проблема, с которой я столкнулся сейчас, заключается в том, что после развертывания пользователь www-data и мой собственный пользователь (tim) не имеют прав на запись в каталог кэша, что приводит к сбою Symfony.

Причина, по которой мой пользователь (Тим) участвует в проекте, заключается в том, что я настроил cronjob в своей учетной записи, что, возможно, не самая лучшая идея.

Также по какой-то причине разрешения по умолчанию для каталога cache/ после фиксации

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

Насколько мне известно, это означает, что только пользователь git имеет право создавать файлы/каталоги внутри папки кэша.

Сейчас я могу придумать 101 способ решения этой проблемы, но меня больше интересует правильный/преднамеренный способ решения моей проблемы.

  • Должен ли я каким-то образом передать файлы пользователю www-data и запускать задания cron от имени того же пользователя?

    • Это кажется сложным, потому что я не думаю, что пользователь git имеет право «передавать файлы кому-то другому».
  • Должен ли я найти способ запустить хук post-receive от имени другого пользователя www-data или tim?

  • От имени какого пользователя должен запускаться cronjob? Может ли это быть просто tim? или это должен быть пользователь www-data? (или не дай бог root)

Это содержимое моего скрипта после получения (я нашел его на каком-то сайте, не помню на каком)

#!/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

Я почти уверен, что именно Composer сбрасывает права доступа к моим файлам до 755, поскольку каталог кэша каждый раз удаляется.

Связанный контент