2012-10-25 165 views
4

还没有能够解决这个问题呢..我已经看到了一些答案,但没有一个帮助。允许Apache执行git pull

我正在尝试使用Github Webhooks让github在我的服务器上创建一个url并让服务器在该命中后立即下拉新提交的项目。我有以下的PHP脚本:

<?php `git pull [email protected]: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的公钥和相同的结果复制到一起。

+0

在sudoers中使用apache用户?它的git sudo正在运行(通过PHP),而不是git-hook.php – didster

+0

产生相同的结果。不知道我理解你的评论的最后一部分“其git sudo运行(通过PHP),而不是git-hook.php” – Peter

+0

我的意思,而不是运行PHP作为根运行混帐,运行PHP作为Apache运行混帐作为根(所以你需要编辑sudoers中的'/ var/www/html/git-hook.php'行)。任何在apache错误日志中流失更多的东西? – didster

回答

3

改变你的PHP通过sudo

<?php `sudo git pull [email protected]:my-user/myrepo.git`; ?> 

然后运行git改变你suoders允许混帐到由Apache用户运行

apache ALL = NOPASSWD: /usr/bin/git 
+0

如果git pull命令必须以apache用户身份运行,它将如何授权,因为ssh auth只在您从各个用户执行某些操作时才起作用? – SenG

0

我这样做的开发网站 - 我wouldnt建议这个prd网站,虽然我不能想到任何特别危险的事情提供的脚本不带参数..

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

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

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

在项目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