読者です 読者をやめる 読者になる 読者になる

Rails でつくった FeedlyGraph を Sqale から DigitalOcean に移行した

やってみた 作った Rails Ruby

はじめに

以前 Heroku から Sqale に移行した FeedlyGraph を DigitalOcean に移行したので、その経緯や作業を書く。


移行の経緯

Sqale のデプロイが今ひとつ理解しがたく、うまくいかなくなったことがきっかけ。
Sqale のウリはサーバー管理が不要であることで、Rails アプリは git デプロイできるようになっている。
が、ruby のバージョンを変更しようと検証してから、git デプロイがうまく動かなくなった。


その後は毎回手動で bundle install やアプリケーションの起動をしなければならなかった。
しかも bundle install すると、HDD 容量 5GB を超えるために古いバージョンの Gem を手動で消したり・・・といった具合。
これでは PaaS でもなんでもない。


アプリケーションとしての Rails 初心者である僕が、なおさらよくわかっていないインフラ周りをいじるのはしんどい。
加えて Sqale の仕組みを理解する余裕は到底なかった。


Sqale が悪いというわけではない。
正しい使い方をすればうまく動くのだと思う。
ただ自分にはわからなかった。
PaaS 全般に言えることだが、自分で管理もできる人がそのコストを委譲するために利用する、というのが正解なんだと思う。


あとはポジティブな理由がこんなところ

  • DigitalOcean を使ってみたかった
  • ギョームで使い始めた ansible を使いたかった


移行作業

ざっくり調べて、nginx + unicornホスティングするというのがスタンダードなやり方だというのがわかった。
それに沿った ansible の playbook の公開情報を探して、少しずつ試しながら構成を作っていった。
完成したのが以下。

github.com

GitHub で公開しているファイルでは、FeedlyGraph 独自の処理は除外してある。たとえば cron。

大体は hosts をいじれば事足りるはず。


参考資料

playbook 作成にあたって主にお世話になったサイトをまとめておく。

ansible の基本構成

iptables 周辺

トラブルシューティング


検証

ついでに ab でパフォーマンス検証してみた。

以下、 ab -n 2000 -c 100 http://yourhost.com で行った結果。

Sqale

Server Software:        ngx_openresty/1.2.6.6
Requests per second:    46.28 [#/sec] (mean)
Time per request:       2160.926 [ms] (mean)
Time per request:       21.609 [ms] (mean, across all concurrent requests)
Transfer rate:          295.76 [Kbytes/sec] received


DigitalOcean(nginx)

Server Software:        nginx/1.8.0
Requests per second:    120.99 [#/sec] (mean)
Time per request:       826.492 [ms] (mean)
Time per request:       8.265 [ms] (mean, across all concurrent requests)
Transfer rate:          766.74 [Kbytes/sec] received

マシンの性能自体は DigitalOcean に軍配が上がった。


DigitalOcean(WEBrick)

ついでに rails server で起動した場合も試してみた。

Server Software:        WEBrick/1.3.1
Requests per second:    87.30 [#/sec] (mean)
Time per request:       1145.541 [ms] (mean)
Time per request:       11.455 [ms] (mean, across all concurrent requests)
Transfer rate:          554.13 [Kbytes/sec] received

やはり nginx + unicorn のほうがリクエストをさばく能力は高い模様。


まとめ

Sqale は AWS の Tokyo リージョンを利用していると思われるため、レイテンシが有利。
それでも DigitalOcean はシンガポールを選べばそこまで遅いと感じることはなく、日本からの利用にも十分耐えられることがわかった。


また、ansible の playbook を作ったことで、ふと思い返していじるときでも、サーバーの見通しがつきやすくなった。
インフラをコード化するメリットはこういう面でもあると思う。


あとはコスト面。
サーバーの維持費が ¥940/month から $5/month になった。
やはり個人でサーバー持つには Windows はキツイ。Linux 一択だ。


最後にお詫び。
移行作業中に間違って Sqale にデプロイしてしまい、しばらくデータ取得が正しく行われていなかった模様。

f:id:khei-fuji:20150816133236p:plain

利用者の方にはお詫び申し上げます。


入門Ansible

入門Ansible