Выполнение команд 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-datap >
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
).