Выполнение команд git через php через http

ОС - Ubuntu 14.04

Я работаю над развертыванием, используя GIT webhooks для него.

Я добавил ключи развертывания в GIT repo, и теперь я хочу запускать команду git pull origin master, когда нажатие происходит из моего локального репо.

Это test.php файл, который я вызываю через браузер:

<?php       
    //echo "THis is a test file on a test repo for testing the deploy functionality using github webhooks!!!!";
    echo exec('whoami');
    echo exec('sh -x /var/www/proj/test/git.sh');
?>

Это файл оболочки git.sh:

#!/bin/bash
cd /var/www/proj-dir/test
git pull origin master

Когда я запускаю это на терминале с помощью php test.php, я получаю правильный результат, как ожидалось:

 ubuntu From github.com:repo/test
 * branch            master     -> FETCH_HEAD
 Already up-to-date.

ubuntu для whoami, за которым следует вывод git pull.

Теперь, когда я вызываю тот же http://example.com/test.php через браузер, он показывает пользователя или whoami вывод как www-data, который является пользователем apache, но я попробовал обновить разрешения для файла php для выполнения и меняя пользователя на www-data, но не работает.
проверял журналы apache, и когда я выполняю через браузер, я получаю ошибку разрешения

  Please make sure you have the correct access rights and the repository exists. + cd /var/www/proj/deploy-test + git pull origin master 

Ошибка проверки ключа хоста. fatal: Не удалось прочитать из удаленного репозитория. Убедитесь, что у вас есть правильные права доступа и существует репозиторий.

Какие обновления мне нужно сделать, чтобы файл работал через запрос браузера?

Если мне нужно обновить файл sudoers, какие обновления должны быть?

Обновление
Я добавил ключи .ssh в директорию var/www/, поскольку это является домом для пользователя apache. Но я все еще получаю

git pull origin master
error: cannot open .git/FETCH_HEAD: Permission denied

Также я добавил строку для пользователя www-data для выполнения файла sh.

 www-data ALL=(anthony) NOPASSWD: /var/www/mysite/vendor/tmd/auto-git-pull/scripts/git-pull.sh

Ссылка здесь Все еще не удача
Обновлены разрешения для папки .git для пользователя www-data​​p >

sudo chown www-data:www-data /var/www/proj/test/.git

Ответ 1

Это не проблема PHP, а проблема с конфигурацией git. git настроен правильно для пользователя ubuntu, а не для пользователя www-data.

Вы можете попытаться заставить PHP запускать что-то как ubuntu, но это не кажется простым и правильным. Я бы предложил настроить git правильно для пользователя www-data.

Я подозреваю, что вы можете воспроизвести проблему, запустив терминал:

# become www-data user
sudo su www-data
# actions from your git.sh file
cd /var/www/proj-dir/test
git pull origin master

После проверки у вас действительно есть сценарий воспроизведения, вы можете попытаться исправить проблему для пользователя www-data.

Скорее всего, существует разница между выходом git config --list при запуске в качестве пользователя. Для получения дополнительной помощи по этому поводу см. https://git-scm.com/book/en/Getting-Started-First-Time-Git-Setup

Возможно, это связано с тем, что проблемы с правами на доступ к файлам или прав собственности вызывают проблемы. Чтобы исключить, я предлагаю вам использовать git clone ... как пользователь www-data для создания нового клона и рабочей копии по другому пути в вашей файловой системе. Затем снова посмотрите, если git pull теперь работает так, как ожидалось.

В любом случае вы можете оставить свою рабочую копию www-data (независимо от проблем с разрешением). Это также помешает иметь дело с возможными незафиксированными изменениями в рабочей копии, которые приводят к проблемам слиянием. Обработка этих автоматически/без присмотра с PHP/git.sh может быть громоздкой.

Предлагаемый рабочий процесс будет следующим: развить ubuntu в текущем рабочем каталоге и add/commit/push ваши изменения. Тогда PHP сделает pull как сам (как www-data).