У меня есть сервер дома, работающий под управлением 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, поскольку каталог кэша каждый раз удаляется.