gitでWebページのデプロイ

銀鷹です。

お題の通りですが、金曜日に研究室のWebページのデプロイを

gitで出来るようにしたのでまとめておきます。

今までは、Webページの管理者がWinSCPとかで頑張ってやってたんだけど、

更新が衝突することが多かったのでやってみた。

あと、ついでに研究室のGitLabにもミラーリポジトリを作ったので更新履歴がWebでも見れる。

git万歳。

必要な手順については、以下のとおり。

1. Webページ用のbareリポジトリの作成

どこか、適当な場所に作る。

gitでpushする際に、SSHでログインするので、SSHでログイン出来るユーザのホームに作った。

mkdir -p ~/repos/web
cd ~/repos/web
$ git init --bare --shared=true

bareリポジトリ

作業ファイルのない、管理情報だけのリポジトリらしい。

つまるところ、普段pushする先のリポジトリ(サーバ側のリポジトリ)ということなんだと思う。

2. baraリポジトリをWebページのDocumentRootでclone

cd /var/www
sudo git clone ~/repos/web ##/var/www/webがDocumentRoot
sudo chown -R yutaka:yutaka web/

3. bareリポジトリにhookを設定

post-receive(クライアントからのpushが終わったら呼ばれる)で、

2.でcloneしたリポジトリ(DocumentRoot)でpullするhookを設定する。

cd ~/repost/www/hooks
cp post-receive.sample post-receive
echo "(cd /var/www/web; git --git-dir=.git pull)"

4. クライアントでcloneしてWebページのコンテンツをデプロイ

まずは、SSHの設定をする。

# .ssh/config
Host web-deploy
     User yutaka
     Port 10022
     Hostname 10.0.0.1
     IdentityFile ~/.ssh/id_rsa

設定が終わったらリポジトリをcloneする。

cd
git clone web-deploy:~/repos/web

リポジトリに変更を加えてpush、これでWebページのコンテンツが更新される。

cd web
echo "test" > test.txt
git add .
git commit -m "add: test.txt"
git push

以上で設定は完了。

これで、gitで簡単なデプロイが出来るようになる。

研究室の環境では、これに加えて、事前に作成したミラーへもpushするようにしてあるので、

ミラーが登録されているGitLabで更新履歴が見れるので便利。

感想

適当にbareリポジトリを作っておくと、あとはSSHでログインさえ出来ればcloneやpushが出来て、

hookを仕掛けるだけでお手軽にこういった環境を作れるのは便利だ。

今回の場合、基本的には静的なコンテンツしか無いので、単純にpullで済むけど、

そうじゃない場合はhookに頼るんじゃなくて、fabricとかを使ったほうがいいのかな?

いまいち、gitでのデプロイと他のデプロイツールの使い分けがわからない。