一部の方はご存知かと思いますが、このページは自宅にて稼動している FreeBSD機を使って表示しています。rootの権限が必要な設定も可能だしCPUパワー使い放題ですのでとても便利なのですが、コケてる時は表示できないという欠点があります。そして当然のことながら「安価な商用ホスティングサービスがコケる可能性よりも自宅サーバがコケる可能性の方がはるかに高い」のです(苦笑)。うちのサイトは入り口だけはプロバイダのWWWサーバを使っていますが中身のほとんどが自宅サーバに依存しているので、コケてしまうと途端に中身の無いサイトに変身してしまいます。
以前は自宅サーバとレンタルサーバの間には越えられない壁があったように思いますが、レンタルサーバ側が何度か容量・機能拡張した結果
下記は作成途中に困った事と回避方法。
rsync -va dir1 dir2 dir3 ... ユーザ名@リモートサーバ:/パス/てな感じで一行で書けます。 もちろん前処理としてsshでパスフレーズ無しでログインできるように設定してあります。
#!/bin/shじつはこれで作成されるファイルは1.5MBぐらいになるので転送には時間がかかります。実際の運用では copy の際に1日分とか範囲を限定すると良いと思います。なお、自動で行う場合はpsqlのパスワードを ${HOME}/.pgpass に記入する必要があります。
RMTHOST=レンタルサーバのマシン名
RMTUSER=ユーザ名
RMTHOME=/usr/home/ユーザ名とか/
DBHOST=データベースのマシン名
DBUSER=データベース接続ユーザ名
FILE=hoge.out
TMP=/tmp/$FILE
copytable() {
TABLE=$1
LIST=$2
echo "begin;" >>$TMP
echo "delete from $TABLE;" >>$TMP
echo "COPY $TABLE ($LIST) FROM stdin;" >>$TMP
psql kobo<<EOF >>$TMP
copy $TABLE($LIST) to stdout;
EOF
echo '\.' >>$TMP
echo "end;" >>$TMP
echo "" >>$TMP
}
# 作業スクリプトの作成
copytable 'テーブル1' 'id,dt,name,body'
copytable 'テーブル2' 'id,dt,title,body,viewmode'
echo "vacuum;" >>$TMP
gzip -9f $TMP
# リモートマシン上で実行
scp ${TMP}.gz $RMTUSER@$RMTHOST:$RMTHOME
ssh $RMTUSER@$RMTHOST "zcat $FILE |psql -h $DBHOST -U $DBUSER $DBUSER"
rm ${TMP}.gz
<ifdefine TORIYU>みたいなことをしてみました。動けばいいのさ・・・はぅ
RewriteBase /~takatani/hoge/
</ifdefine>
<ifdefine !TORIYU>
RewriteBase /gallery/
</ifdefine>
てな感じで、だいぶ動くようになってきました。目的はお引越しでも完全なフェイルオーバーでもなく、「自宅サーバがコケてる時に表示できる場所」ですので、書き込み系の処理は実装しませんし同期もリアルタイムである必要はありません。それを踏まえた上で現在動いているのが これとかこれ。
とりあえず枝葉のページに関しては全部出来たので、後は差分更新の仕組みとプロバイダの静的ファイルのリンクを状況に応じてすりかえる仕組みを作ればよいかなーと思います。
# こゆのは出来上がってから書くのがよいと思うのですが、しばらく時間が取れなくなる