Предоставление PHP разрешения сделать git pull-запрос
Я хотел бы разрешить PHP выполнять команду Git pull. Но есть некоторые проблемы с пользователем и разрешениями. Как вы решили проблему?
PHP работает как пользовательские www-данные. Поэтому я изменил владельца / группы каталогов.git на www-data (chown www-data:www-data -R .git
). Как выяснилось позже, www-data не имеет ключей SSH. Это хорошая идея, чтобы дать ему один? Если да, где разместить? Или можно разрешить ему использовать определенный ключ.
С наилучшими пожеланиями, Бернд
3 ответа
Как часто вы должны делать тянуть? Вы можете сделать cronjob (каждые 30 минут или около того) для вашего пользователя git, который проверяет определенный файл. Если этот файл имеет 1 или в нем, он делает тянуть. Вы можете предоставить доступ к этому файлу своему пользователю git и своему пользователю www-data. PHP записывает 1 в файл -> cronjob (запись в crontab пользователя git) проверяет наличие 1 в файле -> cronjob очищает 1 -> git делает pull -> и т. Д. Это безопасный способ с небольшой задержкой (цикл cronjob). PS: не забыл очистить 1.
Если бы это был я, я бы сделал примерно то же самое, но я бы запустил задание cron в качестве пользователя root или другого использования в системе, имеющей доступ к оболочке. Я думаю, что главная причина того, что www-данные не могут ничего сделать, заключается в том, что они не имеют доступа к оболочке. Точно так же, как сказал DrDol, время от времени запускайте задание cron, что позволит git pull свободно перезаписывать ваш последний запрос новым, если вы получаете ошибки, потому что вы делаете запрос страницы в середине pull, это может Лучше всего, чтобы каждое нажатие входило в папку, а затем эта папка переименовывалась в папку, с которой работает www-data, сразу после того, как эта папка переименовывается во что-то другое, а затем удаляется после переименования нового рабочего каталога.
Я бы посоветовал вам предоставить пользователю www-data собственную копию git-репо и собственный SSH-ключ. Затем вы можете использовать Gitolite (или аналогичный), чтобы убедиться, что он имеет доступ только для чтения к репо. Предоставление доступа к первичному репо на основе www-данных - не очень хорошая идея.