在EC2上设置Git以从GitHub repo中提取

时间:2011-10-20 07:39:27

标签: git github amazon-ec2

我对EC2和Git都不熟悉,我刚刚使用干净的Amazon Linux AMI设置了我的第一个EC2实例。我还安装了MySQL,Apache和PHP,并打开了一些端口,使其作为普通的Web服务器工作,同时响应弹性IP。

现在,我的代码在GitHub上的私有仓库上,我想通过执行git pull或类似的操作来执行简单的部署。 Git也已安装在服务器上。我知道我可以使用我的个人ssh密钥在服务器上设置我的git repo,但这看起来很奇怪。我想另一个解决方案是创建一个新的GitHub用户并在服务器上使用它,但它似乎也不正确。

如何以优雅,安全的方式实现这一目标?

2 个答案:

答案 0 :(得分:35)

为了避免在EC2实例上保留SSH私钥,人们经常使用涉及推送到该远程服务器以进行部署的工作流。基本上,您在那里设置了一个带有pre-receive钩子的裸git存储库,该钩子部署到另一个目录。在this tutorial中有一个简单的例子。然后,您只需要在服务器上的~/.ssh/authorized_keys中拥有SSH public 键。但是,使用此工作流程,您无法直接从GitHub存储库进行部署 - 您需要在本地提取它,然后再推送到EC2计算机。

另一种方法是使用GitHub的deploy keys机制。这将涉及在EC2实例上创建新的SSH密钥对,并将公钥作为部署密钥添加到GitHub上的私有存储库中。然后,您可以直接从私有GitHub存储库提取到EC2实例。

答案 1 :(得分:10)

我刚刚按照tutorial指出的Mark Longair解决了这种情况。我得到的唯一问题是创建裸git存储库。所以,让我恢复我的解决方法。

  1. 我已经拥有了我的github私有存储库。
  2. 我创建了EC2 Linux AMI(Ubuntu实用程序)
  3. 我在EC2实例上安装了git,mysql,php,apache和ssh,并将我的公共ssh密钥添加到/home/ubuntu/.ssh/authorized_keys文件中。
  4. 一旦进入EC2实例,我创建了两个文件夹,第一个用于存放存储库(我只是将其命名为“我已命名为我的github存储库”),第二个用于存放网站:{ {1}}。
  5. 然后我转到了要保存存储库的文件夹并初始化了裸存储库:mkdir sitesrepo.git websites
  6. 我通过vim创建了钩子文件,并在名为cd sitesrepo.git && git init --bare的文件中创建了以下内容,然后通过post-receive使其可执行(正如教程所述)。该文件必须放在chmod +x post-receive

    /home/ubuntu/sitesrepo.git/hooks
  7. 这里我的步骤与前面提到的教程不同:一个简单的git存储库存在冲突,它无法将工作树保持为裸存储库(它不会使感觉因为它是一个裸存储库。非裸存储库旨在拥有一个工作空间,即工作树。幸运的是,您可以手动设置存储库#!/bin/sh GIT_WORK_TREE=/home/ubuntu/websites git checkout -f 文件。因此,通过编辑文件config,您必须保证具有以下内容:

    /home/ubuntu/sitesrepo.git/config
  8. 现在,在您自己的机器上,在您的git本地存储库工作文件夹中,我们的想法是添加一个新的远程存储库。目前,您已默认配置[core] repositoryformatversion = 0 filemode = true bare = false worktree = /home/ubuntu/websites [receive] denycurrentbranch = ignore ,它告诉您的存储库将您的内容推送到github的存储库中。本教程将调用此类远程存储库origin。所以你必须运行一次:web。随后的推送可以通过简单的git remote add web ssh://mysite.com/home/ubuntu/sitesrepo.git && git push web +master:refs/heads/master

  9. 完成
  10. 根据您计划持有的网站数量,您必须configure your apache sites-enabled hosts。此外,由于您使用的是apache,请不要忘记将网络文件夹更改为指向git push web,因为默认情况下它指向/home/ubuntu/websites但您已准备好去,在定义新的web文件夹后,不要忘记重启apache服务。

  11. 希望这对您的问题有所帮助。