Dockerが隆盛な状況において、コンテナを使った個人的なWebアプリケーションを構築したノウハウ

個人で運用している-web-サービスをどう管理しているか-2018年版-3486f3f69424

 個人でやっているWebサービスの管理方法を、オープンにしてくれている記事を見つけた。サービス選定の考え方とか非常に参考になった。サービス利用料を天秤にかけた判断をやっていて、個人でやるにはそこまではやっぱりねというところで安心したり。
 ぼくも趣味と勉強のためにこのブログのエンジン自体から開発して、ホスティングサービスを選んだりとやってきた。そのあたりで考えてきたことをここでまとめておく。


コンテナホスティングサービス
============================
 VPSとかIaaSとか避けたい。避けたい。
 このブログはDockerを使ってコンテナとして開発したものを、コンテナホスティングサービスを使って運用している。
 なぜコンテナを使ったかと言えば、サーバ構築がすんげー楽だし、構成管理もDockerfileを書けばそれでやっていける。AWS、Azure、GCPなどの巨大クラウドベンダが2017年のうちにこぞってクラウドでコンテナを使えるようにしただけでなく、そのさきの管理サービスを作っていたので、もうコンテナに手を出すのを待っている段階ではなくなったと思っている。コンテナ技術でサーバの用意が楽になるし、もうそれを利用する基盤は整ってきている。もしコンテナがこの世から消えるようなことがあるならどこかのPaaSを利用するまでである。このブログの初期はAzureのPaaSで運用していたので、移行はたいしたコストにならないとわかっている。
 まあそんなことを言ってもAzureなどの主要クラウドは利用料金が高い。ホビーユースはちょっとねというところ。だからさくらインターネットのArukasに期待していたが、ついにはベータから脱皮せずに消えていった。
 コンテナホスティングサービスはHyper.shを使っている。コンテナを動かす仕組みとしてはDockerとは別のものを使っているようなのだが、コマンドなどはDockerとほぼ同じようなもの。Dockerの中の人が「すげーDockerライク」と言うぐらいで、"docker restart mongodb"が"hyper restart mongodb"てな具合。dockerをhyperにしたら動く。
 Hyper.shの料金は、一コンテナ当たり、VPSと同等程度の金額。Price表。このブログはフロントのNginxコンテナと.NETCoreのアプリコンテナを使っていて月額1200円ぐらい。それに加えてVPSで付き600円ぐらいで運用しているデータベースがあるが、これもコンテナにしてしまおうかと考えている。
 Hyper.shの弱点は、まだアジアにリージョンがないことか。ロサンゼルスとドイツのフランクフルト。アジアリージョンは検討中らしい。このブログはロスのサーバを使っている。レイテンシはまあ、あきらめている。それよりコンテナ使いたかったし、ここ以上に手軽に使えるコンテナホスティングサービスが見つけられなかった。
 Hyper.shのいい点は、秒単位課金なこと、コンテナがすぐ立ち上がることあたりか。試験環境を用意するのも速いし、不必要になったタイミングでコンテナを落とせば大したコストはかからないだろう。

 まとめ。このブログはコンテナホスティングサービスで運用している。ちなみにHyper.shでMeltdownとSpectreの影響をフォーラムで質問してみたところ、一週間ぐらい経過してなにも返事がないのでちょっと考えておかなければという状況。


デプロイ
========
 構成管理はDockerの仕組みに任せているので、アプリのコードを整えたらdockerのビルドコマンドを実行するだけでコンテナイメージができあがる。あとはNginxコンテナとWebアプリコンテナをDockerのオーケストレーションツールのComposeのHyper.sh版でオーケストレーションしているので、そのcomposeコマンドを一行実行すればビルド済みイメージを使ったデプロイが行われる。
 アプリのコードはGithubへのプッシュによって、TravisCIへさらにプッシュされ、Seleniumを使った統合テスト的なUIテストが行われる。それにとおった場合かつ、masterブランチへのコミットだった場合のみcomposeでのデプロイが行われる。自動化。だからもうWebアプリに機能追加したくなったりしたら、コード変更してGithubへプッシュ、それをmasterブランチにマージしたらあと自動。楽。


まだ手を付けていないところ
==========================
 コンテナで運用している部分に監視をまだつけていない。データベースサーバにはMackerelを入れているのだが。コンテナの監視はkubernetesが機能多そうながらも便利そうで面白そうなので、これを導入する方向で考えている。
 あとはログの運用。ここは完全未タッチ。Fluentdの運用事例とかが目に入ってくのでそのあたりを参考にしようとは考えている。


まとめ
======
 環境の構築や管理を自動化したかった。コンテナをそれに使ってみてすごく満足いくものができた。あとはコンテナゆえにイミュータブルになっている状況でログをどうするかなど課題は残っているので、そこらの解決をしていきたい。
comment: 0