『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つ狭い画面を見ながらデバッグすることが辛かったため記事に残したいと思った次第。
お困りの方がいらっしゃるのであればコピー&ペーストなりして、各々技術書読破に努めて頂ければ幸いである。