gRPCを使ったwebチャット実装をとりあえず試す環境作り

2 min read読了の目安(約2100字

ググると、チャットをgRPCで実装して高速化しましたみたいな企業ブログがちらほらあるので、試してみようと思ったところ、こんな記事がありました。

https://qiita.com/okmttdhr/items/a37563047904ac98f3ed
コードはここに公開されていて、docker-compose upだけで動くということなので、早速試してみました。このまま動けば、非常に楽なのですが、そのままでは動かなかったので修正した内容を共有します。
DockerfileEnvoy
@@ -1,4 +1,4 @@
-FROM 
+FROM envoyproxy/envoy:v1.16-latest
 COPY ./envoy.yaml /etc/envoy/envoy.yaml
 CMD /usr/local/bin/envoy -c /etc/envoy/envoy.yaml
 EXPOSE 8080

どうやらdockerhubで公開されていたenvoyproxy/envoy:latestが無くなっているようでした。最新版に変えてみましたが、破壊的な変更があるのか、そのままでは動かなかったのでv1.16-latestにしています。

DockerfileProto
@@ -10,14 +10,12 @@ WORKDIR /proto
 RUN apt-get -qq update && apt-get -qq install -y \
   unzip
 
-RUN curl -sSL https://github.com/protocolbuffers/protobuf/releases/download/v${PROTO_VERSION}/\
-  protoc-${PROTO_VERSION}-linux-x86_64.zip -o protoc.zip && \
+RUN curl -sSL https://github.com/protocolbuffers/protobuf/releases/download/v${PROTO_VERSION}/protoc-${PROTO_VERSION}-linux-x86_64.zip -o protoc.zip && \
   unzip -qq protoc.zip && \
   cp ./bin/protoc /usr/local/bin/protoc && \
   cp -r ./include /usr/local
 
-RUN curl -sSL https://github.com/grpc/grpc-web/releases/download/${GRPCWEB_VERSION}/\
-  protoc-gen-grpc-web-${GRPCWEB_VERSION}-linux-x86_64 -o /usr/local/bin/protoc-gen-grpc-web && \
+RUN curl -sSL https://github.com/grpc/grpc-web/releases/download/${GRPCWEB_VERSION}/protoc-gen-grpc-web-${GRPCWEB_VERSION}-linux-x86_64 -o /usr/local/bin/p
   chmod +x /usr/local/bin/protoc-gen-grpc-web

バージョンの問題では無いので、多分このままで動く環境もあると思うのですが、修正前のDockerfileではmacOS(Catalina)のdocker desktop(3.1.0)だと次のようなエラーが出てしまいます。改行しているところがなんか半角スペースのような扱いになってますね。

Step 7/9 : RUN curl -sSL https://github.com/protocolbuffers/protobuf/releases/download/v${PROTO_VERSION}/  protoc-${PROTO_VERSION}-linux-x86_64.zip -o protoc.zip &&   unzip -qq protoc.zip &&   cp ./bin/protoc /usr/local/bin/protoc &&   cp -r ./include /usr/local
 ---> Running in f48862b5a222
curl: (6) Could not resolve host: protoc-3.11.4-linux-x86_64.zip

以上、2箇所を修正するとdocker-compose upすればlocalhost:3000で動きます。envoyとの通信に失敗しているときは、ページを開いてデベロッパーツールのコンソールを見ると、何かしらエラーが出ていると思います。