素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

僕とRackhubの15日間戦争(Rackhub試してみたメモ)

遠い昔に知人の自宅サーバを間借りしてサイトを作っていたのだがいつの間にオフラインになったのでMacBookで開発をしていたのだが、他人に何かを見せるときはURLがあると良いということで、VPSを借りることにした。 従量課金は不安だし、結局は遊びにしか使わないのでとりあえず動けば良い。 Skypeで知りあいの技術者に情報を募ったところ

とのことだったので、とりあえずRackhubを15日使うことにした。

まず、sshでログインした後node --versionしたら驚きのv0.6.15で、nvmで見てみると0.7くらいのちょい新しいのが入っていたけど、今は0.10.1の時代なので新しいのを入れようとした。しかしnvm install v0.10.1すると失敗するので、どうしようもないので

$HOME/.nvmを削除し、grep nvm $HOME/*し、パスが張られている部分を見つけてすべて除去し、nodebrewを入れた。

ただし、nodebrewもそのままでは0.10.1をコンパイルするとpythonが古いのが原因で失敗するので(また、binaryで入れるとnpmが入らないので注意)、pythonを新しくする。 pthon --versionしたら2.7.3で、pybrewで新しいもの( Python-3.2.3)に切り替えられるようだがうまくいかなかったので、alias python=python3してからnodebrewをやり直した。

さて、node + expressでとりあえずウェブアプリを動かそうと思い、express -eして、 PORT=80 node app.jsしたところ、portがエラーになった。検索するとapache/nginxなどほかのアプリがport 80を使用していなかったとしても、root以外はport 80(1000番台あたりのやつまで)をlistenできないそうなので、nodeは8080で動かし、nginxでリバースプロキシを張ることにした。参考にしたのは、https://gist.github.com/joemccann/644282 ただし、nginxは標準では動いていないので、とりあえずsudo nginxした。

nginxを通さない方法も試したが、やめた。これはiptablesで8080を80に飛ばす設定。 sudo apt-get install iptables sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 失敗したような画面がでるが動くので気にしない。

nginxのバージョンを見るとWebSocketを通さない古いものだったので新しいものに入れようかと迷ったが、適当なアプリケーションを起動して確認すると、そもそもRackhubがWebSocketに対応していないことが判明した。とても残念。

WebSocketを使わなくてもsocket.ioの場合はxhr-pollingなどの代替手段が用意されているので特に問題はないが、コンソールでエラーが出る+初期の接続が遅くなるのでアプリ内で

io.configure(function () {
  io.set('transports', ['htmlfile', 'xhr-polling', 'jsonp-polling']);
});

とした。

その後、デーモン化するためにforeverを入れ、upstartに登録しようと思ったが、nginxもdaemonになっていなかったし、面倒くさくなったのでやめた。 そもそもRackhubの説明を見ると、パパっとつくったものをURL付きで簡単に公開できるというのがコンセプトなので、いまいち、用途が違うような気がしてきたので、とりあえず15日間遊んだらやめることにする。