全体的に千葉産です

画像サーバーの分離

heroku大好きなので「アプリ作ろう」ってなったらまずheroku上げられる構成になるかを考えるんだけど大抵は画像の保存先がネックになっている。herokuはそのまま画像保存すると消えちゃうしね。

何も考えずにs3に上げるってのが良いんだけど重たい画像や量が多くなると通信費がかかってしようがなくなる。よくある話。

過去にoctopressで画像ブログを作ってjenkinsで回して保存先をs3にしてたんだけど月2千円かかるようになってしまったのでvps借りてそっちに移行、翌月からは200円とかに戻ってめでたしめでたしって時があった。 その時は静的サイトだからぶっちゃけどうとでもなったんだけど、それからrailsのアプリとかを作って画像結構保存するようなの(gifなので相当通信料かかるなと予想できる)を作るときはoctopressで借りたvpsにデプロイして動くようにとかをした。

そのためにchefのレシピをレポジトリに含めたりchefレシピの検証にVagrantファイル追加したりとかcapistranoの設定とかciで自動でデプロイしたいからその時に使ってたwerckerでデプロイするのどうすんだとか調べたり等々していた。画像サーバーのために3~4つの作業が増えた。あぁあと監視とかも増えるから5つとかそれぐらいか。というか個数で判別できないしアプリやら環境やらによって作業量は増えたり運良ければ減るのでなるべく作業すべきor考えるべき項目を早めに外部に切り出すor自分の作業をもっと大切な部分に注げるようにしておくべきなので減らしたい。 s3に保存するんだったらpaperclipのstorageをfileからs3に変えてawsのキーを設定してやれば完成だ。簡単だ。

chefの設定やらをしてアプリサーバーと画像サーバーを一緒に出来るようにしたけど運良くアプリがヒットしてアプリ層の増強が必要になって増やす必要が出てきた場合はどうするんだよ〜。とかあるので理想で言えばs3でやりたいのだけれどs3通信料とかお金かけたくないのでどうにかしたいなってのが今回の記事の議題。

そこらへんどうすればいいのかなぁとかぼんやりしてたんだけど

http://docs.komagata.org/5226 のエントリでそのままの知りたいことズバリだったのでみんなやっぱりそこら辺の事悩んでるんだなぁ。俺も知りたいから有益な情報を得るべくはてブコメントを開いて解決策を得ようとしたのですが全く参考にならない。 全然見当違いの事を言ってる奴もいるしで非常にガッカリしていた。なんだよ「nfsじゃないとそもそもいけないの?」だよどこに目を付けたらそんな何を読んでんだか解んないコメントが出てくるんだよ。ちゃんと目を付けて文章を読めよ….

とか思ってたのですがはてブのコメントにツッコミを入れていくのは本位ではない。画像サーバーの分離だ。herokuでも使いたいのでnfsマウントは対象外。

さくらvps使って画像とか動画配信しようって記事 http://ssig33.com/text/Docker%20%E9%81%8B%E7%94%A8%E3%81%97%E3%81%BE%E3%81%8F%E3%81%A3%E3%81%A6%E5%BE%97%E3%82%89%E3%82%8C%E3%81%9F%E3%81%97%E3%82%87%E3%81%BC%E3%81%84%E7%9F%A5%E8%AD%98 あって、まぁサーバーはさくらvps使えば良くって

アプリが一旦画像を保存してrsyncで画像サーバーに配信するって方法もある。 http://www.atmarkit.co.jp/fcoding/articles/rorcgm/02/rorcgm02a.html 処理時間かかりそうだけどスケールしやすくて簡単そうではある。力技っぽいしテストだるそう

最近だと 【AWS発表】S3の新しいイベント通知機能 出来たし、s3に画像だけ保存して画像サーバーでsqsポーリングさせておいて画像来たら設置させるとか。

RESTのAPI作っておいて画像設置するとか http://qiita.com/ocadaruma/items/d12a80f7dbe07dd851a4 RESTのAPIアプリ自前で作っておけばなんかもうどうとでもなりそう。

とかそんな感じかなぁ。 RESTのAPI作っておいて複数アプリからの画像保存するようにするのがあとあと良さそうな気もするけど、本当にそんなもんなのか?