The backend works locally and it’s already a big step forward, but how can we deploy it?
We’ll use Heroku for it.
If you don’t have a Heroku account you first need to sign up.
You’ll also need Heroku CLI installed, here are the instructions.
To make sure that the appropriate Java Runtime version is used while deploying on Heroku we need one more configuration . Add system.properties
file to the root of your project with the following lines:
java.runtime.version=11
rootProject.name = "backend"
After you’ve registered and installed Heroku CLI, you should be able to login from the terminal with the following command:
And then create a new application with
You’ll get the id
of your newly created app in return, like enigmatic-sands-01782

Then you will need to install a Heroku deploy plugin:
heroku plugins:install heroku-cli-deploy
Now deploy the jar created by shadowJar
under the name of our Heroku app with this command. Don’t forget to change the app name.
heroku deploy:jar ./backend/build/libs/Backend.jar --app enigmatic-sands-01782
It’ll take some time to upload the build

After a while you’ll see the upload succeeded:

Finally, add your remote heroku git source:
git remote add heroku git@heroku.com:enigmatic-sands-01782.git
In the future, every time you make changes you’ll need to update you remote like this:
Try opening https://enigmatic-sands-01782.herokuapp.com/pizza
Don’t forget to replace the Heroku app name with your own.
You’ll see an error.
Try investigating with heroku logs --tail
, you’ll find:
Caused by: org.koin.core.error.InstanceCreationException: Could not create
instance for [Singleton:'com.example.recipecollection.backend.localSource
LocalSource']
or
Caused by: java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.
It happens because we are missing a postgres database plugin which comes for free with Heroku. Let’s add it with
heroku addons:create heroku-postgresql
You’ll see something like this:

This has created your database url and should have automatically set the JDBC_DATABASE_URL
environment variable in heroku. To check it, you can either use
or
heroku run echo \$JDBC_DATABASE_URL
Let’s check out our app again with
No errors.
Go to https://enigmatic-sands-01782.herokuapp.com/pizza.
Awesome, now we can see our application serving pizza from Heroku!
