開発サーバにpushをしたら、webサーバに自動デプロイされる環境を構築する
前回の記事GitBucketを自サーバに構築しようでGitBucketの構築方法を書いたので、今回はそれと連動させて、webサーバに自動デプロイされるような環境を作りたいと思います。今回は、開発サーバ兼テストサーバということで、ローカルからサーバのbareリポジトリ、およびGitBucketのリポジトリ(GitBucketでも管理できたら楽かなと思い)にpushし、それをnon-bareリポジトリであるwwwフォルダがpullするような構築作業を行います。
まず、下に今回の一連の流れのイメージ図を示します。
1. Gitのインストール
まず、gitコンパイルに必要なgccおよび、MakeMakerをインストールしてきます。
$yum -y install gcc
perl-ExtUtils-MakeMakerを導入
$yum -y install perl-ExtUtils-MakeMaker
続いて、gitに必要なツール群をインストールします。
$yum -y install curl-devel expat-devel gettext-devel openssl
準備が整ったので、gitをダウンロードします。ひとまずsrcディレクトリにダウンロードをします。
$cd /usr/local/src
$wget https://www.kernel.org/pub/software/scm/git/git-2.7.2.tar.gz
ファイルを解凍する
$tar xzvf git-2.7.2.tar.gz
続いて、gitのコンパイルおよびインストールを行います。
$make prefix=/usr/local all
$make prefix=/user/local install
2. SSHの設定
ローカルからサーバにアクセスするために、sshの設定を行います。
パスワードを毎回聞かれないようにするため、公開鍵認証を用います。まず鍵を生成します。
$ssh-keygen -t rsa
ローカルで作成した公開鍵をサーバに投げてください。
詳細設定は省略。 ssh公開鍵などで検索すると出てきます。
./configも設定しおきましょう。ssh ホスト名 でアクセスできるようになります。
cd ~/.ssh
vi config
以下を記述
host ホスト
HostName アドレス
Port ポート
User ユーザ名
IdentityFile ~/.ssh/id_rsa
3. GitBucketのリポジトリ作成
前回の記事GitBucketを自サーバに構築しよう
で構築したGitBucketのサイトに行って、リポジトリを作成してください。GitHubとほぼ同じ方法で作成できます。作成したら、GitHubと同じ要領で、commitしpushを行ってください。
4. リモートリポジトリ(bareリポジトリの作成)
次にサーバの方にリモートリポジトリを作成します。これはbareリポジトリで作成をしてください。
好きなディレクトリ(ここではわかりやすいように、ホームディレクトリとします)に移動し、bareリポジトリを作成します。
$cd
$mkdir git_remote
$cd git_remote
$git init --bare test.git
5. pushの設定
ローカルリポジトリに移動し、configファイルにリモートリポジトリの設定を行います。
.git/configファイルの[remote "origin"]のurlに以下を追記します。
url = ホスト名:/bareリポジトリのパス/git_remote/test.git
こうすることで、./git/configには二つのurlが記述されることになります。まずはGitBucketのリポジトリのurlと、先ほど作成したbareリポジトリです。これで、ローカルからpushすると、GitBucketのリポジトリとbareリポジトリの両方にpushされます。一度pushしましょう。sshの設定を行っているので、パスワードを入力せずにpushすることが可能だと思います。
6. 自動デプロイ環境の構築
最後に、自動デプロイ環境を構築していきます。
まずはリモートサーバのwwwにフォルダにファイルをクローンします。
$cd /var/www
$git clone /bareリポジトリのパス/git_remote/test.git
これで、wwwディレクトリにtestディレクトリが作成されたと思います。
自動デプロイはhook機能を使って構築していきます。
$cd /bareリポジトリまでのパス/git_remote/test.git/hooks
$mv post-receive.sample post-receive
$vi post-receive
以下を記述
cd /var/www/test
git --git-dir=.git pull
実行権限を与え、pullされるかどうか実際に実行してみます。
$chmod +x post-receive
$./post-receive
ここで注意してほしいのですが、root権限で作業を行い設定をしていると、post-receiveを実行した際、下のようなエラーが表示されると思います。
remote: error: cannot open .git/FETCH_HEAD:
これはroot権限で作業行っていたため、.gitが開けないことが原因で起こるエラーです。
なので、www配下にあるtestディレトリのユーザ権限を以下のコマンドで変更しておきましょう。
$chown -R ユーザ名 /var/www/test
これで、すべての環境が整いました。ローカルからpushをすると、デプロイされ、
webページが更新されていると思います。またGitBucketのサイトにアクセスして、しっかりとコミットされているとことを確認してみてください。
これで、テストサーバでの確認をし、OKであれば本番サーバにpullするという環境も、構築をすることができると思います。
<参考にさせていただいたサイト>
「gitでシンプルなデプロイ環境を作る」
http://qiita.com/zaburo/items/8886be1a733aaf581045