允许Apache执行git pull

时间:2012-10-25 20:36:48

标签: php git shell webhooks

还没有弄明白这一点..我已经看到了一些答案,但没有一个有帮助。

我正在尝试使用Github Webhooks让github在我的服务器上点击一个url并让服务器在命中时立即下拉新提交的项目。我有一个PHP脚本,包含以下内容:

<?php `git pull git@github.com:my-user/myrepo.git`; ?>

然而,点击时该脚本以用户apache运行,所以我尝试了:

chown -R apache:apache .

并且仍然有权限被拒绝错误。

然后我尝试编辑sudoers文件并更改以下内容:

Host_Alias      LOCAL=127.0.0.1
apache          LOCAL=NOPASSWD: /var/www/html/git-hook.php

但仍然无效。

如何实现这一目标?如果我跑:

 sudo php git-hook.php

它工作正常,所以php文件中的代码没有任何问题。我只想让它自动化。

有什么想法吗?

修改

我也忘了提。我甚至创建了一个文件夹/home/apache/.ssh并复制了git pull over的公钥,结果相同。

3 个答案:

答案 0 :(得分:3)

将您的PHP更改为通过sudo运行git

<?php `sudo git pull git@github.com:my-user/myrepo.git`; ?>

然后更改你的suoders以允许apit用户运行git

apache ALL = NOPASSWD: /usr/bin/git

答案 1 :(得分:1)

已经有Wrappers和库。也许你可以尝试其中一个: https://github.com/kbjr/Git.php和/或http://www.gitphp.org/projects/gitphp/wiki

答案 2 :(得分:0)

我为一个开发网站做了这个 - 我不建议这个prd网站,虽然我不能想到任何特别危险的它,只要脚本不采取参数..

我创建了一个执行git pull的php脚本。在Web浏览器中,我导航到该脚本,并自动部署由deisgners等推送的任何更改。 http://.../gitpullscript/gitpullscript.php

这可以通过创建apache用户拥有的git checkout来实现。您可以通过在文档根目录之外的某个位置创建属于apache用户的目录(在本例中为www-data)来完成此操作。然后将git克隆到该目录中,因此所有文件都属于www-data。然后将我想要的目录软链接到我的文档根目录中,以便可以通过Web浏览器访问它们。

www-data不在git组中,并且存储库已设置为每个人都可以读取(但不能写入)..因此,www-data可以拉动但不能推送

在项目heirarchy我创建了一个目录来保存gitpull脚本..我使用.htaccess来密码保护这个目录。 <?php exec('cd /var/www-data/projects/myrepo; git pull');

mkdir /var/www-data sudo chown www-data-www-data su www-data mkdir /var/www-data/projects cd /var/www-data/projects git clone my-repo