プロジェクトについて
2015年当時、私たちはフリーランスとして活動しており、Drupal プロジェクトのオートメーションに取り組んでいました。FTP を使用して(そう…あのFTPです!)共有ホスティング上で CMS を維持するのはむずかしいうえに退屈で、努力に値しませんでした。このような状況から脱却するために、私たちはホスティングコントロールを取り戻し、以下のような機能を備えたプロジェクトセットアップを作成したいと考えています。
取り入れたいものリスト
完璧ですね!では、これをどのようにして実現するのかを考えてみましょう。
Docker
サーバーのアプリケーションの古い設定方法にうんざりしていたとき、最初に思いついたツールが Docker でした。Docker を使えば、Infradtructure as Code(IaC) によって環境の不一致を解決することができ、アプリケーションのランタイムをバージョン管理システムにキープすることができます。さらに、ヒューマンエラーやプロビジョニングに費やす時間を大幅に削減することが可能になったのです。
これに加えて、Docker Hub で利用可能な Docker イメージを使用することも、開発からハウスキーピングまでさまざまな目的でカスタムイメージを構築することもできます。たとえば…
Drush コンテナを作成して Drupal キャッシュをクリアしたり、データベースをダンプしたり、Web サイト全体をアーカイブすることさえ可能
.sass ファイルをコンパイルするために、Compass をインストールした NoeJS コンテナを作成することができる
開発者として必要なのは、Docker がインストールされたマシンだけ(私たちの場合は Ansible もインストールされています)。その他すべてのツールは、すでにリポジトリで定義されているコンテナとしてランすることができます。
さらに、Docker はプロビジョニングとデプロイメントを以前よりずっと簡単にしてくれています。Docker Compose や Ansible docker_container module のようなツールを使用すれば、必要なのはコマンドをひとつ実行することだけ。 私たちが必要としているすべてのモジュールを備えた Drupal CMS は、起動から実行までを数分でおこなうことが可能です。
取り入れたいものリスト
Docker以外のツールについて
他のコンテナランタイムと比べて、リファレンスやサポートの恩恵を受けられる大規模なコミュニティを持っている Docker のコンテナ化アプローチは、私たちのスタートポイントとしては完璧でした。しかし役に立つツールはそれだけではありません。今回は Docker 以外にもソフトウェアを二つご紹介します。
Ansible
Puppet と違い、Ansible は単なるコンフィギュレーションマネジメントツールではありません。多くのモジュールを持つ Apache Ant をさらに強化したようなソフトウェアで、さまざまな機能を提供しています。Playbook のコンセプトは Ant とは対照的で、コンフィギュレーション、デプロイメントおよびオーケストレーションを組織的に管理することに役立ちます。私たちの場合は、開発中にあらかじめ定義されたタスクを実行できるように、開発者用のプレイブックを定義しました。
- アプリケーションの起動・停止
- sass ファイルの監視とコンパイル
- アプリケーションキャッシュのクリア
- アセットとデータベースのエクスポート
- アセットとデータベースのインポート
- ホスティングプロバイダでデプロイする準備ができている新しいインスタンスのプロビジョニング
- リモートマシンへのデプロイメント
- Amazon S3 へのフルバックアップの実行
- Amazon S3 からの最新バックアップの取得
さらに Ansible Vault は機密データを暗号化することによって、これらのファイルを安全にバージョン管理システムにチェックインできるようにしています。
取り入れたいものリスト
データバックアップ用の Docker コンテナとしての Duply
Duply はバックアップ管理のための優秀なツールで、Amazon S3 や Google Drive などのさまざまなクラウドサービスともうまく機能します。バックアップを暗号化してデータを保護してくれるのです。
取り入れたいものリスト
残された課題は…
これで、取り入れたいものリストにある開発から生産に至るまでの七つの項目のうち、六つを達成することができました。しかしもちろん、ローンチをしておしまいというわけにはいきません。変更のリクエスト、サービスモニタリング、パフォーマンスチューニングなどは、プロジェクトを長期間にわたって良好な状態に保つためには欠かせないフォローアップタスクです。私たちは、モニタリングなしでは実稼働環境と呼ぶことはできないと考えてます。成功の鍵はモニタリングとログ管理です。分析ツールを使用することによって、ログは新しい見識をもたらしてくれるはずです。
ログを集めよう
コンテナからログを読み取るための一般的な方法は以下の三つです。
- docker logs のコマンドを使う
- コンテナログを物理ファイルに出力する
- syslog ロギング・ドライバを有効にする
これら三つの方法は開発時には有用でしたが、長期的に考えるとより優れた解決策を考える必要がありました。そこで、他のすべてのコンテナのログを集めるための syslog コンテナを作成しました。しかし、この方法にはすべてのコンテナに追加の設定をしなければいけないという欠点があったのです。また、ターミナルからのログを読むことはユーザーフレンドリーだとはいえません。そこで解決策として登場したのが Boatswain です。
Boatswain
すでにご存知のとおり、Boatswain は Docker を実行するサーバーのベーシックなモニタリングとログ管理のためのサービスです。Boatswain は以下のような質の高い機能をご提供します。
- ホストとドッカーのコンテナモニタリング
- ログ管理
- 簡単なトラブルシューティング
- リアルタイム通知
- シンプルなインストール
- ダッシュボード
現在Boatswainはクローズドβ版で、フィードバックと改善を必要としています。アカウントを登録したいかたはお気軽にこちらよりお知らせください。私たちは現在 Google Cloud Platform で Kubernetes へのインフラ移行を進めており、移行後にβ版の登録を開始する予定です。
ぜひ私たちの旅を見守ってください!