Hatena-Intern-2020

セットアップ

アプリケーションの起動には以下が必要です.

  • Docker
    • Windows または macOS の場合は Docker Desktop
    • Linux の場合は各ディストリビューションごとのインストール方法に従ってください
  • Kubernetes
    • 以下のいずれかを利用することを想定しています
      • Docker Desktop に付属のもの
      • Minikube
  • kubectl
  • Kustomize
  • Skaffold

個々のサービスの開発には, 以下がローカル環境にインストールされていることを想定しています.

  • Make
  • (Go を使う場合) Go
  • (TypeScript を使う場合) Node.js, Yarn

動作確認は以下の環境で行っています.

  • macOS 10.15.6 (19G73)
  • Docker Desktop 2.3.0.4 (46911) (Kubernetes v1.16.5)
$ docker version
Client: Docker Engine - Community
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        48a66213fe
 Built:             Mon Jun 22 15:41:33 2020
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.12
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       48a66213fe
  Built:            Mon Jun 22 15:49:27 2020
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

$ minikube version
minikube version: v1.12.2
commit: be7c19d391302656d27f1f213657d925c4e1cfc2

$ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.6", GitCommit:"dff82dc0de47299ab66c83c626e08b245ab19037", GitTreeState:"clean", BuildDate:"2020-07-16T00:04:31Z", GoVersion:"go1.14.4", Compiler:"gc", Platform:"darwin/amd64"}

$ kustomize version
{Version:3.8.0 GitCommit:6a50372dd5686df22750b0c729adaf369fbf193c BuildDate:2020-07-05T17:55:53+01:00 GoOs:darwin GoArch:amd64}

$ skaffold version
v1.13.0

$ go version
go version go1.14.6 darwin/amd64

$ node -v
v14.6.0

$ yarn -v
1.22.4

起動

Docker Desktop

以下の手順でアプリケーションを起動します.

# context を設定
kubectl config set-context hatena-intern-2020 --cluster=docker-desktop --user=docker-desktop --namespace=hatena-intern-2020
kubectl config use-context hatena-intern-2020

# 起動
make up

ブラウザで http://localhost:8080/ を開くことでアプリケーションにアクセスできます.

Minikube

以下の手順でアプリケーションを起動します.

# Minikube を起動
minikube start --kubernetes-version v1.16.13
eval $(minikube docker-env)

# context を設定
kubectl config set-context hatena-intern-2020 --cluster=minikube --user=minikube --namespace=hatena-intern-2020
kubectl config use-context hatena-intern-2020

# 起動
make up

以下のコマンドを実行するとブラウザが自動的に開き, アプリケーションにアクセスします.

minikube -n hatena-intern-2020 service blog

サービス

アプリケーションには以下の 3 つのサービスが存在します.

  • 認証基盤 (Account) サービス
    • ユーザーアカウントの登録や認証を管轄します
  • ブログ (Blog) サービス
    • ユーザーに対して, ブログを作成したり記事を書いたりする機能を提供します
  • 記法変換 (Renderer) サービス
    • ブログの記事を記述するための「記法」から HTML への変換を担います

このうちブログサービスが Web サーバーとして動作し, ユーザーに対してアプリケーションを操作するためのインターフェースを提供します. 認証基盤サービスと記法変換サービスは gRPC サービスとして動作し, ブログサービスから使用されます.

ディレクトリ構成

  • pb/: gRPC サービスの定義
  • services/: 各サービスの実装
    • account/: 認証基盤サービス
    • blog/: ブログサービス
    • renderer-go/: 記法変換サービスの Go による実装
    • renderer-ts/: 記法変換サービスの TypeScript による実装
  • k8s/: アプリケーションを Kubernetes 上で動作させるためのマニフェスト