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