web-dev-qa-db-ja.com

GitHubリポジトリからプルするためにEC2でGitをセットアップする

私はEC2とGitの両方に慣れていないので、クリーンなAmazon Linux AMIを使用してEC2の最初のインスタンスをセットアップしました。また、MySQL、Apache、およびPHPをインストールし、いくつかのポートを開いて通常のWebサーバーとして機能するようにし、エラスティックIPにも対応しました。

現在、私のコードはGitHubのプライベートリポジトリにあり、git pullまたはそのようなもの。 Gitは既にサーバーにもインストールされています。個人用のsshキーを使用してサーバーにgitリポジトリを設定できることは知っていますが、奇妙に思えます。別の解決策は、新しいGitHubユーザーを作成してサーバー上で使用することだと思いますが、どちらも適切ではないようです。

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

46
luchomolina

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

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

36
Mark Longair

tutorialMark Longair を先に指定したことで、このような状況を解決しました。私が得た唯一の問題は、ベアgitリポジトリの作成にありました。だから私はそれを解決した方法を再開させてください。

  1. すでにgithubプライベートリポジトリを持っています。
  2. EC2 Linux AMI(実用的な手順についてはUbuntu)を作成しました
  3. EC2インスタンスにgit、mysql、php、Apache、およびsshをインストールし、/home/ubuntu/.ssh/authorized_keysファイルに公開sshキーを追加しました。
  4. EC2インスタンスで、2つのフォルダーを作成しました。最初のフォルダーはリポジトリーを保持するため(私はちょうどgithubリポジトリーと名付けたように名前を付けました)、2番目のフォルダーはサイトを保持するために:mkdir sitesrepo.git websites
  5. 次に、リポジトリを保持するフォルダーに移動し、ベアリポジトリを初期化しました:cd sitesrepo.git && git init --bare
  6. post-receiveという名前のファイルに次のコンテンツを含むvimを介してフックファイルを作成し、chmod +x post-receiveを介して実行可能にしました(チュートリアルで述べたとおり)。そのファイルは/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を呼び出します。したがって、1回実行する必要があります:git remote add web ssh://mysite.com/home/ubuntu/sitesrepo.git && git Push web +master:refs/heads/master。後続のプッシュは、単純なgit Push webを介して実行できます。

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

これがあなたの質問に役立つことを願っています。

10
Mesi Rendón