avatar icon of nyarla

カラクリスタ ブログ

『輝かしい青春』なんて失かった方の
『にゃるら』の個人ブログです。

なおインターネットコンテンツと化した『にゃるら』さんとは別の個体です。

Rackhub.netでDropboxドリブンなブログ生成環境を整えてみた!

概要: Rackhub上でDropboxのファイル追加をトリガーにごにょごにょする


こんにちま!

いつも心にWeb & Tech、悪い意味で脆弱性が恋人(ぉぃ にゃるらこと、岡村 直樹(24)です。皆様ご機嫌麗しゅう。

さて、 疑問符を社名に持つ某企業 のトラッキング問題で、 すっかり影に隠れている間がありますが、ちょうど前々から注目していた、 fluxflex社の

が、いつのまにやら公開されておりました。

で、公開に気づいてから速攻でアカウントを取り、 昨日と今日あたりでいじり倒して快適な環境を構築できたので、 今回はその辺り書きたいと思います。

[Rackhub.net http://rackhub.net/ とは?]

Rackhub.netとは [[以前に取り上げた /post/50791366232]] PaaS、

を提供するfluxflex社の新サービスで、格安のお手軽VPSみたいなサービスです。

Rackhubが普通のVPSと違う所は、

  1. さくらのクラウド上に構築されてるらしい
  2. メジャーなプログラミング言語環境が、モダンにセットアップされている
  3. 基本的なポート以外は、デフォルトで閉じられている(ポート解放は有料)
  4. SSH公開鍵をWeb UIから登録するだけで、サーバにログインできる
  5. 15日間290円からのお手軽なプライス

という感じでしょうか。

あと、fluxflexにも有った、github連携のワンクリックセットアップが、 近々実装される予定らしいので、その辺りも特長になるのかなと思います。

まあ、RackhubはPaaSかIaaSのどっち? って聞かれると、 IaaSに傾いたPaaSの様な、何とも言えない新ジャンルっぽい香りがするので、 RackhubはRackhubというモノだ、と言えるんじゃないかなーと思います。

Rackhubのセットアップとハマった事

次。

Rackhubではサーバのコトを Rack と呼び、 このRackをセットアップするには、

  • <https://rackhub.net/signup https://rackhub.net/signup>

で登録したのち、ログインして、

  • <http://rackhub.net/racks/new http://rackhub.net/racks/new>

にアクセスすると、サーバ名の指定や、 Rackのプラン等を選択等ができるようになってます。

この際 3時間の無料お試し期間を適用する。 にチェックを入れると、 サーバを作成から三時間まで、無料でお試しすることができます。

で、サーバの作成が終わると、今度はサーバのダッシュボードにリダイレクトされ、 そのダッシュボードから、サーバの起動/停止/再起動や、 Rackの公開鍵の再設定/Rackの初期化/Rackの削除等が行えるようになります。

で、サーバにログインするには、RackhubにSSHの公開鍵を登録した状態で、 ダッシュボードに表示される、 SSH 接続方法 に表示されるコマンドを、 各種端末等で実行すれば、そのまま接続できます。

……と、言いたいところなんですが、このSSH接続も含め、 Rackへの接続は、Rackhub側のDNSの自動設定が終わるまで、

実行してはなりません 。

というのも、Rackhub側のDNS設定は、大体1分ぐらいで終わるそうなんですが、 コレが終わる前にRackへアクセスしてしまうと、DNSレコードが無い、という、 DNSのネガティブキャッシュが残ってしまい、待てど暮らせどもアクセスできない、 というコトになります。というか、俺がそれにハマって、

  • @keikubo さんにアドバイスもらうまで、 にっちもさっちも行かない、という自体になってました>_<;

ちなみにこのDNS関連の問題ですが、 たぶんRackを作ってから5分ぐらい待ってからアクセスすると、 よろしいのではないかと思います。

Dropbox ドリブンな環境の構築

さて、Rackにつながらねーというトラブルも有ったものの、 今回は無事アクセスできたので、今度はDropbox Drivenな、 コマンド実行環境を整えたいと思います。

Dropboxのインスコと自動起動の設定

まずはともあれDropbox CLIのインスコをします。

Dropbox for Linux のCLIは、

  1. 32bit
  2. 64bit

の二種類ありますが、RackhubのrackはCustomizedなDebian 64bitなので、 SSHでつないでから、各種端末で、

$ cd ~ && wget -O - http://www.dropbox.com/download?plat=lnx.x86_64 | tar xzf -

を実行して展開 && インストールした後、

$ ~/.dropbox-dist/dropboxd

を実行します。

dropboxdを実行してしばらくすると、 DropboxのアカウントにリンクさせるURIが表示されるので、 リンクさせたいDropboxのアカウントにログインした状態で、 先ほど表示されたリンクにアクセスし、リンクを承認します。

ちなみに。

このリンクするアカウントですが、普段使いのDropboxアカウントとリンクすると、 サーバにアップロードしたくないファイルも全部ひっくるめて同期しだすので、 サーバと同期する用のDropboxアカウントを用意した方が良いかと思います。

僕の場合、今回Dropboxで同期させたかったファイルはnimの関連ファイルだったので、

  1. 普段使いのDropboxアカウントに、共有用のフォルダを作成
  2. サーバと同期する用アカウントを、さきほどの共有フォルダに招待
  3. サーバと同期する用アカウントで、さきほどの招待を承認

という感じで共有を行いました。

これで、同期周りの設定が終わるので、 今度はdropboxdの自動起動の設定を行います。

Debianでdropboxdを自動実行するのには、 init.dに起動スクリプトを用意するのが作法らしいです。

で、このinit.dに配置する起動スクリプトに関しては、 ゴッゴル先生に問い合わせた所、

  • etc/init.d/dropbox — Gist https://gist.github.com/592840

というそのまんまな先人の成果があったので、 これをそのまま利用させていただきました。

ちなみ僕が利用してる/etc/init.d/dropboxでは、

  1. DROPBOX_USERSrackhuberを設定
  2. start-stop-daemon/sbin/start-stop-daemonのようにフルパスで指定

という風にしています。

あとはこの/etc/init.d/dropboxをサーバの起動時に読み込むように、

$ cd /etc/init.d
$ sudo update-rc.d dropbox defaults

と指定します。

これでまあ、起動時にDropboxを起動する、というのができます。

Dropboxドリブンにコマンドを実行する

Next!

さて、これでDropboxの設定は終わったわけですが、 Dropboxドリブンにコマンドを実行するには、 何からの形でDropboxの同期終了を検出し、コマンドを実行せねばなりません。

この同期終了の検出に、僕はinotify-toolsパッケージに含まれる、 inotifywaitを使用しました。

inotifywaitはどうやらデフォルトでは入ってないようなので、 SSHでつないだ端末上で、

$ sudo apt-get install inotify-tools

として、inotifywaitを実行できようにしました。

んで、これでinotifywaitを使う準備は出来た訳ですが、 Dropboxの同期検出方法は、

を参考に、下記のような感じで、監視する事にしました。

/usr/bin/inotifywait -e moved_to -mrq ${TARGET} | while   1  ; do
message=""
while read -t 5 line; do
message="${message}${line}@RET@"
done
if   -n "${message}"  ; then
$EXECUTE_COMMAND
fi
done

まあ実際には、他にも色々な設定等をしているんですが、 キモとなる部分はこんな感じです。

あとは、この部分を使ったスクリプト等を、 例えばwatchgen-on-serverという風な名前にして、 テケトーなフォルダに保存して、そのスクリプトをバックグラウンドで実行すれば、 大体うまく行くかと思います。

まあ僕の実際に動かしてるスクリプトは、

  • <https://github.com/nyarla/blog.nyarla.net/blob/master/watchgen-on-server https://github.com/nyarla/blog.nyarla.net/blob/master/watchgen-on-server>
  • <https://github.com/nyarla/diary.nyarla.net/blob/master/watchgen-on-server https://github.com/nyarla/diary.nyarla.net/blob/master/watchgen-on-server>
  • <https://github.com/nyarla/iyh.nyarla.net/blob/master/watchgen-on-server https://github.com/nyarla/iyh.nyarla.net/blob/master/watchgen-on-server>

辺りで公開してるので、良ければ参考にしていただければ。

Dropbox ドリブンコマンド実行スクリプトを、サーバ起動時に起動する

More NEXT!

で上記スクリプトを管理するのに、いちいち端末から起動して云々、 は面倒でやりたくなかったし、スマートのかけらもなかったので、 上記スクリプトも、init.dで管理するようにしました。

もうそろそろ説明も疲れてきた>_<;のでスクリプトをどーんど掲載。 大体こんな感じ:

homedir='/home/rackhuber'
nimdir="${homedir}/Dropbox/nimpub"

SITES='blog.nyarla.net diary.nyarla.net iyh.nyarla.net gadgets.nyadgets.net'

start() {
echo "Starting nimgen..."
for site in $SITES; do
/sbin/start-stop-daemon -b -o -c rackhuber -S -x "${nimdir}/${site}/watchgen-on-server"
done
}
stop() {
echo "Stopping nimgen..."
for site in $SITES; do
pkill -u rackhuber -f "/${site}/"
done
}

status() {
for site in $SITES; do
PID=`pgrep -u rackhuber -f -o "${site}"`;
if   -z $PID  ; then
echo "nimgen for ${site}: not running"
else
echo "nimgen for ${site}: runnning"
fi
done
}

case "$1" in

start)
start
;;

stop)
stop
;;

