1. h173.club
  2. 012: 個人Webアプリの運用を0..
2022-07-29 21:21

012: 個人Webアプリの運用を0円でやってみる

@kenchanと@takapi86の二人で、本を買うなら電子書籍と物理書籍のどちらか?という話と、takapiが個人で開発しているRailsアプリを0円で運用している話などをしました。

00:01
ひとなみクラブは、GMOペパボEC事業部の二人の高橋が、 社内の出来事や最近気になっている技術について話すポッドキャストです。
みなさんこんにちは、くんさんです。 こんにちは、たかぴぃです。
いやー、7月になって、 しばらく涼しかったんですけど、今日あたりからまた、今日じゃないか、
先週末あたりからまた暑くなってきてね、大変ですよね。 そうですね、もう今日は朝からめちゃくちゃ暑かったですし。
今日ちょっと昼間にコンビニまで買い物に行ってきたんですけど、 最初朝起きていこうと思ってて、
朝にゴミ捨てに行った時はすげー涼しくて、これぐらいの時だったらまだ行けるなと思って、 ちょっと家でゆっくりして、
10時前くらいですかね、に出たらもうやばくて、 いや、本当に早朝に行けばよかったと後悔しましたね。
あー、なるほど。 10時前後ぐらいからやっぱり暑くなってくるやつがね。
結構もう10時はダメなんだなっていうのがよくわかりますね。
まあそんな感じなんですけど、今日ちょっと最初に軽めのトピックで一つ話したいなと思うことがあって、
たかぴーは物理の本って買いますか?
私はですね、基本的に物理で買いますね。
あ、そうなんだ。
Kindleとかも持ってるけど、物理で買うことが多いって感じですか?
そうですね。Kindle、Fire、HDは前買ったんですけども、 結局それは使わず物理をですね、買い続けてますね。
そうなんですね。なんか自分は結構なるべく、今は電子書籍にしようと思ってるんですけど、
電子書籍ストアで、Amazonもそうなんですけど、よく言われることとして偶然の出会いというか、
だらっと本を眺めて買うみたいなことがあんまりしにくいというか、やりにくいなって思うことがあって。
関連する本っていっぱい出てくるんですけど、本屋のあんまり普段興味がないような本棚を眺めて、
なんか良さそうな本を探すみたいなことが、探すというか目につくみたいなことがあんまりないなと思ってて。
定期的に自分も本屋に行って本を買ったりするんですけど、
その時なるべく気をつけてるのが、本屋で見つけた本をネットで検索して買わないようにしようとしてて。
なるほど。
やっぱ本屋に行って見つけた本は、その見つけた本屋で買うっていうのを結構意識してやってるんですよね。
家電とかもそうなんですけど、本屋とか物理店舗に行ってるからこそ見つけたようなものだったり、
03:07
物理店舗の人と話して買うことを決めたようなものって、やっぱりそれにちゃんとコストがかかっていて、
そのコストによるメリットを私が享受した結果、買ってるので。
それをなるべく安いからとか便利だからって言って、電子書籍に言えるのはちょっとやめようと思って、なるべく本は買ってるんですけど、
そうすると困るのが、これ電子書籍で買ったっけ、物理で買ったっけっていうのがわかんなくなったり、
物理の本、場所取るので、どこにしまったかなとか、そういうことがあるので、
この辺そろそろなんとかテクノロジーでならんのかなっていうのは日々思っていますね。
なるほど。確かに。
なんでこんな話してるかっていうと、少し前にランチで同僚と話してる時に、本をどこで買うみたいな話をした時に、
こんな話が出てきて、本屋で見つけた本はちゃんと本屋で買おうねって話をしたので、改めてここでちょっとさせてもらったって感じです。
今日は同僚はそんな本屋の話だったんですけど、たかぴーは何か今日話したかったトピックってあるんですか?
そうですね、トピックとしては前回話した、自作でウェブアプリ、レールズアプリケーションを作ってるよって話をちょっとしたと思うんですけど、
ちょっとそれに関連してどういう構成でやってるのかみたいなところを、だいたいこういったウェブアプリケーションを個人でやるとすると、
ヘロクだったりとかAWS使ったりで少しコストがかかってくるところがあると思うんですけども、
私今6年間運用してるんですけども、今サーバーにかかるコスト今0円で運用してるんですね。
すごい。
なのでそこを0円でどうやってやってるのかみたいなところをちょっと構成的なところをお話できればなと考えてます。
いいですね。結構プライベートなアプリで、最初は趣味で勉強も兼ねてみたいなのでやっていっても、
続けるってなるとなかなかコストの面を無視できなくなってくるので、どういう工夫があるかってみんな結構興味があるところかなと。
月500円とかかけても年間6,000円くらいかかるとなるとやっぱり続けるのがごっくんになったり、
ある程度モチベーションがないと続けられないんですけど、0円だったら運用してもいいかなみたいなところになると思うんで、
ぜひ参考にしていただければなと思ってますし、こういう構成だともうちょっとうまくできるみたいな意見があったらフィードバックいただけると嬉しいと思っております。
いいですね。じゃあまずはそのプラットフォームですか。どういうところで動かしてるんですか。
06:00
メインとなるのは、実はそのアプリケーションサーバーだと思うんですけど、GCPのコンピュートエンジンっていう、
AWSでいうとEC2みたいなところのインスタンスがあるんですけども、実はこれのマシンタイプでE2マイクロっていう種類のインスタンスがあるんですけど、
それを使うとかなりスペック的には抑えられていて、仮想CPUが2でメモリが1ギガっていう少し抑えめのスペックではあるんですけど、
それを1台1ヶ月か、稼働しっぱなしでも無料で使えるっていうものに、無料枠の範囲に収まっているみたいで、それを使っております。
なるほど。GCPの無料枠であるインスタンスだったら1ヶ月動かしっぱなしでもその無料枠に収まるっていうスペックのマシンがあるんですね。
そうですね。
じゃあそのマシン1台で運用してるってことなんですか。
そうですね。1台で運用しているので、そのアプリケーションの特性上、もうちょっと負荷がかかるよみたいなところだとお金がかかってくるんですけど、
私の使っているもののレベルであれば十分に動く範囲なので、それで動かしております。
そうか。メモリが1ギガあればDBサーバーとアプリケーションサーバー一緒に動かすぐらいは余裕があるって感じなんですかね。
そうですね。今は別の構成になってるんですけど、当初エンジンXとユニコーンとMySQLを全部入れても一応動くようになっていたというところなので、
十分な構成かなと。最低限動かす分には十分な構成かなと思っております。今はユニコーンだけ動かしているという感じになってます。
へー。
なのでちょっとこの後他にも出てくるんですけど。
じゃあ今はサーバーで動かしたいのはユニコーンだけってことなんですけど、他はどういうふうに今なってるんですか。
他は先ほど話に出てきたMySQLですね。MySQL、データベースについてはClearDBっていう、
ヘロクを使っている方はアドオンとかで利用されている方もいるので馴染みがあるかもしれないんですけど、
実はこのClearDBも5MBまでだと実は無料で使えるっていう風になってるんですね。
へー。
私の運用しているサービスだとテキストの簡単な文字しか入れられてこないくって、
週に30件ぐらい投稿があるぐらいなので、5MBで十分に稼働できているということでこちらを使っています。
なるほど。じゃあデータベースはヘロクのアドオンの方を使ってるってことなんですね。
そうですね。
じゃあGCPのインスタンスからヘロクのDBにつないでる。
09:03
そうですね。ちょっと外のルートを通ることにはなるんで、
セキュリティ的にはどうなのっていうところもあるかもしれないんですけど、
主要で使っているレベルのサービスで漏れても特に問題ないというか、参加しますぐらいの情報しかないので、
問題ないと思っておりまして、こちらを使っております。
なるほど。
確かに結構データソースというかデータベースを無料で運用するのがなかなか大変っていうのは、
個人サービスやってる方はみんな大変だなと思ってる部分かなと思うので、
それのデータ量次第ではありますけど、
クリアDB使うと無料である程度のアプリケーションが動かせることがありそうって感じなんですね。
はい。
なるほど。ちなみに他に工夫してるというか、さっきだとエンジンXの話がありましたけど、その辺はどうなってるんですか?
エンジンXに関しては最初は前段に入れていたんですけど、最終的には取っ払ってしまって、
ユニコーン直に受けるようにしています。
なるほど。
これはそこまでのスペックが要求されてないのでというところと、
簡易なサービスなので取ってしまいましたという感じですね。
なるほど。
その代わりに前段にCDNを導入してまして、
クラウドフレアで無料で使えるCDNのプランがあるんですね。
そちらで静的ファイルだったりとかっていうのはキャッシュするようにしたりとかを設定していますし、
実はこのCDNサービスは自動でSSL証明書が付いてくるので、SSL証明書も使えるという感じになっています。
なるほど。じゃあ静的なアセットというか、JSとかCSSとかはクラウドフレアから配信してるって感じですか?
はい、そうですね。
アプリケーション側のSSLというか、それはどうしてるんですか?
アプリケーション側のSSLに関しては、今完全にクラウドフレアのCDNからアプリケーションまではHTTPで通信をしてるんですけども、
IPアドレスのブロック設定とかホワイトリストの設定でCDN以外からは受け付けないようにしているので、
実質ルート的には必ずSSLを通るルートになるという感じで運用しています。
おそらくレールズアプリですけど、レールズアプリそのものの前にもクラウドフレアのCDNがいるっていう感じなんですかね?
そうですね。
なるほど。よくあるレールズアプリだと、アセットはドメインを変えてCDNから配信してみたいなのをやるじゃないですか、よく。
12:00
そうじゃなくて、レールズアプリのドメインは1個で、そこからCSSもアプリケーションの回すHTMLとかも配信するんだけど、
それのまるっと前段にクラウドフレアのCDNがいるっていう感じなんですね。
そうですね。
なるほど。
パスでここからはキャッシュするみたいな設定ができるので、そこでキャッシュさせていて、その他は除外して動的に動かすところは除外しているっていう感じで実現しています。
面白いですね。なるほど。
ちなみにそれの運用はどうやって探したとか、どういう変遷があったんですか、今の構成になるまで。
そうですね。これはもうお金をひたすらかけたくなかったので、とにかく調べなかったっていう感じですね。
無料でそれぞれできるものをアプリケーションサーバーとDBとウェブサーバーがあれば、ウェブサーバーとかCDNみたいなのを無料でやるやつを片っ端から調べてみて、
順番に使ってみて、これならいけそうっていうのが今の構成って感じなんですね。
そうですね。ちょっといろいろ試したりとか、Let's Encryptとか導入したりとかしてたんですけど、運用面でCDNで十分とか、そういう判断をしていろいろ試行錯誤しつつ、今の構成になったっていう感じになりますね。
なるほど、面白い。CDNの話、自分もちょっとしたくて、私も最近自分のウェブサイトの前段にCDNを入れようとしてたんですよ。
結果的に今外して入ってないんですけど、私はAWSのクラウドフロントを使おうとしてて、ちょっと前に、去年あたりにAWSの無料枠がいろんな領域で拡張されるっていうのが急に発表されて、
今はクラウドフロント、個人サイトだったらほぼ無料で使えるぐらいの量が無料枠に入ってるんですよ。
そうなんですね。
なので、それでやろうとしたんですけど、1個これダメだっていうことが分かったのがあって、今私バックエンドをレンダーっていうこの前話したPaaSでやってるんですけど、
なんかそういう、ヘロコもそうなんですけど、あの辺のPaaSって前段にLBが当然、LBというかリバースプロキシがいて、それがその実際のアプリケーションが動くコンテナに名前を解決させながらルーティングして上手く動くっていう仕組みになってると思うんですよ。
で、これがちょっとクセもので、CDNを前に置いたり複数のウェブサーバーを多段にしたときって、ホストヘッダーがうまく渡らないんですよね。
それを解決するためにいくつかのHTTPヘッダーがあると思うんですけど、
15:01
それもさらに多段になっちゃって、ホストアプリケーションにたどり着いたときには、本当に配信したかったCDNに当ててるドメインがどうやっても取れないっていうことがなんとなく分かって、
一応レンダーはレンダーで、私は独自ドメインで運用してるんですけど、独自ドメインじゃないホストもあるんですよね。
なんとかレンダーapp.comみたいなドメイン、HELPと一緒な感じでアクセスできるんですけど、そっちで来ちゃってて、
それそっちで来ちゃうと何が困るかっていうと、RAILSがリダイレクトしたり、ホスト名のパスを生成するようなときにちょっと工夫がいるっていうのと、
致命的だったのがCSRFのチェックができないというか、緩くしないといけないっていう障害を見つけてしまって、
RAILSのCSRFチェックってホストヘッダーっぽいやつも判断してるんですよね。
それがうまく渡ってこないせいで、自分がいつも記事を投稿しようとすると毎回エラーが出て、
なんてなんだろうなと思いながらデバッグログを仕込んでいったらどうもCSRFの中にあるホストヘッダー関連のチェックのところをどうしてもこれは突破できなさそうということが分かり、
ちょっと今は外してしまったんですよね。パースの前にCDNを入れるっていうのは結構苦労するところがあるんだなっていうのが学んだので。
なるほど。確かに。X4DET4が、フォアデットホストでしたっけ?ちょっと忘れちゃいました。その辺のヘッデーが伝わってこない。
そうなんですよ。これはちょっと困ってしまったので、ちょっと違う構成にしてちゃんとCDN入れようというふうに今は思ってます。
ちょっと横に反れてしまったんですけど、あとはこのアプリの運用の話で話しておきたいことってありますか?
そうですね。普通の人だったらお金がかかるっていうところがあって、ドメインですね。ドメインはどうしてもお金かかるんですけど、
ペパボの人はフクリ構成ドメインを使えるので無料になってるっていう感じでした。
それのドメインに使ってるんですね。
そうですね。
ドメインも結構サービスを作るときに最初に取りがちじゃないですか。
そうですね。
取りがちというか、まず名前を決めてアプリ作ろうみたいなところがあるので。
あとDNSって取られちゃうと取り返せないというか。
そうですね。
大事だから先に取るし、自分もそうなんですけど、いくつか使ってもいないけど取りあえず取ったみたいなドメインがバカバカあって、
18:01
そういうのもうまく使えるといいなと思ってますけどね。
確かに。
でもいいですね。フクリ構成ドメインを総顧で使ってるって感じなんですね。
はい。
じゃあ本当に無料ってことですね。
もうすべて無料でやってます。
じゃあそうか。
あとはあの辺のデプロイとかソースコードの管理とかはどうやってるんですか。
ソースコードの管理に関してはGitHubのですね、プライベートのリポジトリを使っていまして、
そのプライベートリポジトリ今無料で使えてるんですけど、それが無料になる前はBitbucketを使ってまして、
そちらであれば無料でプライベートのリポジトリを使えるのでそっちで管理してたんですけど、今は移行しているという感じですね。
デプロイ周りに関してはCapistranoで実行してデプロイしてるって感じになります。
なるほど。じゃあローカルからデプロイしてるって感じなんですね。
そうですね。
なるほど。
今Dockerで動かすように構成を変更していて、デプロイ時にDockerの再起動が行われるようにしているっていう感じです。
なるほど。じゃああれですね。前回話したロー人形状態になってるわけですね。
そうですね。ロー人形状態。一度試してみているんですけど、ちょっと今課題となってるのが一瞬瞬断してしまうみたいなところがあるんで、
そこをどうしようかなとは思ってるんですけど、個人サービスなんでバンバン瞬断してますが、
本番導入するときはちょっと何とか課題解決をして入れないとなと思っています。
いいですね。いろんなプラットフォームを試す遊び場になってるし、仕事にも役立つときがあるって感じですね。めっちゃいいじゃないですか。
そうですね。
すごい。
そうなんですよ。しかも人に使ってもらっているところがあって、そこがいいプレッシャーになってるんですよね。
ちょっと1時間ぐらい動かないと、動かないんだけど普通に連絡が来るので。
すごい。そんなレベルで使われてるんですね。
なので、さすがに止めっぱなしは良くないので、いい感じの緊張感を打ちながら運用できてるっていうのはすごく趣味をちょっと超えたところでできてるっていうのはいいなと思ってます。
いいですね。そういうこと。すごいちゃんと運用しなきゃいけないアプリなんですね。
そうですね。
はい。じゃあ今日はそんなところですかね。
はい。
他何かありますか?話しておきたかったこと。
そうですね。他は大丈夫かなと思います。はい。
はい。じゃあ今回第12回目は本屋で見つけた本は本屋で買うっていう話と、たかぴーのレールズアプリを0円で運用するティップスを紹介しました。
21:13
じゃあ第12回そろそろ終わります。ご視聴ありがとうございました。
ありがとうございました。
21:21

Comments

Scroll