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

Проверка ключа хоста не удалась. Неустранимый: Не удалось прочитать из удаленного хранилища. Пожалуйста, убедитесь, что у вас есть правильные права доступа и хранилище существует.

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

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

Обновить
Я добавил .ssh ключи к var/www/ dir как дом для пользователя 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

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

5

Решение

Кажется, это не проблема PHP, а проблема с git config. 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).

0

Другие решения

Других решений пока нет …