VPSを使用してGitで自動デプロイメントを設定する方法
紹介
Gitの紹介とインストール方法については、紹介チュートリアルを参照してください。
この記事では、アプリケーションをデプロイしたいときにGitをどのように使うかを教えます。アプリケーションをデプロイするためのGitの使い方には多くの方法がありますが、このチュートリアルでは最も簡単な方法に焦点を当てます。ローカルマシンでリポジトリを作成して使用する方法はすでに知っていると仮定します。もし知らない場合は、このチュートリアルを参照してください。
Gitを使用する際、一般的なワークフローはバージョン管理に向かっています。あなたは作業を行うローカルリポジトリと、すべてを同期させチームや異なるマシンで作業できるリモートリポジトリを持っています。しかし、Gitを使用してアプリケーションを本番環境に移動することも可能です。
サーバーセットアップ
私たちの架空の作業スペース:
あなたのサーバーライブディレクトリ: /var/www/domain.com
あなたのサーバーリポジトリ: /var/repo/site.git
私たちは、site.gitにプッシュしたい場合、同時にすべてのコンテンツを/var/www/domain.comで利用可能にするにはどうすればいいですか?
私たちのリポジトリを作成する
コマンドラインからVPSにログインし、以下のコマンドを入力してください:
cd /var
mkdir repo && cd repo
mkdir site.git && cd site.git
git init --bare
--bare は、私たちのフォルダーにソースファイルがなく、バージョン管理だけがあることを意味します。
フック
Gitリポジトリには‘hooks’というフォルダーがあります。このフォルダーには、あなたがフックしてカスタムアクションを実行できる可能性のあるアクション用のサンプルファイルが含まれています。
Gitのドキュメントでは、3つの可能なサーバーフックを定義しています:「pre-receive」、「post-receive」、および「update」です。「pre-receive」は、サーバーが「push」を受信した瞬間に実行され、「update」はそれに似ていますが、各ブランチごとに1回実行されます。そして「post-receive」は、「push」が完全に終了したときに実行され、私たちが興味を持っているものです。
私たちのリポジトリに次のように入力すると:
lsいくつかのファイルとフォルダー、特に‘hooks’フォルダーを見ることができます。それでは、‘hooks’フォルダーに行きましょう:
cd hooksでは、'post-receive'というファイルを作成するには、次のように入力します:
cat > post-receive
このコマンドを実行すると、入力する内容がすべてこのファイルに保存されることを示す空行が表示されます。では、入力してみましょう:
#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f
入力が完了したら、'control-d' を押して保存してください。ファイルを実行するには、適切な権限を設定する必要があります:
chmod +x post-receiveドキュメントには、'git-dir'がリポジトリへのパスであることが記載されています。'work-tree'を使用すると、ファイルが実際に転送される別のパスを定義できます。
post-receive ファイルは、プッシュが完了するたびに確認され、あなたのファイルは /var/www/domain.com にある必要があると言っています。
ローカルマシン
ローカルリポジトリを作成しましょう。パスと名前は自分の選択に変更してください。VPS上にいる場合は、次のように入力してください:
exitそして、あなたのリポジトリを作成します:
cd /my/workspace
mkdir project && cd project
git init
次に、私たちのリポジトリのリモートパスを設定する必要があります。Gitに「live」という名前のリモートを追加するよう指示します:
git remote add live ssh://user@mydomain.com/var/repo/site.git ここでは、ライブフォルダではなくリポジトリのリンクを提供すべきです。
このフォルダに素晴らしい作業が用意されていると仮定しましょう。ファイルを追加し、メッセージを付けてコミットするという通常の手順を行うべきです:
git add .
git commit -m "My project is ready"
念のために言うと、'git add'の後のドットは、すべてのファイルをステージに追加することを意味します。'git commit'の後には'-m'があり、これはメッセージを入力することを意味します。完了するために、すべてをサーバーに'push'します。リモートを設定する際に使用した'live'エイリアスを使用します。
git push live master
Counting objects: 7, done.Delta compression using up to 4 threads.Compressing objects: 100% (7/7), done.Writing objects: 100% (7/7), 10.56 KiB, done.Total 7 (delta 0), reused 0 (delta 0)To ssh://user@mydomain.com/var/repo/site.git* [new branch] master -> master
ここでは、Gitに'live'リモートに'master'ブランチをプッシュするように指示します。ブランチについての理解を深め、どのように使うかを学ぶには、このチュートリアルを読むことができます。
ベータ
もしすべてを一度に展開したくない場合はどうしますか?最初にテストして、ベータディレクトリを持ちたいかもしれません。
それを実現する方法の一つは、別のリポジトリを作成することです。もう一度VPSにログインして、ディレクトリを作成しましょう:
cd /var/www/
mkdir beta
リポジトリを作成するには:
cd /var/repo
mkdir beta.git && cd beta.git
git init --bare
再び、私たちは'post-receive'ファイルを作成する必要があります。なぜなら、ベータディレクトリに私たちのプロジェクトを表示したいからです:
cd hooks
cat > post-receive
ファイルの内容を入力してください:
#!/bin/sh
git --work-tree=/var/www/beta --git-dir=/var/repo/beta.git checkout -f
入力が終わったら、'control-d' を押して保存してください。ファイルを実行するためには、次のコマンドを使用して適切な権限を設定する必要があります:
chmod +x post-receive
ローカルリポジトリに戻りましょう:
exit
cd /my/workspace/project
それでは、私たちはベータリポジトリを指す別のリモートを設定できます。
git remote add beta ssh://user@mydomain.com/var/repo/beta.git これにより、私たちは二段階のプロセスを持つことができます。まずベータにプッシュして確認し、すべてが問題なければライブにプッシュします:
git add .
git commit -m "New version"
git push beta master
そして後で:
git push live masterサーバーからライブ配信中
同じプロジェクトで作業しているチームがいるかもしれません、そして他の人にも本番環境に移行する時間だと決めてほしいと思っています。そのためには、サーバー上でベータリポジトリと本番リポジトリをリンクできます。VPSにログインして、以下を入力します:
cd /var/repo/beta.git
git remote add live ../site.git
これで、サーバー上でベータからライブにプッシュできるようになりました:
cd /var/repo/beta.git
git push live master
おめでとうございます!あなたのVPSはGitを使用して自動的にデプロイするように設定されました!
