はじめに
HTTPリクエストの内容を表示するだけ、という単機能WebサーバをExpressで作ってみました。
告知を兼ねて記事としてシェアします。
TL;DR
作ったコードは一式GitHubに上がっています。
- GitHub: kulikala/http-ephemeral-server
- npm: http-ephemeral-server
用途
こんな時に使うと便利だと思います。
- APIでリクエストする時に、正しくHTTPヘッダが設定できているか確認したい
- POSTした値が正しく解釈されるか確認したい
- 複数のコンテナアプリケーションを作って、互いに通信する構成を作る時、とりあえずのイメージを使いたい
- ALBでECSに振り分ける構成をCloudFormationで作る時、アプリがまだできていないけど、とりあえずECRのリポジトリがほしい時
背景
用途の4つ目を叶えたかったのが、今回一番の目的でした。
PHPからインスパイア
PHPには<? phpinfo(); ?>
という便利メソッドがあって、Apache + PHPで環境作った後、このphpinfo();
でサーバの構成情報やHTTPリクエスト情報を確認していました。
Dockerに載せやすい形
Node.jsにはhttp-server
という便利サーバがあって、簡単にインストール&静的ファイルをサーブできます。
このツールと同じくらい簡単にインストールできて、HTTPリクエスト情報が目視しやすくって、Dockerに載せやすい形を模索していました。
便利ポイント
環境変数でポートを指定できる
環境変数でサーバがリスニングするポートを変えることができます。
Dockerはポートマッピングが重要だからこそ、イメージを作成した後にポートを変更できるのは便利です。
使い方
3つの使い方ができます。
- コマンドラインツールとしてインストール
- Dockerイメージとしてビルド
-
npm
パッケージとしてライブラリ利用
コマンドラインツールとしてインストール
npm
でグローバルインストールすると、どのワーキングディレクトリからでも一発起動します。
インストール
$ npm install http-ephemeral-server -g
起動
$ http-ephemeral-server
デフォルトポートは3000
になっているので、 http://localhost:3000 にアクセスすると、こんな感じの画面が表示されます。
ポート番号を変更する
ポート番号は、環境変数PORT
で指定します。
$ PORT=8000 http-ephemeral-server
今度は、 http://localhost:8000 で表示されます。
短いコマンド
http-ephemeral-server
は長すぎてタイポしそうです。
短いバージョンを用意しています。
$ hes
URLは自由
http://localhost:3000/hoge/bar/foo?The:quick:brown:fox:jumps:over:the:lazy:dog
というURLにアクセスすると、画面は同じでurl
の項目が変化します。
Dockerイメージとしてビルド
Dockerfile
をリポジトリ内に用意しています。
GitHubからcloneしてローカルでビルドします。
ローカルにclone
$ git clone https://github.com/kulikala/http-ephemeral-server.git
$ cd http-ephemeral-server
docker
コマンドを使う
docker image build
でビルドします。
-t http-ephemeral-server:latest
でビルドしたイメージにタグを付けています。
$ docker image build -t http-ephemeral-server:latest .
docker container run
で起動します。
$ docker container run -d -p 3000:80 http-ephemeral-server:latest
デフォルトでは、コンテナ内ではEXPOSE 80
するようにDockerfile
で記述しています。
ブラウザからアクセスできるようにするには、-p 3000:80
などホストポートをコンテナポートにマッピングしてあげます。
-d
オプションを指定しないで起動すると、Nodeのプロセスにアタッチします。
ポートを変更してビルド
--build-arg
オプションでPORT
変数に値を渡してあげます。
$ docker image build -t http-ephemeral-server:latest --build-arg PORT=3000 .
起動時にポート番号を変更
PORT
環境変数を渡して起動すると、実行時のポート番号を変更します。
実行時に8000
番ポートに変更し、 http://localhost:8000 にマッピングするには次のようにします。
$ docker container run -d -p 8000:8000 -e PORT=8000 http-ephemeral-server:latest
docker-compose
コマンドを使う
便利ですよね、docker-compose
。
docker
起動時のオプションなどはよく忘れてしまうので、起動するコンテナが1つの場合でも、docker-compose.yml
書いておくことにしています。
$ docker-compose build
$ docker-compose start
リポジトリ内のdocker-compose.yml
ではホストの8000
番ポートにマッピングしているので、ブラウザから http://localhost:8000 にアクセスすると応答するようになります。
npm
パッケージとしてライブラリ利用
http-ephemeral-server
は、Express application generator で生成したExpressアプリケーションになっています。
npm
でインストール
$ npm install http-ephemeral-server --save
require()
する
require('http-ephemeral-server')
するとExpressのApplicationインスタンスが取得できるので、
const app = require('http-ephemeral-server')
app.listen(3000)
みたいな形で利用できます。
ぜひ、使ってみてください!