Getting acquainted with heroku and preparing the application
1. I followed getting started steps to signup, install heroku tools locally and login.
2. I followed the instructions to add jetty runner to the pom file.
3. Added Procfile file to declare process runner instructions executed on heroku described here .
4.Tested application locally
Once I have verified that application runs fine locally I was ready to push it up to the cloud.
Heroku uses git to push apps to the cloud, since the app is stored on github I was ready to deploy the application.
Deploying application
Created the app on heroku by executing following command:
heroku create --stack cedarThe output I got was something like that.
Creating severe-dusk-1991... done, stack is cedar http://severe-dusk-1991.herokuapp.com/ | git@heroku.com:severe-dusk-1991.git Git remote heroku addedNote that the url listed in the second line of the output is the url for accessing the app on the web.
After creation I was ready to actually deploy the app to the heroku by executing following command:
git push heroku masterGot the following output
.... -----> Heroku receiving push -----> Java app detected -----> Installing Maven 3.0.3..... done -----> Installing settings.xml..... done -----> executing /app/tmp/repo.git/.cache/.maven/bin/mvn -B -Duser.home=/tmp/build_3pcwfaauez5e -Dmaven.repo.local=/app/tmp/repo.git/.cache/.m2/repository -s /app/tmp/repo.git/.cache/.m2/settings.xml -DskipTests=true clean install [INFO] Scanning for projects .... -----> Discovering process types Procfile declares types -> web -----> Compiled slug size is 14.0MB -----> Launching... done, v5 http://severe-dusk-1991.herokuapp.com deployed to Heroku ...Note that maven build is executed out on heroku instance and output then deployed. Heroku also supports gradle as build tool.
After this step application is readily available for public viewing at: http://severe-dusk-1991.herokuapp.com/home . Note: this is a free account, I'm not sure how long this app is actually going to be available .
Logging and viewing logging output
Heroku provides access to application log output only when it's printed to standard output. Application I just deployed used logback library and outputs logging output to files. In order to take advantage of heroku logging service I had to re-direct output to system.out by changing logging configuration and redeploy the application.
Steps
1. Changed logback file to use console appender instead of file appenders (this is really beyound the scope of this article).
2. Re-deployed application to the heroku service by re-executing command:
git push heroku master
3. Now I was able to monitor application logs by executing following command
heroku logs --tailOther possible application changes
Granted, that the application I have deployed is very, very simple. Hosting more complex applications might require significant configuration (and maybe even code) modifications. For one, heroku doesn't support session affinity. There are several approaches for dealing with that (i.e. using something like memcached, database, nosql store, or such for session state) which are beyond the scope of this article. There is also a question of deploying and configuation of external services such as databases, etc.., which will contribute to the complexity of cloud deployment and configuration. Heroku does provide a significant number of add on services available for deployed applications which might make things easier.
No comments:
Post a Comment