A Lagom Java example showcasing a Twitter-like application
- Start all services using
mvn lagom:runAll
orsbt runAll
.
Ensure you're using reactive-cli
0.8.0 or newer. You can check the version with rp version
.
If you have an existing Minikube, you can delete your old one start fresh via
minikube delete
minikube start --memory 6000
eval $(minikube docker-env)
minikube addons enable ingress
The reactive-sandbox
includes development-grade installations of Cassandra, Elasticsearch, Kafka, and ZooKeeper. It's packaged as a Helm chart for easy installation into your Kubernetes cluster.
Note that if you have an external Cassanda cluster, you can skip this step. You'll need to change the
cassandra_svc
variable (defined below) if this is the case.
helm init
helm repo add lightbend-helm-charts https://lightbend.github.io/helm-charts
helm update
Verify that Helm is available (this takes a minute or two):
kubectl --namespace kube-system get deploy/tiller-deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
tiller-deploy 1 1 1 1 3m
Install the sandbox. Since Chirper only uses Cassandra, we're disabling the other services but you can leave them enabled by omitting the set
flag if you wish.
helm install lightbend-helm-charts/reactive-sandbox --name reactive-sandbox --set elasticsearch.enabled=false,kafka.enabled=false,zookeeper.enabled=false
Verify that it is available (this takes a minute or two):
kubectl get deploy/reactive-sandbox
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
reactive-sandbox 1 1 1 1 1m
sbt clean docker:publishLocal
docker images
Finally, you're ready to deploy the services. Be sure to adjust the secret variables and cassanda service address as necessary.
# Be sure to change these secret values
chirp_secret="youmustchangeme"
friend_secret="youmustchangeme"
activity_stream_secret="youmustchangeme"
front_end_secret="youmustchangeme"
# Default address for reactive-sandbox, change if using external Cassandra
cassandra_svc="_cql._tcp.reactive-sandbox-cassandra.default.svc.cluster.local"
# deploy chirp-impl
rp generate-kubernetes-resources "lagom-java-chirper-tooling-example/chirp-impl:1.0.0-SNAPSHOT" \
--env JAVA_OPTS="-Dplay.http.secret.key=$chirp_secret -Dplay.filters.hosts.allowed.0=$(minikube ip)" \
--external-service "cas_native=$cassandra_svc" \
--pod-controller-replicas 2 | kubectl apply -f -
# deploy friend-impl
rp generate-kubernetes-resources "lagom-java-chirper-tooling-example/friend-impl:1.0.0-SNAPSHOT" \
--env JAVA_OPTS="-Dplay.http.secret.key=$friend_secret -Dplay.filters.hosts.allowed.0=$(minikube ip)" \
--external-service "cas_native=$cassandra_svc" \
--pod-controller-replicas 2 | kubectl apply -f -
# deploy activity-stream-impl
rp generate-kubernetes-resources "lagom-java-chirper-tooling-example/activity-stream-impl:1.0.0-SNAPSHOT" \
--env JAVA_OPTS="-Dplay.http.secret.key=$activity_stream_secret -Dplay.filters.hosts.allowed.0=$(minikube ip)" | kubectl apply -f -
# deploy front-end
rp generate-kubernetes-resources "lagom-java-chirper-tooling-example/front-end:1.0.0-SNAPSHOT" \
--env JAVA_OPTS="-Dplay.http.secret.key=$front_end_secret -Dplay.filters.hosts.allowed.0=$(minikube ip)" | kubectl apply -f -
See the resources created for you
kubectl get all
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/activityservice-v1-5-0 1 1 1 1 2h
deploy/chirpservice-v1-5-0 3 3 3 3 2h
deploy/friendservice-v1-5-0 3 3 3 3 2h
deploy/front-end-v1-5-0 1 1 1 1 2h
NAME DESIRED CURRENT READY AGE
rs/activityservice-v1-5-0-659877cd49 1 1 1 2h
rs/chirpservice-v1-5-0-6548865dc5 3 3 3 2h
rs/friendservice-v1-5-0-66f688897b 3 3 3 2h
rs/front-end-v1-5-0-87c5b6b79 1 1 1 2h
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/activityservice-v1-5-0 1 1 1 1 2h
deploy/chirpservice-v1-5-0 3 3 3 3 2h
deploy/friendservice-v1-5-0 3 3 3 3 2h
deploy/front-end-v1-5-0 1 1 1 1 2h
NAME DESIRED CURRENT READY AGE
rs/activityservice-v1-5-0-659877cd49 1 1 1 2h
rs/chirpservice-v1-5-0-6548865dc5 3 3 3 2h
rs/friendservice-v1-5-0-66f688897b 3 3 3 2h
rs/front-end-v1-5-0-87c5b6b79 1 1 1 2h
NAME READY STATUS RESTARTS AGE
po/activityservice-v1-5-0-659877cd49-59z4z 1/1 Running 0 2h
po/chirpservice-v1-5-0-6548865dc5-2fjn6 1/1 Running 0 2h
po/chirpservice-v1-5-0-6548865dc5-kgbbb 1/1 Running 0 2h
po/chirpservice-v1-5-0-6548865dc5-zcc6l 1/1 Running 0 2h
po/friendservice-v1-5-0-66f688897b-d22ph 1/1 Running 0 2h
po/friendservice-v1-5-0-66f688897b-fvndd 1/1 Running 0 2h
po/friendservice-v1-5-0-66f688897b-j9tzj 1/1 Running 0 2h
po/front-end-v1-5-0-87c5b6b79-mvnh8 1/1 Running 0 2h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/activityservice ClusterIP None <none> 10000/TCP,10001/TCP,10002/TCP 2h
svc/chirpservice ClusterIP None <none> 10000/TCP,10001/TCP,10002/TCP 2h
svc/friendservice ClusterIP None <none> 10000/TCP,10001/TCP,10002/TCP 2h
svc/front-end ClusterIP None <none> 10000/TCP 2h
Open the URL this command prints in the browser
echo "http://$(minikube ip)"