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

読了まで:約10分


概要: 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

アバターアイコン兼ロゴ

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。次に備えて待機中。

今は趣味でプログラミングをして生活しています。