An implementation of the Acme Air Main Service for Java/Liberty. The main service primarily consists of the presentation layer (web pages) that interact with the other services.
This implementation can support running on a variety of runtime platforms including standalone bare metal system, Virtual Machines, docker containers, IBM Cloud, IBM Cloud Private, and other Kubernetes environments.
- Instructions for setting up and building the codebase
All of these examples assume you have the acmeair-mainservice-java, acmeair-authservice-java, acmeair-bookingservice-java, acmeair-customerservice-java, and acmeair-flightservice-java directories, (and possibly others) on your docker machine in the same directory. It also assumes all applications have been built with maven.
- Instructions for different run modes
Prereq: Install Docker, docker-compose, and start Docker daemon on your local machine
- cd acmeair-mainservice-java
- Create docker network
- docker network create --driver bridge my-net
-
Build/Start Containers. This will build all the micro-services, mongo db instances, and an nginx proxy.
- docker-compose build
- NETWORK=my-net docker-compose up
-
Go to http://docker_machine_ip/main/acmeair
-
Go to the Configuration Page and Load the Database
- Prereq: Install Docker, docker-compose, and start Docker daemon on your local machine
- Prereq: Install and configure Minikube, and install kubectl
- minikube docker-env
- eval $(minikube docker-env)
- minikube addons enable ingress
- cd acmeair-mainservice-java/scripts
- Build and Deploy Services ./buildAndDeployToMinikube.sh
- Wait a couple minutes and go to http://kubernetes_ip/acmeair
- Go to the Configuration Page and Load the Database
This doc assumes that
-
ICP is installed and configured
-
The docker env is logged into the CFC docker repo
- docker login mycluster.icp:8500
-
kubectl and helm are attached the ICP cluster
-
You are running ICP as admin
-
maven is installed and set up to build with a full SDK.
- Build and push the apps
cd acmeair-mainservice-java/scripts
./buildAndPushtoICP.sh
- Deploy to ICP using one of the following options:
- Using ibm-websphere-liberty helm chart
./deployChartToICP.sh
- Using loose deployment manifests
./deployToICP.sh
- Using Microclimate
- The AcmeAir java projects are structured to be imported and deployed using Microclimate.
- Using ibm-websphere-liberty helm chart
- Wait a couple minutes and go to http://proxy_ip/acmeair
- Go to the Configuration Page and Load the Database
- Cleanup
- Helm chart
./deleteChartRelease.sh
- Loose deployment manifests
./deleteKubeObjects.sh
- Using Microclimate
- Delete the deployment pipeline
- Helm chart
Prerequisites
- Install Microclimate.
- Install IBM Cloud Private.
- Install Microclimate on IBM Cloud Private.
- Microclimate and AcmeAir microservices integration supported from three branches. (master, microprofile-1.4, microclimate-mp-1.3)
-
Import the following microservices into Microclimate with Importing projects:
-
After you import all the microservices into Microclimate, you can deploy projects into IBM Cloud Private:
- A.) Connect the remote Microclimate instance from your Microclimate dashboard with Connecting the local and IBM Cloud Private installations.
- B.) Create a pipeline for each microservice with Creating a build pipeline.
- C.) After a pipeline is created successfully, you can add deployments.
- D.) Deploy all the microservices with Deploying applications.
- E.) After successful deployments, you can reach the application from the
http://proxy_ip/acmeair
URL. - F.) Go to the Configuration page and click the Load the Database link.
When using Acmeair with the Istio ingress-gateway, the root context for the services need to be redefined as it does not support rewrites. Use the Dockerfile-istio file to build the images for the flight, booking, customer and auth services as it takes care of the required changes.
There is also a sample manifest file for deployment of the Acmeair application in a Istio service mesh, with all services and deployments required to run the application, including the gateway and virtual services definition. The required Mongo databases are also deployed as pods/services. You need to define the docker images to be used and inject the sidecars, either automatically or manually (with kubectl kube-inject command).