2011-10-20 20 views
40

EC2とGitの両方に新しく追加されたもので、クリーンなAmazon Linux AMIを使用してEC2の最初のインスタンスを設定しました。私はMySQL、Apache、PHPもインストールし、弾力性のあるIPにも対応して、通常のWebサーバーとして機能させるためにいくつかのポートをオープンしました。EC2でGitを設定してGitHubリポジトリからプルする

私のコードはGitHubのプライベートレポです。git pullなどを実行して簡単なデプロイメントを実行したいと考えています。 Gitはすでにサーバにもインストールされています。私は自分の個人的なsshキーを使ってサーバー上で私のgit repoをセットアップすることができますが、それは奇妙に思えます。私は別の解決策は、新しいGitHubユーザーを作成し、それをサーバー上で使用することだと思うが、それはどちらかといえない。

エレガントで安全な方法でこれを達成するにはどうすればよいですか?

答えて

32

EC2インスタンスにSSH秘密鍵を保持しないようにするために、多くの場合、展開するためにそのリモートサーバーにプッシュするワークフローを使用します。基本的には、別のディレクトリにデプロイするpre-receiveフックを使用して、そこに裸のgitリポジトリを設定します。 this tutorialにこれを行う簡単な例があります。 SSH の鍵は、サーバの~/.ssh/authorized_keysにある必要があります。しかし、このワークフローでは、GitHubリポジトリから直接展開することはできませんでした。ローカルにプルしてEC2マシンにプッシュする必要があります。

GitHubのdeploy keysメカニズムを使用する方法もあります。これには、EC2インスタンス上に新しいSSH鍵ペアを作成し、GitHub上の公開リポジトリに公開鍵を追加します。その後、プライベートGitHubリポジトリからEC2インスタンスに直接プルすることができます。

+0

恐ろしく、ありがとう! – luchomolina

7

私はちょうどtutorialの後にMark Longairが指摘されているような状況を解決しました。私が得た唯一の問題は、裸のgitリポジトリの作成でした。だから私がそれをどのように解決したかを再開させてください。

  1. すでに私のgithubプライベートリポジトリがあります。
  2. 私はEC2のLinux AMI(実用的な手順については、Ubuntuの)
  3. を作成した私は、EC2インスタンスでgitのは、MySQL、PHP、ApacheとSSHをインストールし、そして/home/ubuntu/.ssh/authorized_keysファイルに私のSSH公開鍵を追加しました。
  4. EC2インスタンスでは、リポジトリを保持する最初のフォルダ(私はgithubリポジトリの名前を付けたばかりです)と2番目のフォルダ:mkdir sitesrepo.git websitesを作成しました。
  5. その後、私はリポジトリを保持しようとしていたフォルダに行き、裸のリポジトリを初期化:cd sitesrepo.git && git init --bare
  6. 私はpost-receiveという名前のファイルに以下の内容でのvimを経由してフックのファイルを作成し、その後、私は経由して、それが実行可能にchmod +x post-receive(チュートリアルの記載どおり)。裸のgitリポジトリは、それが裸のリポジトリであることworktreeを保持することはできません競合を持っている(それはない:そのファイルは私の手順は、前に述べたチュートリアルと異なるところです/home/ubuntu/sitesrepo.git/hooks

    #!/bin/sh 
    GIT_WORK_TREE=/home/ubuntu/websites git checkout -f 
    
  7. に配置する必要がありますそれは裸のリポジトリであるため意味をなさない。非裸のリポジトリは作業スペース、つまり作業ツリーを持つことを意図している。幸いなことに、手動でリポジトリconfigファイルを設定することができます。だから、ファイルを編集して/home/ubuntu/sitesrepo.git/configあなたはこのような何かを持っていることを保証する必要があります。

    [core] 
        repositoryformatversion = 0 
        filemode = true 
        bare = false 
        worktree = /home/ubuntu/websites 
    [receive] 
        denycurrentbranch = ignore 
    
  8. を今、自分のマシンでは、あなたのgitのローカルリポジトリ作業フォルダで、アイデアは、新しいリモートリポジトリを追加することです。現在はデフォルトでoriginを設定しています。これはあなたのリポジトリにgithubのリポジトリにコンテンツをプッシュするよう指示します。このチュートリアルでは、リモートリポジトリwebを呼び出します。ですから、一度実行する必要があります:git remote add web ssh://mysite.com/home/ubuntu/sitesrepo.git && git push web +master:refs/heads/master。その後のプッシュは簡単に行うことができます

  9. 保持する予定のサイトの数に応じて、configure your apache sites-enabled hostsにする必要があります。また、あなたはApacheを使用しているので、デフォルトで/var/wwwを指しているので、Webフォルダを/home/ubuntu/websitesに変更することを忘れないでください。しかし、準備ができました。定義した後にApacheサービスを再起動することを忘れないでください。新しいWebフォルダ。

これはあなたの質問に役立ちます。

関連する問題