リモートサーバのgit環境を構築 + git pushでdeploy出来るようにするまでのまとめ

リモートサーバのgit環境を構築 + git pushでdeploy出来るようにするまでのまとめ

ローカル環境とリモート環境の準備

ようやくgitを少しずつ使い出してみたもののデプロイするにはどうすればいいのか分からなかったのでとりあえず作業内容をメモしておく。

  • ローカル:mac OSX 10.6
  • リモートサーバ:CentOS 5.5

公開鍵方式でSSHにログイン出来るようにする

ローカル環境での操作

ターミナルでログインし、ホームディレクトリで秘密鍵と公開鍵のペアを作成する。RSA方式でよいと思われる。

MacBook:~ clicktx$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/clicktx/.ssh/id_rsa): [enter]
Enter passphrase (empty for no passphrase): [enter]
Enter same passphrase again: [enter]
Your identification has been saved in /Users/clicktx/.ssh/id_rsa.
Your public key has been saved in /Users/clicktx/.ssh/id_rsa.pub.
The key fingerprint is:
01:0a:3b:c1:1c:7f:2e:1c:5d:ae:1b:16:59:70:ef:fd clicktx@MacBook.local
The key's randomart image is:
+--[ RSA 2048]----+
| o+.  o.+        |
|  o= o B .       |
|  o + = o .      |
|   o + o o .     |
|    o = S . .    |
|     o o     .   |
|      .       E  |
|                 |
|                 |
+-----------------+

id_rsa ... 秘密鍵
id_rsa.pub ... 公開鍵

秘密鍵と公開鍵のペアがホームディレクトリの.ssh/以下に作成される。

公開鍵である id_rsa.pub をリモートサーバのホームディレクトリにアップロードする。
個人的にリモートサーバのSSHはポート番号を変更しているため以下のような[-P ポート番号]オプションをつけている。

$ cd ~/.ssh
$ scp -P ポート番号 id_rsa.pub clicktx@domain.com:~/
clicktx@domain.com's password: 
id_rsa.pub                                    100%  405     0.4KB/s   00:00 

リモートサーバでの操作

ホームディレクトリに.sshディレクトリが無ければ作成する。

$ mkdir ~/ .ssh
$ chmod 700 .ssh/ (自分だけ読み書き出来る)

id_rsa.pubの内容を.ssh/authorized_keysに追加する

$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ cd .ssh/
$ chmod 600 authorized_keys (自分だけ読み書き出来る)
$ rm ~/id_rsa.pub (不要になったid_rsa.pubを削除しておく)

ローカル端末からの操作

新しいターミナルからログインしてみる。

$ ssh -p ポート番号 clicktx@domain.com
Last login: Thu Nov 24 10:12:16 2011 from xxxxxx.xxx.xxx.xx.jp

公開鍵作成時にパスフレーズは設定していないので、何も聞かれずにログイン出来れば成功。

 


 

リモートサーバにgitをインストール

CentOSのデフォルトリポジトリではgitが提供されていない。
rpmforgeリポジトリを導入していればyumで一発でインストールできる。

$ sudo yum install git

gitの環境設定

ユーザー名とメールアドレスを設定。

$ git config --global user.name "clicktx"
$ git config --global user.email clicktx@domain.com

git pushした時にデプロイされるようにする

ローカルで開発した内容をデプロイする時にgit pushで済むようにする。

仕組み的には

bareリポジトリにpush
↓
デプロイ先のリポジトリがbareリポジトリからpull
↓
ワークツリーに反映される

こんな感じみたい。なるほど。

作業自体はこんな感じ

リモートでの作業
・リモートサーバにbareリポジトリを作る(push先)
・フックを仕掛ける
・デプロイ先(公開ディレクトリ)にgitリポジトリを作る

ローカルでの作業
・リモートリポジトリの登録
リモートでの作業

リモートサーバにbareリポジトリを作る

$ mkdir ~/repos
$ cd ~/repos
$ mkdir mysite.git
$ cd mysite.git
$ git init --bare

フックを仕掛ける
post-receive.sampleのシェルスクリプトをコピーしてpost-receiveを作成する。実行権を与える。

単にpullしたいリポジトリがあるディレクトリに移動してpullを実行させるだけ。

$ cd ~/repos/mysite.git
$ cp hooks/post-receive.sample hooks/post-receive
$ vi hooks/post-receive

(cd /home/clicktx/www/mysite; git --git-dir=.git pull)  # 最終行に追記する

$ chmod +x ~/repos/mysite.git/hooks/post-receive

デプロイ先(公開ディレクトリ)にgitリポジトリを作る(cloneする)
ここでは ~/www/mysite

$ mkdir ~/www
$ cd ~/www
$ git clone ~/repos/mysite.git/
ローカルでの作業

すでにgitリポジトリがあるものとする。

リモートリポジトリの登録

$ cd ~/Work/mysite
$ git remote add origin ssh://clicktx@domain.com:ポート番号/~/repos/mysite.git

pushしてみる。2回目からはgit pushのみで行える。

$ git push origin master

...色々変更
git commit -a
git push

これでおれおれバージョン管理システムとはお別れ...かな?

参考:

[amazonjs asin="427406767X" locale="JP" title="入門git"]