Docker – How to install multiple Atlassian applications in a single server

dockerjavajiralxctomcat

Ok, this is a two-part question.

I got an unmanaged VPS with CentOS from a hosting company in order to install several Atlassian tools, however, I ran into the problem that when starting a second application, the first one begins to crash.

So far I have installed Confluence (running on port 8090), JIRA (running on 8080) and Crowd (some other port I cannot remember), but I can only run one at a time. I tried setting up a reverse proxy but this does not seem to work.

While doing some research I found that apparently this is not possible:
https://confluence.atlassian.com/display/JIRA/Deploying+Multiple+Atlassian+Applications+in+a+Single+Tomcat+Container
https://confluence.atlassian.com/display/DOC/Installing+Confluence+and+JIRA+Together

I find this weird, since I thought each Atlassian app came with it's own Tomcat… so I'm wondering if I just need to find a way to "use different Tomcat containers", but I am stupid and I don't even know what that means (yes, I used teh googles, and they do nothing).

So, part #1: am I missing something?, or there is just no way of doing this in an accepted way

I think I found a solution though, linux containers:

http://blogs.atlassian.com/2013/06/deploy-java-apps-with-docker-awesome/
http://blogs.atlassian.com/2015/01/stash-docker/
http://blogs.atlassian.com/2013/11/docker-all-the-things-at-atlassian-automation-and-wiring/

Since they seem to isolate the running envirnoment and even enable you to setup network routing between the container and your OS.

So, part #2: are linux containers / docker the accepted solution to my problems?

I honestly don't feel like renting several servers…

Best Answer

I ran into the problem that when starting a second application, the first one begins to crash.

You did not mention any system specifications of your VPS. For me this sounds like you're running out of memory. Do you mean that when the application crashes, the JVM is not shown in the process list anymore? You should check the output of dmesg to see if the JVM was killed by OOM killer.

I find this weird, since I thought each Atlassian app came with it's own Tomcat... so I'm wondering if I just need to find a way to "use different Tomcat containers",

All Atlassian applications are bundled with a Tomcat. You can download the applications in WAR packages as well. You can deploy these packages into your own application servers, if you want to, but that's another story.

Putting all applications into one Tomcat container is not wise. From your description I deduce that you are not familiar with running multiple applications in one Tomcat instance. Therefore:

  • The applications you mention (Confluence, JIRA, Crowd) have different memory requirements, especially when you install plugins into them. You'll run into OOM errors very easily.
  • Upgrading the applications is much easier when all applications are running in their own Tomcat instances. From a security perspective this is very important.
  • If you want to migrate one application to another server, you can just copy the whole Tomcat instance as-is with the application. Only minor configuration changes are required.

A very brief workflow for installing such environment:

  • Create separate users for all applications.
  • Download applications (the Tomcat bundle version) and extract them.
  • Configure server.xml so that the applications are running in different ports. This is crucial. Otherwise only one application can reserve a TCP port for the Tomcat HTTP/AJP connector. Use a unique port per application.
  • Create virtual hosts for all applications.
  • Start the applications per application user.

So, part #2: are linux containers / docker the accepted solution to my problems?

It's one solution. You should consider your setup. If your current setup allows you to run all applications in their own Tomcat instances, what are the benefits of running them in separate Linux containers? It is very easy to over-engineer your setup with Docker. Also, if Docker is not something you're familiar with, you'll have to learn how to use it.