From f48bbcaf5c5014fef346fdeb0c13925c69f2a6b0 Mon Sep 17 00:00:00 2001
From: catatsuy <catatsuy@catatsuy.org>
Date: Sun, 14 Jan 2024 11:13:59 +0900
Subject: [PATCH] Add Dockerfile and compose.yml for external service

---
 README.md                 | 22 ++++++++++++++++++++++
 bench/Dockerfile-external | 16 ++++++++++++++++
 compose.yml               | 17 +++++++++++++++++
 3 files changed, 55 insertions(+)
 create mode 100644 bench/Dockerfile-external
 create mode 100644 compose.yml

diff --git a/README.md b/README.md
index 5827473d2..96073442d 100644
--- a/README.md
+++ b/README.md
@@ -151,6 +151,28 @@ docker build -t isucari-benchmarker -f bench/Dockerfile .
 docker run -p 5678:5678 -p 7890:7890 -i isucari-benchmarker /opt/go/benchmarker -target-url http://host.docker.internal -data-dir /initial-data -static-dir /static -payment-url http://host.docker.internal:5678 -payment-port 5678 -shipment-url http://host.docker.internal:7890 -shipment-port 7890
 ```
 
+### external service
+
+以上だけでもベンチマークを実行することはできるが、外部サービスを起動しないと購入などのアクションを行えないため、外部サービスは別途起動する必要がある。
+
+```bash
+docker compose up
+```
+
+手元のマシンのIPアドレスが192.0.2.2の場合は以下のコマンドを実行する。ベンチマーク走行時にこの値は書き換わるので、ベンチマーク走行後に確認したい場合も都度実行する必要がある。
+
+```
+$ cat initialize.json
+{
+  "payment_service_url": "http://192.0.2.2:5556",
+  "shipment_service_url": "http://192.0.2.2:7002"
+}
+
+$ curl -XPOST http://127.0.0.1:8000/initialize \
+-H 'Content-Type: application/json' \
+-d @initialize.json
+```
+
 ## 運営側のブログ
 
 技術情報などについても記載されているので参考にしてください。
diff --git a/bench/Dockerfile-external b/bench/Dockerfile-external
new file mode 100644
index 000000000..9b371595e
--- /dev/null
+++ b/bench/Dockerfile-external
@@ -0,0 +1,16 @@
+FROM golang:1.21
+
+RUN mkdir -p /opt/go
+WORKDIR /opt/go
+
+COPY initial-data /initial-data
+
+COPY go.mod /opt/go/go.mod
+COPY go.sum /opt/go/go.sum
+RUN go mod download
+
+COPY cmd/ /opt/go/cmd
+COPY bench/ /opt/go/bench
+
+RUN go build -o bin/shipment cmd/shipment/main.go
+RUN go build -o bin/payment cmd/payment/main.go
diff --git a/compose.yml b/compose.yml
new file mode 100644
index 000000000..807afa34a
--- /dev/null
+++ b/compose.yml
@@ -0,0 +1,17 @@
+name: isucari
+services:
+  payment:
+    build:
+      context: .
+      dockerfile: bench/Dockerfile-external
+    command: ["/opt/go/bin/payment", "-port", "5556"]
+    ports:
+      - "5556:5556"
+
+  shipment:
+    build:
+      context: .
+      dockerfile: bench/Dockerfile-external
+    command: ["/opt/go/bin/shipment", "-data-dir", "/initial-data", "-port", "7002"]
+    ports:
+      - "7002:7002"