8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LeveragesAdvent Calendar 2017

Day 1

teratailで関わった技術たち

Last updated at Posted at 2017-11-30

Leverages、teratailの新卒一年目エンジニアのtkowです。Leveragesを技術力に定評のある会社に押し上げるべく入社しました。

技術の会社として認められるためにまずやることと言ったらQiitaで色々発信するべきだろうということで、有志でAdventカレンダーを作りました。やる気がありすぎてほぼ一人で半分以上の枠を埋めてしまいました。なるべく記事のクオリティを担保できるように頑張ります。

teratailのインフラ

Google Cloud Platformを使っています。
インフラ構成はGCEインスタンスをItamaeサーバを使って管理しており、
teratail本体に関わるサービスはkubernetesを使用しています。

teratailのフロントエンド

webpackを使ってフロントエンドのバンドルを行なっています。
理由は、共通化されていないファイルが多く存在する環境から
依存関係を把握できるように、module化されていないファイルを
整理するためにwebpackで整理しました。基本的にはbabel-loader
でes6を使用しています。全て、.jsでbuildを有効にしたいところ
でしたが、use strictモード制約に引っかかるようなスコープ汚染の
あるコードが多く、リファクタリング時に拡張子.esにすることで、有効に
なるようにローダーをセッティングして、レガシーなJSをモダンに変えています。
gulpの資産があるので、gulpからwebpackのbuildを叩く設定を作ってい
ますが、マイクロサービス化を目指しwebpack設定を分離して作成しています。

teratailのバックエンド

PHPを使用しています。一部キャンペーンページなどを、micro service化してnuxtjs+expressサーバに移す試みをしています。また、それぞれのサービスはGCEまたは,GKEのL7ロードバランサーで管理されています。GCEとは別にGKEのIngressでL7ロードバランサーを噛ませる構成に変えたいと思っていますが、試行錯誤中です。

teratailのCD

CIツールとして、Circle CIを使用しています。deployはGoogle Container Registryのgithubフックによって、releaseタグを作成したタイミングで、Docker Imageを作成し、kubectl set image image:latest_tagを利用してデプロイを簡易化しています。この手順で手動更新の作業が発生するのでもっとうまいやり方がないか考案中です。

公式の方に聞いたところ、CDの押しはSpinnakerらしいです。buildオプションによってコンテンツデリバリーを設定していませんが、別プロジェクトでWerckerで遊んでいて、パイプラインを自作するということができるのを知って、調べてみたら、Circle CIでもbuild工程でkubenetesのデプロイをできることを知ったので、ちょっと大変そうですが、やってみています。

何を考えて設計しているか

インフラの再生性や簡易性に重点を置いています。
Infrastracture as Codeで紹介されている概念を元に考えています。
構成管理設定ファイルのバージョン管理、フェニックス交換やカナリヤリリースが容易に設定できるkubernetesを選択しています。

これらのそれぞれの技術の詳細についてはいくつかは後続の記事で書くつもりなので、後続のカレンダーをお楽しみにしていてください。

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?