私はEC2とGitの両方に慣れていないので、クリーンなAmazon Linux AMIを使用してEC2の最初のインスタンスをセットアップしました。また、MySQL、Apache、およびPHPをインストールし、いくつかのポートを開いて通常のWebサーバーとして機能するようにし、エラスティックIPにも対応しました。
現在、私のコードはGitHubのプライベートリポジトリにあり、git pull
またはそのようなもの。 Gitは既にサーバーにもインストールされています。個人用のsshキーを使用してサーバーにgitリポジトリを設定できることは知っていますが、奇妙に思えます。別の解決策は、新しいGitHubユーザーを作成してサーバー上で使用することだと思いますが、どちらも適切ではないようです。
エレガントで安全な方法でこれを達成するにはどうすればよいですか?
EC2インスタンスにSSH秘密鍵を保持する必要を回避するために、多くの場合、デプロイするためにそのリモートサーバーにプッシュするワークフローが使用されます。基本的に、そこに裸のgitリポジトリをセットアップし、pre-receive
別のディレクトリにデプロイするフック。 このチュートリアル でこれを行う簡単な例があります。次に、SSHpublicキーを~/.ssh/authorized_keys
サーバー上。ただし、このワークフローでは、GitHubリポジトリから直接デプロイすることはできませんでした。ローカルにプルしてからEC2マシンにプッシュする必要があります。
別の方法は、GitHubの キーのデプロイ メカニズムを使用することです。これには、EC2インスタンスで新しいSSHキーペアを作成し、公開キーをGitHubのプライベートリポジトリにデプロイキーとして追加する必要があります。その後、プライベートGitHubリポジトリからEC2インスタンスに直接プルできます。
tutorialMark Longair を先に指定したことで、このような状況を解決しました。私が得た唯一の問題は、ベアgitリポジトリの作成にありました。だから私はそれを解決した方法を再開させてください。
/home/ubuntu/.ssh/authorized_keys
ファイルに公開sshキーを追加しました。mkdir sitesrepo.git websites
。cd sitesrepo.git && git init --bare
post-receive
という名前のファイルに次のコンテンツを含むvimを介してフックファイルを作成し、chmod +x post-receive
を介して実行可能にしました(チュートリアルで述べたとおり)。そのファイルは/home/ubuntu/sitesrepo.git/hooks
に配置する必要があります
#!/bin/sh
GIT_WORK_TREE=/home/ubuntu/websites git checkout -f
ここで、私の手順が前述のチュートリアルと異なるところは次のとおりです。作業スペース、つまりワークツリーがある)。幸いなことに、リポジトリconfig
ファイルを手動で設定できます。そのため、ファイル/home/ubuntu/sitesrepo.git/config
を編集することにより、次のようなものを保証する必要があります。
[core]
repositoryformatversion = 0
filemode = true
bare = false
worktree = /home/ubuntu/websites
[receive]
denycurrentbranch = ignore
これで、自分のマシンの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
を介して実行できます。
保持する予定のサイトの数に応じて、 Apache sites-enabled
ホストを設定 する必要があります。また、Apacheを使用しているので、/home/ubuntu/websites
を指すようにWebフォルダーを変更することを忘れないでください。これは、デフォルトで/var/www
を指すからです。新しいWebフォルダを定義した後、Apacheサービスを再起動することを忘れてください。
これがあなたの質問に役立つことを願っています。