如何设置“git Push Remote Master”自动更新生产网络服务器上的文件?

如何设置“git Push Remote Master”自动更新生产网络服务器上的文件?

我的网站在带有 Gunicorn/nginx 的远程服务器上运行。 nginx 从 /var/www 目录运行,其所有者为 root:www-data

drwxrwxr-x  5 root      www-data  4096 Apr  8 17:32 www

我在 /var/gitrepo 中还有一个裸 git 存储库,如下所示

drwxrwxr-x  7 django django 4096 Apr  8 23:20 gitrepo

django 用户是 sudo 组的成员,但不是 www-data 组的成员。服务器上没有其他用户具有登录 shell。

然后我在 /var/gitrepo/hooks/post-receive 中有 post-receive git hook,如下所示

#!/bin/sh
git --work-tree=/var/www --git-dir=/var/gitrepo checkout -f

想法是,当我git push ssh://django@<site_IP>:/var/gitrepo master从笔记本电脑运行时,存储库被推送到 gitrepo 目录,然后 /var/www 将通过 post-receive 挂钩接收更新的文件。

上面的post-receive钩子自然会失败,因为 django 用户没有权限在 /var/www 目录中创建目标目录。我能想到的一种解决方案是将 django 用户添加到 :www-data 组。这对安全有什么影响?我还可以让 django 成为 /var 和 /var/www 的所有者。但这对于 django 用户来说可能权限过多。

编辑:如果我将 django 用户添加到 www-data 组,那么新的 git repo 文件将正确复制到 /var/www 目录,并且网站可以正常工作。我只是不知道这是否会造成安全问题。

我应该怎么办?谢谢

相关内容