ブログを git で更新できるようにした
4ヶ月ぶりの更新。ブログの更新作業が簡単にできるようにしたらもっと書くよ うになるかなと思ったので、git で更新できるようにした。今までは scp で Markdown をアップロードしたり、サーバーにログインして設定の違う Emacs で書いたりしていて面倒臭かったのだ。
サーバーで gitolite (git のサーバーソフトウェア) は動いているので、リポ ジトリを作ってこれに自宅から push したらフックスクリプトで Jekyll を走 らせたらいいと思った。
けど、gitolite わからーん。 git わからーん。というわけで、フックじゃな くて自宅のPCで実行するディプロイスクリプト書きましたとさ。
まず gitolite の設定リポジトリで、新しいリポジトリを登録するのだが、こ いつのプッシュができなくなっていた。原因は tcp wrapper で ssh へのアク セスを制限していたこと。自宅のプロバイダーと、localhost からは ssh 接続 できるように書いていたのだが、サーバー自体のグローバル IP を登録してい なかった。
git のリポジトリの remote 設定はグローバルIP で指定するから、こいつに接 続しようとするとグローバルIP 対グローバル IP になるんだね。(このアクセ スコントロール問題、いろんなところで遭遇するなぁ。)
というわけで、/etc/hosts.deny を以下のような感じにした。
ALL: ALL EXCEPT .asahi-net.or.jp, localhost, www12276ue.sakura.ne.jp
gitolite-admin/conf/gitolite.conf に以下を追加して ie リポジトリを作る。
repo    ie
        RW+     =   @all
        RW+     =   plonk
        RW+     =   plonk_home
RW+ = @all だけあれば良いような気がするけど、よくわからないからこうしておく。
add して commit して push すると、~git/repositories/ie.git にリポジトリができる。
サーバー上のホームディレクトリにもリポジトリをクローンしておいて(~/root)、
ディプロイスクリプトではこいつをソースにブログサイトをJekyll に生成
させる。
自宅PCで実行するディプロイスクリプト()はこんな感じ。~/root/Makefile で
jekyll が走って ~/public_html にサイトを生成する。
#!/bin/sh
SCRIPT="echo 'リモートを更新しています。'; cd ~/root; git pull; echo 'updating public_html...'; make all"
ssh -t sakura "$SCRIPT"