Deploying a Java web app to the IBM cloud
This tutorial shows how to deploy a Java web application to the IBM Cloud. You can upload one Cloud foundry application with a memory limit of 256MB to IBM Cloud with a free Lite account.
The tutorial uses a Vaadin Starter application that exceeds the memory limit of the Lite account. Activate a free 30 Pay-As-You-Go account trial and get $200 credits to test IBM Cloud’s commercial services.
|Keep track of the remaining time and credits on your trial!|
You can deploy the application directly from your command line or from a GitHub repository as a CI pipeline. Skip to Option 2 after the prerequisites, if you prefer to only set up the latter.
Source code on GitHub.
Thank you to Barbaros Özdemir form IBM for authoring this tutorial!
I’m using the latest LTS (Vaadin 14 at the time of writing) starter app as an example. You can download the app from https://vaadin.com/start if you don’t have your own app to deploy.
Go to the Vaadin website (vaadin.com).
Click on GET STARTED.
Pick any of the three technology stacks, download the project and follow the instructions on the right to import the Vaadin project into your IDE (e.g. Eclipse).
Once you have imported your project you will need to build it in production mode (i.e. run
mvn clean package -Pproduction). For more details please have a look at https://vaadin.com/docs/flow/production/tutorial-production-mode-basic.html.
At this point your Vaadin project is ready to run on a Websphere or Tomcat Server.
You need an IBMid to create a Cloud Foundry Organization and space.
To create an IBMid:
Go to https://myibm.ibm.com and click on Create an IBMid.
Create your IBMid by filling in the details.
Then use your IBMid to sign in on IBM Cloud at https://cloud.ibm.com.Note
You can deploy 1 CF (Cloud Foundry Application) that’s max 256MB in size with a Lite account. Upgrade to a Pay-As-You-Go account to deploy larger and more applications, such as the Vaadin Starter used in this tutorial.
Install the Cloud Foundry CLI to enable CF command in your terminal. Please visit https://docs.cloudfoundry.org/cf-cli/install-go-cli.html for instructions.
select Manage → Account.
Click on Cloud Foundry Orgs in the Account window.
Create a Cloud Foundry organization (e.g. “Vaadin14”) and a space (e.g. “dev”) in one of the regions listed (e.g. “US South”). Note that the Cloud Foundry organization name must be unique.
When you return to your IBM Cloud Dashboard you should be able to see the Cloud Foundry Organization and its space(s) in the resource list https://cloud.ibm.com/resources.
Please note that you can do these steps alternatively by using CF or IBM Cloud CLI only, e.g. you might use following CF CLI commands to login to the region US South and create an organization and space:
cf login -a api.us-south.cf.cloud.ibm.com
cf create-org your_cf_organization_name
cf create-space your_cf_space_name
This is for uploading a
.jar directly onto IBM Cloud. Skip to the next section if you wish to deploy from GitHub.
You can either use the default Cloud Foundry CLI or the IBM Cloud CLI to push your application.
This tutorial uses the CF CLI. In case you want to use IBM Cloud CLI, simply add ibmcloud before the cf commands once you are logged in. For logging in, please use the
ibmcloud login command and follow instructions to select region and cf organization.
|To install IBM Cloud CLI, please visit https://cloud.ibm.com/docs/cli?topic=cloud-cli-install-ibmcloud-cli.|
In this example, our Cloud Foundry space is located in the region "US South". The IBM Cloud endpoint for US South region is “api.us-south.cf.cloud.ibm.com”. To lookup endpoints for other regions, please visit https://cloud.ibm.com/docs/cloud-foundry-public?topic=cloud-foundry-public-endpoints#api-endpoint-options.
Login to CF with your endpoint using the command
cf login -a your_api_endpoint.
barbaros@barbaros-ThinkPad-L380-Yoga:~$ cf login -a api.us-south.cf.cloud.ibm.com API endpoint: https://api.us-south.cf.cloud.ibm.com Email> your_email_address Password> your_password Authenticating... OK Select an org (or press enter to skip): 1. 2. 3. Vaadin14 Org> 3 Targeted org Vaadin14 Targeted space dev API endpoint: https://api.us-south.cf.cloud.ibm.com (API version: 2.147.0) User: your_email_address Org: Vaadin14 Space: dev barbaros@barbaros-ThinkPad-L380-Yoga:~$
|For Oauth login you need to use: |
Once you are logged in you are ready for the final step before pushing your application: Creating a
Navigate to the root folder of your Vaadin project and create a new file
manifest.yml. Open the
manifest.ymlfile and enter your desired application name, number of instances you want to deploy, amount of memory you want to provide for each instance, the cloud foundry buildpack you want to use and the path to your
.jarfile similar as shown below:
applications: - name: vaadin-demo instances: 1 memory: 2G buildback: java_buildpack path: target/my-starter-project-1.0-SNAPSHOT.jarNote
Please note that you can give less than 2G memory for your application, i.e. 256M if you use a Lite account.
Once you are done you can proceed to the final step to deploy your application on IBM Cloud.
Navigate to the root folder of your Vaadin project and run the
cf push command:
. . . Waiting for app to start... name: my-starter-project-vaadin14 requested state: started routes: my-starter-project-vaadin14.mybluemix.net last uploaded: Sat 02 May 14:57:09 CEST 2020 stack: cflinuxfs3 buildpacks: java_buildpack type: web instances: 1/1 memory usage: 2048M start command: JAVA_OPTS="-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1 -Djava.io.tmpdir=$TMPDIR -XX:ActiveProcessorCount=$(nproc) -Djava.ext.dirs=$PWD/.java-buildpack/container_security_provider:$PWD/.java-buildpack/open_jdk_jre/lib/ext -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS -Daccess.logging.enabled=false -Dhttp.port=$PORT" && CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE -totMemory=$MEMORY_LIMIT -loadedClasses=12031 -poolType=metaspace -stackThreads=250 -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 JAVA_OPTS=$JAVA_OPTS JAVA_HOME=$PWD/.java-buildpack/open_jdk_jre exec $PWD/.java-buildpack/tomcat/bin/catalina.sh run state since cpu memory disk details #0 running 2020-05-02T01:57:39Z 0.0% 287.9M of 2G 183.5M of 1G
You can check the status of your Cloud Foundry applications with the
cf apps command, stop an application with the
cf stop application_name command or delete it with
cf delete application_name.
To see the recent logs, use
cf logs application_name -–recent or use
cf logs application_name to view logs in real time.
|Replace each instance of |
This is an alternative way to deploy your application which will allow you to push updates to it directly from your git repository.
Provision a Continuous Delivery service on IBM Cloud by clicking on Catalog and selecting the service.Tip
You can also use the search field to find the service you are looking for.
When you provision your Continuous Delivery service, you might want to make sure that your location is the same as the location of your CF Organization’s space.
In this tutorial "Dallas" (i.e. "US South") has been selected.
Once you have provisioned a Continuous Delivery service you will need to create a Toolchain for it.
You can create a Toolchain by:
Selecting your Continuous Delivery service from Resource List on Dashboard and clicking on Getting Started.
At this point you will have the option to create a toolchain or view existing toolchains. Click on view existing toolchains (or click on create a toolchain if you want to skip the overview of toolchains).Tip
If you haven’t created a dedicated "Resource Group" for your project, you can create one by visiting your Dashboard (IBM Cloud) → Manage → Account → Resource Groups.
Next, you will be able to pick the "Resource Group" and the "Location" for your toolchain. Click on Create toolchain.
Scroll down the page until you see Other templates.
Select Build your own toolchain.
Give your toolchain a name, select a region, a resource group and click on Create.
You will need two tools: “Git Repos and Issue Tracking” -which is a Gitlab clone on IBM Cloud- and “Delivery Pipeline”.
First, add the git repository and make sure that Track deployment of code changes is checked.
You can provision a private git repository on IBM Cloud for free. Next you need to provision a Delivery Pipeline.
After provisioning both tools, your toolchain should be looking like this:
Now, you need to push your Vaadin 14 project to the git repository.
Right-click to open the Git tool in a new tab and follow the instructions.
After pushing your project, return to the tab of your toolchain and click on the Delivery Pipeline tool.
You will need to create a new “Stage”. The “Input” of the Stage will be automatically filled with information from the Git repository you added to your toolchain. Make sure that you configure the “Build” Job as shown below and save. This will be your “BuildStage”.
Here is the Deploy script:
#!/bin/bash mvn -B package -Pproduction cp manifest.yml target/manifest.yml cd target echo $(pwd) echo $(ls)
Next you need to create a new stage “DeployStage”. The input will be automatically configured as Build artifacts from the previous stage. Configure the “Deploy” Job similar as shown below:
Here is the Deploy script:
#!/bin/bash echo $(pwd) echo $(ls) if [ -d "target" ]; then echo "target directory already exists..." else mkdir target echo "Created target directory..." fi cp my-starter-project-plain-java-servlet-1.0-SNAPSHOT.war target cf push
Finally, click on the Play icon and run the stage.
After successful deployment when you click on View console you will be forwarded to deployment page of the application, where you can check its status:
Clicking on Visit App URL will show you the app’s website:
by Barbaros Özdemir
For questions about deployments on IBM Cloud please feel free to contact email@example.com