Running this application requires sbt. gRPC, in turn, requires the transport to be HTTP/2 so we want Play to use HTTP/2. On top of that, we will also enable HTTPS. These requirements limit which setups are supported to run Play and only the following can be used at the moment:
- you may use
sbt runProdto run Play locally in a forked JVM in PROD mode, or
- you may use
./ssl-play runto run Play in DEV mode within
./ssl-play is a wrapper script around
sbt that sets up the ALPN agent (required for HTTP/2) on the JVM running
In both execution modes above,
sbt will also generate the server and client sources based on the
app/protobuf/*.proto files. The code generation happens thanks to the Akka gRPC plugin being enabled. See understanding the code for more details.
Finally, for your convenience, a self-signed certificate for
CN='localhost' is provided in this example (see
conf/selfsigned.keystore). Setting up a keystore works different in DEV mode and PROD mode. Locate the
play.server.https.keyStore.path setting in
build.sbt for an example on how to set the keystore on each environment.
Finally, since now we know what the application is: an HTTP endpoint that hits its own gRPC endpoint to reply to the incoming request. We can trigger such request and see it correctly reply with a “Hello Caplin!” (which is the name of a nice Capybara, google it):
$ curl --insecure https://localhost:9443 ; echo Hello Caplin!