Is it possible to deploy a Lagom Application as a standalone running jar or Docker Container? And if yes, how?
Yes, it is possible to deploy a Lagom application as a standalone JAR/Docker container. In order to do this, you can follow these steps.
application.conf
of your service. Also, disable Lagom's ConfigSessionProvider
and fall back to the one provided in akka-persistence-cassandra
, which uses the list of endpoints listed in contact-points. Your Cassandra configuration should look something like this-cassandra.default {
## list the contact points here
contact-points = ["127.0.0.1"]
## override Lagom’s ServiceLocator-based ConfigSessionProvider
session-provider = akka.persistence.cassandra.ConfigSessionProvider
}
cassandra-journal {
contact-points = ${cassandra.default.contact-points}
session-provider = ${cassandra.default.session-provider}
}
cassandra-snapshot-store {
contact-points = ${cassandra.default.contact-points}
session-provider = ${cassandra.default.session-provider}
}
lagom.persistence.read-side.cassandra {
contact-points = ${cassandra.default.contact-points}
session-provider = ${cassandra.default.session-provider}
}
lagom.broker.kafka {
service-name = ""
brokers = "127.0.0.1:9092"
client {
default {
failure-exponential-backoff {
min = 3s
max = 30s
random-factor = 0.2
}
}
producer = ${lagom.broker.kafka.client.default}
producer.role = ""
consumer {
failure-exponential-backoff = ${lagom.broker.kafka.client.default.failure-exponential-backoff}
offset-buffer = 100
batching-size = 20
batching-interval = 5 seconds
}
}
}
application.conf
.akka.cluster.seed-nodes = [
"akka.tcp://MyService@host1:2552",
"akka.tcp://MyService@host2:2552"]
Now, we know what configurations we need to provide to our service, let's take a look at the steps of deployment. Since we are using just java -cp
command, we need to package our service and run it. To simplify the process, we have created a shell script for it.
For a complete example, you can refer to our GitHub repo - Lagom Scala SBT Standalone project.
I hope it helps!