通过http

时间:2015-08-20 11:22:15

标签: php git github apache2 git-pull

OS - 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 shell文件:

#!/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/目录,因为这是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

参考here仍然没有运气
将.git文件夹的权限更新为www-data用户

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

1 个答案:

答案 0 :(得分:0)

这似乎不是PHP问题,而是git配置问题。为用户ubuntu正确配置了Git,而没有为用户www-data配置Git。

你可以尝试让PHP以ubuntu的形式运行,但这似乎不是最简单也不正确。我建议为www-data用户正确配置git。

我怀疑你可以通过在终端上运行来重现这个问题:

# 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)。