restart|reload|force-reload)
stop
start
;;

status)
status
;;

*)
echo "Usage: /etc/init.d/nimgen {start|stop|reload|force-reload|restart|status}"
exit 1

esac

exit 0

やってるコトとしては、

  1. ${nimdir}/${site}/watchgen-on-serverstartで起動
  2. 上記の起動した時の関連プロセスをpkillを使ってstopで停止
  3. 関連プロセスが起動しているかを、pgrep -oを使って一つだけ検出

というぐあい。まあ細かいところは、スクリプト自体と、 あとは各種コマンドのmanを見てください。

で、あとはdropboxの時と同じように、updated-rc.dで起動時の登録をします。

以上が大体の作業

という感じで、 以上がRackhubでDropbox Drivenなコマンド実行環境を整える方法でした。

まあこの他にも、

  1. $ perlbrew install perl-5.14.2
  2. $ perlbrew lib create nim
  3. $ perlbrew switch perl-5.14.2@nim
  4. $ cpanm -v Module::Install
  5. $ cpanm -v Module::Install::AuthorTests
  6. $ cpanm -v Module::Install::Repository
  7. $ cpanm -v Test::Base
  8. $ cpanm -v https://github.com/typester/nim/tarball/master
  9. $ cpanm -v Data::Page Text::MultiMarkdown DateTime::Format::DateManip
  10. $ mkdir -p ~/local/ && cd ~/local/ && git clone git://github.com/nyarla/nimext.git nimext
  11. $ cpanm -v Net::Amazon Cache::FileCache Data::Cloud

という感じのコマンドを実行していますが、これは簡単に説明すると、

  1. perlbrewで静的生成に使うnim用のバンドルを作り
  2. perlbrewでバンドルを切り替え
  3. @typesterさんのnimをインスコするためのモジュールをインスコ
  4. nimをインスコ
  5. nimに必要な追加モジュールをインスコ
  6. 自作のnim拡張をgit clone
  7. 自分のnimによる静的生成サイトで必要なライブラリをインスコ

という感じです。

まあ上記作業で今までMacbook Airに頼っていた、ブログとか日記の記事公開作業が、 なんとDropboxにファイルを追加するたけで行えるようになったので、 僕としてはRackhubイヤッッホォォォオオォオウ! という気分であります。

まあ大分長い記事となりましたが、以上が、最近公開されたRackhubを使った、 Dropbox Drivenなコマンド実行環境の構築の仕方となります。

長い記事ではありましたが、お読みいただいてありがとうございました。

まる。

#FIXME