使www数据推送到本地git仓库

时间:2012-06-21 05:49:19

标签: php linux git drupal hosting

所以,我正在创建一个系统来管理位于特定文件夹中的所有drupal网站(可以在此文件夹中创建新网站)。

下一步是创建一种方法,允许用户将网站还原为先前版本。

我的解决方案?创建一个本地“git服务器”,并为我的系统上的每个操作(例如:更新/安装模块,升级核心等)创建该网站的新版本。

我创建了一个“git”用户,负责在/~/gitrepos/上创建存储库。对于每个新网站,我在apache用户(www-data)中使用sudo -u git来运行mkdirgit init --bare。我现在能够创建新文件夹并在那些文件夹上初始化git存储库。

但是当我尝试将网站更改推送到这些存储库时,我得到“权限被拒绝”。

检测到新网站时,我会执行以下操作:

  1. 使用www-data和sudo -u git创建存储库
    • mkdirgit init
  2. 在网站目录[使用www-data]初始化git存储库(.git文件夹)
    • git init
  3. 将文件添加到提交队列[使用www-data]
    • git add *
  4. 提交更改以填充新创建的存储库[使用www-data]
    • git commit -m 'msg'
  5. 添加存储库的远程地址[使用www-data]
    • git remote add origin ssh://git@localhost/path/to/repo/
  6. 推送更改[使用www-data]
    • git push -u origin master
  7. 现在我坚持这一步,因为我总是得到“许可被拒绝”。

    我有什么方法可以将更改推送到本地“git服务器”而无需进行身份验证?

    或者,我应该创建哪些ssh-keys以使www-data能够将更改推送到本地“git服务器”?

    我真的迷失在这里,如果有人一步一步地设置本地“git服务器”,其中www-data用户可以推送,那就太棒了

    注意:www-data的主目录是/var/www/,因此将ssh-key存储在此目录中不是一个好主意


    是的,在问这里之前,我花了至少4个小时试图解决这个问题。

    我试图遵循的一些资源:


    我引用“git服务器”的原因是因为没有git 服务器这样的东西。

    引自http://blogs.gurulabs.com/aaron/2008/11/setup-a-git-repository.html

      

    换句话说,没有“git服务器”和“git客户端”这样的东西。 Git是由文件系统开发人员开发的,其中考虑了文件系统属性。所以,相反,我们有一个远程Git存储库,我们称之为“origin”和本地Git存储库(...)

1 个答案:

答案 0 :(得分:1)

解决方案:

<强>假设:

  • 您的www-data主目录为/var/www/
  • 将处理所有git命令的用户是gituser

<强>步骤:

要使www-data用户将更改更改为git repo而无需输入密码,只需:

  • 为www-data用户创建一个新的ssh-key
    • www-data:~$ ssh-keygen -t rsa
    • enter查看每个问题(保留密码为空白)
  • 将新创建的ssh-key添加到/home/gituser/.ssh/authorized_keys
    • gituser:~$ touch ~/.ssh/authorized_keys
    • gituser:~$ chmod 0600 ~/.ssh/authorized_keys
    • gituser:~$ cat /var/www/.ssh/id_rsa.pub >> /home/gituser/.ssh/authorized_keys

背后的想法是将www-data的ssh-key添加到gituser的“受信任”密钥。之后,www-data将能够通过ssh连接到服务器并进行身份验证gituser,而无需输入密码。

请记住,git需要ssh访问服务器(至少在我所处的环境中)。

这可能会有所帮助:http://www.linuxproblem.org/art_9.html