【问题标题】:Remotely Installing Websites Using Git with Nginx使用带有 Nginx 的 Git 远程安装网站
【发布时间】:2012-09-14 18:35:18
【问题描述】:

我已按照此site 中列出的示例远程将我的文件添加到我的服务器,但是,我希望拥有nginx:nginx 用户:组拥有的所有文件,以便我可以访问这些文件推送文件后从我的浏览器中。

如何修改post-receive 挂钩,使nginx:nginx 成为推送到远程“ubuntu”服务器的文件/文件夹的所有者?

我尝试了以下 post-receive 钩子,但是,如果正在修改文件,我收到错误:remote: error: unable to unlink old 'index.html' (Permission denied),此处为 shell 脚本:

#!/bin/sh
GIT_WORK_TREE=/var/www/www.foo.com/htdocs
export GIT_WORK_TREE
git checkout -f
exec sudo chown -R nginx:nginx $GIT_WORK_TREE

提前感谢您的帮助!

【问题讨论】:

    标签: git nginx amazon-ec2


    【解决方案1】:

    这通常是进程未释放这些文件的结果(阻止 git checkout 完成其工作),如“Git Checkout warning: unable to unlink files, permission denied”中所述。

    但这也可能是您的sudo 命令成功运行一次的结果,从而使您的挂钩以后的任何执行都失败,因为它不再有权以“git”用户的身份签出。

    如果是这种情况,你的钩子应该 sudo 作为 nginx:nginx 你当前的 git 命令,而不是 chown 最终结果(网络工作树)。


    OP 确认:

    在 git post-receive 钩子中,我现在有 exec sudo -u nginx -g nginx ~/test.shtest.sh 包含上面的 GIT_WORK_TREE 内容)。
    但是,我收到另一个权限错误:remote: fatal: Unable to create '/home/ubuntu/foo.git/index.lock': Permission denied
    运行~/test.sh后,需要回到ubuntu:ubuntu吗?

    我建议:

    将您的回购声明为“shared by all”,如“Using Git without Sudo in many accounts”。

    这似乎解决了问题:

    我根据提到的帖子将配置设置为shared=true,它现在似乎可以工作了。

    【讨论】:

    • 感谢 VonC 的回复。我已将htdocs 文件夹更改回ubuntu:ubuntu,当我更改本地计算机上的index.html 文件时,我先git add . 然后git commit -m "blah" 然后git push web,更改是对远程服务器在/var/www/www.foo.com/htdocs/,但所有者仍然是ubuntu:ubuntu。如何将服务器上文件的所有权更改为nginx:nginx?这是 git hook 可以做的事情吗?再次感谢。
    • @rs77 我的意思是让你以nginx:nginxsudo 执行脚本,以便git checkoutnginx:nginx 执行。所以你的钩子将只包含一行,sudo 命令将调用 another 脚本(检查文件),但使用正确的最终用户调用它。
    • 再次感谢 VonC,在 git post-receive 钩子中我现在有 exec sudo -u nginx -g nginx ~/test.sh(test.sh 包含上面的 GIT_WORK_TREE 内容),但是,我得到另一个权限错误:@987654355 @。运行~/test.sh 后是否需要返回ubuntu:ubuntu?再次感谢您的帮助。
    • 您可能有另一个sudo 在您sudo 之前(仍在您的钩子中),以便在结帐之前将/home/ubuntu.foo.git(以及那个目录)保护为nginx:nginx。然后添加第三个sudo您原来的sudo 之后,以保护.git repo 目录回到ubuntu:ubuntu
    • 那或声明你的回购为“所有人共享”:stackoverflow.com/questions/1367258/…
    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2015-12-08
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多