У меня дома есть сервер под управлением Ubuntu 13.10, настроенный как веб-сервер и git-репозиторий. Если я отправляю свой проект из моей системы на сервер, выполняется перехват после получения, который перемещает файлы (проект Symfony2) в правильный корневой каталог виртуального сервера.
Одна из причин, по которой я это делаю (хостинг на своем собственном сервере), заключается в том, что я хочу больше узнать о лучших практиках в хостинге серверов.
Я захожу на свой git-сервер через SSH как пользователь git, у которого есть разрешение на git-репозитории в /opt /git (некоторые руководства рекомендуют делать это таким образом). Оболочка для пользователя git установлена в /usr /bin /git-shell.
Мой веб-сервер - nginx, работающий от имени пользователя «www-data». Я считаю, что это настройка по умолчанию, поскольку я ее не настраивал.
У меня сейчас проблема в том, что после развертывания пользователя www-data и моего собственного пользователя (tim) нет разрешения на запись в каталог кэша, что приводит к сбою Symfony.
Причина, по которой мой пользователь (tim) вовлечен, заключается в том, что у проекта есть cronjob, который я настроил в своей учетной записи, что может быть не самой лучшей идеей.
Также по какой-то причине разрешения по умолчанию для кэша / каталога после коммита
drwxr-xr-x 4 git git 4096 Jul 29 09:33 cache
Итак, насколько мне известно, это означает, что только пользователь git может создавать файлы / каталоги внутри папки кэша.
Теперь я могу придумать 101 способ решения этой проблемы, но меня больше интересует правильный / намеченный способ решения моей проблемы.
Должен ли я каким-то образом создать файлы для пользователя www-data и запустить cronjobs от имени того же пользователя?
- Это кажется сложным, потому что я не думаю, что пользователю git разрешено «передавать файлы кому-то другому»
Должен ли я найти способ запуска ловушки после получения от имени другого пользователя www-data или tim?
Какому пользователю следует запускать мой cronjob? Это может быть просто Тим? или это должен быть пользователь 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, потому что каталог кэша удаляется каждый раз.