❯ Guillaume Laforge

Deploy a Ratpack App on Google App Engine Flex

The purpose of this article is to deploy a Ratpack web application on Google App Engine Flex.

For my demos at conferences, I often use frameworks like RatpackGrails or Gaelyk, which are based on the Apache Groovy programming language. In a previous article, I already used Ratpack, but on a slightly more complex use case, but this time, I want to share a quick Ratpack hello world, and deploy it on Flex.

I started with a hello world template generated by Lazybones (a simple project creation tool that uses packaged project templates), that I had installed with SDKman (a tool for managing parallel versions of multiple Software Development Kits). But you can go ahead with your own Ratpack apps obviously. Feel free to skip the next section if you already have an app.

Create a Ratpack project

# install SDKman
curl -s "https://get.sdkman.io" | bash
# install lazybones with sdkman
sdk install lazybones
# create your hello world Ratpack app from a template
lazybones create ratpack flex-test-1

You can then quickly run your app with:

cd flex-test-1
./gradlew run

And head your browser to http://localhost:5050 to see your app running.

We’ll use the distTar task to create a distribution of our app, so build it with:

./gradlew distTar

Get ready for Flex

To run our app on App Engine Flex, we’ll need to do two things: 1) to containerize it as a Docker container, and 2) to create an app.yaml app descriptor. Let’s start with Docker. Create a Dockerfile, and adapt the path names appropriately (replace “flex-test-1” by the name of the directory you created your project in):

FROM gcr.io/google_appengine/openjdk8
VOLUME /tmp
ADD build/distributions/flex-test-1.tar /
ENV JAVA_OPTS='-Dratpack.port=8080 -Djava.security.egd=file:/dev/./urandom'
ENTRYPOINT ["/flex-test-1/bin/flex-test-1"]

I’m using Open JDK 8 for my custom runtime. I add my tarred project, and specify port 8080 for running (as requested by Flex), and I define the entry point to my generated startup script.

My app.yaml file, for App Engine Flex, is pretty short, and expresses that I’m using the Flexible environment:

runtime: custom
env: flex
threadsafe: true

Create and deploy your project on Google Cloud Platform

Create an App Engine project on the Google Cloud Platform console. And note the project name. You should also install the gcloud SDK to be able to deploy your Ratpack app from the command-line. Once done, you’ll be able to go through the deployment with:

gcloud app deploy

After a little while, your Ratpack should be up and running!