luc*_*ina 47 git github amazon-ec2
我对EC2和Git都不熟悉,我刚刚使用干净的Amazon Linux AMI设置了我的第一个EC2实例.我还安装了MySQL,Apache和PHP,并打开了一些端口,使其作为普通的Web服务器工作,同时响应弹性IP.
现在,我的代码在GitHub上的私有仓库中,我想通过执行git pull或类似的操作来执行简单的部署.Git也已安装在服务器上.我知道我可以使用我的个人ssh密钥在服务器上设置我的git repo,但这看起来很奇怪.我想另一个解决方案是创建一个新的GitHub用户并在服务器上使用它,但它似乎也不正确.
我如何以优雅,安全的方式实现这一目标?
Mar*_*air 36
为了避免在EC2实例上保留SSH私钥,人们经常使用涉及推送到该远程服务器以进行部署的工作流.基本上,你在那里设置了一个带有pre-receive钩子的裸git存储库,它可以部署到另一个目录.在本教程中有一个简单的例子.然后,你只需要拥有你的SSH 公共密钥~/.ssh/authorized_keys服务器上.但是,使用此工作流程,您无法直接从GitHub存储库进行部署 - 您需要在本地提取它,然后再推送到EC2计算机.
另一种方法是使用GitHub的部署密钥机制.这将涉及在EC2实例上创建新的SSH密钥对,并将公钥作为部署密钥添加到GitHub上的私有存储库中.然后,您可以直接从私有GitHub存储库提取到EC2实例.
Mes*_*dón 10
我只是遵循解决这种情况的教程是马克Longair之前指出.我得到的唯一问题是创建裸git存储库.那么让我恢复一下如何解决它.
/home/ubuntu/.ssh/authorized_keys文件中.mkdir sitesrepo.git websites.cd sitesrepo.git && git init --bare我通过vim创建了钩子文件,并在一个名为的文件中创建了以下内容post-receive,然后我将其chmod +x post-receive作为可执行文件(就像教程所述).该文件必须放在/home/ubuntu/sitesrepo.git/hooks
#!/bin/sh
GIT_WORK_TREE=/home/ubuntu/websites git checkout -f
Run Code Online (Sandbox Code Playgroud)这里是我的步骤与前面提到的教程不同的地方:一个裸git存储库存在冲突,它无法将工作树保持为裸存储库(它没有意义,因为它是一个裸存储库.非裸存储库旨在有工作空间,即工作树).幸运的是,您可以手动设置存储库config文件.因此,通过编辑文件,/home/ubuntu/sitesrepo.git/config您必须保证具有以下内容:
[core]
repositoryformatversion = 0
filemode = true
bare = false
worktree = /home/ubuntu/websites
[receive]
denycurrentbranch = ignore
Run Code Online (Sandbox Code Playgroud)现在,在您自己的机器上,在您的git本地存储库工作文件夹中,想法是添加一个新的远程存储库.目前,您已默认配置origin,告知您的存储库将您的内容推送到github的存储库.本教程称这样的远程存储库web.所以你必须跑一次:git remote add web ssh://mysite.com/home/ubuntu/sitesrepo.git && git push web +master:refs/heads/master.随后的推送可以通过简单的方式完成git push web
根据您计划保留的站点数,您必须配置Apache sites-enabled主机.此外,由于你正在使用apache,不要忘记将web文件夹更改为指向/home/ubuntu/websites,因为默认情况下它指向/var/www但是你准备好了,只是不要忘记在定义新的apache服务后重启网络文件夹.
希望这有助于你的问题.