我已经在本地和服务器上设置了 Git,并创建了一个“post-receive”钩子,以便当我将代码推送到生产服务器时,它会自动检出到网站的虚拟主机目录。
#!/bin/sh
GIT_WORK_TREE=/var/www/domainname/public_html/ git checkout -f
然而,当我尝试进行推送时,它成功地推出了主分支,但是在尝试在我的服务器Web根目录上创建这些文件时,我遇到了权限被拒绝的错误。
例如:
remote:error:unable to create file index.php(Permission denied)
由于我设置了服务器的方式,这些错误对我来说实际上是有道理的。我禁用了root访问,并创建了一个新用户,通过visudo将其添加到sudoers中 - 然后为此用户设置了SSH密钥。我使用这个用户将我的git更改推送到服务器。问题是,我相信连接以进行推送的该用户没有写入虚拟主机目录的权限。这些文件夹中的所有文件都由www-data(我的nginx用户)拥有,具有相同的组。
解决方案是什么?创建另一个用户并使用SSH密钥进行连接,只为git提供更高的权限,或者有没有一种方法授予post-receive类似于sudo的能力?
非常抱歉问题描述得很冗长,但我想要绝对明确我所做的事情。