ОС — 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
Кажется, это не проблема 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
).
Других решений пока нет …