『OAuth徹底入門』をするためにdockerで開発環境を作った

タイトルどおりである。

『OAuth徹底入門』というOAuth何もわからん人間にとってありがたい技術書を読み進めているのだが、ちょっと開発環境を準備したほうが良さそうだったため記事に纏める次第である。

開発環境の準備が必要だと思った理由

理由は2つあって、1つは開発をすすめるにあたって コンソールを3つ準備せよ と技術書に書いてあるからである。

正しい言葉ではないかもしれないが、 認証サーバークライアント(サーバー)保護対象リソース管理サーバー の3つを監視する必要があった。

仰ることはごもっともだが、律儀にコンソールを3つ開き、それぞれのサーバーの起動コマンドを叩くなんてことは大変申し訳ないが面倒くさい。

もう1つの理由は、技術書で紹介されているコードが古いことに起因する。

ES5時代のNode.jsが利用されており、現在(2021年6月26日)の最古のLTSであるversion-12ですら、依存ライブラリが動かないのである。

その問題のライブラリがデータを保存するライブラリであるために、格納するためのストレージやクライアントライブラリを別で導入する必要があると考えた。

構築した開発環境

今回の目的は、技術書の読破である。

よって動けばいいという大変敷居の低い環境構築を目指した。

動作させたいするソースはこちら。絶賛開発中であるが、大まかな環境の実装は変える予定はない。

https://github.com/hyroky867/oauth-in-action-code

実際に作った環境はこちら。

https://github.com/hyroky867/docker-oauth-in-action-code

version: '3.9'
services:
  db:
    build:
      context: .
      dockerfile: ./docker/mysql/Dockerfile
    container_name: db
    ports:
      - 3306:3306
    restart: always
    volumes:
      - ./docker/mysql/conf:/etc/mysql/conf.d/:ro
      - mysqldata:/var/lib/mysq
      - ./docker/mysql/sql:/docker-entrypoint-initdb.d
    networks:
      - default

  client:
    build:
      context: .
      dockerfile: ./docker/node/Dockerfile
    container_name: client
    tty: true
    ports:
      - 9000:9000
    restart: always
    volumes:
      - ../oauth-in-action-code:/app
    working_dir: /app
    command: yarn client
    networks:
      - default
    depends_on:
      - db

  authorization:
    build:
      context: .
      dockerfile: ./docker/node/Dockerfile
    container_name: authorization
    tty: true
    ports:
      - 9001:9001
    restart: always
    volumes:
      - ../oauth-in-action-code:/app
    working_dir: /app
    command: yarn authorization
    networks:
      - default
    depends_on:
      - db

  resource:
    build:
      context: .
      dockerfile: ./docker/node/Dockerfile
    container_name: resource
    tty: true
    ports:
      - 9002:9002
    restart: always
    volumes:
      - ../oauth-in-action-code:/app
    working_dir: /app
    command: yarn resource
    networks:
      - default
    depends_on:
      - db

networks:
  default:

volumes:
  mysqldata:

Nodeサーバー3台とDBサーバー1台の構成。

コンテナが立ち上がると同時にそれぞれのサーバーがlistenを始めるという流れである。

docker compose logs -f を叩いておけば、各サーバでエラーが出た場合1つのコンソールでデバッグすることが可能。

最後に

毎回コンソール3つ準備して、1つ1つ狭い画面を見ながらデバッグすることが辛かったため記事に残したいと思った次第。

お困りの方がいらっしゃるのであればコピー&ペーストなりして、各々技術書読破に努めて頂ければ幸いである。