Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Is there a proper way to run more than one tomcat instance on an Ubuntu server?

I've done some searching and found two options:

  1. Download a zipped tomcat and manually deploy it. The obvious con is that it won't be upgraded using apt-get.
  2. Use some advanced scripting, which is dangerous in a production server.

Any other ideas to cleanly run another instance?

Thanks in advance,

Adam

share|improve this question
    
why do you need more than one instance? – cupakob Nov 14 '10 at 10:57
    
You need more than one instance if the deployment and runtime management for different web applications must be independent (e.g. executed at different times or by different people). – Reinier Post Feb 5 at 10:27
    
See also superuser.com/questions/142791/… – Reinier Post Feb 5 at 11:56
up vote 2 down vote accepted

Scripting seems to be the best solution because defaut ubuntu server configuration is for one instance only.

As you noticed, you must update Tomcat manually, but this is not necessary a problem because, often your Java applications depend on a particular JDK version so upgrade process must be done carefully especially on a production server.

share|improve this answer
1  
This is not correct. You can use multiple Tomcat instances that use the same Tomcat software provided by the tomcat6 or tomcat7 package. The tomcat7-user package provides a utility to create such instances for tomcat7. – Reinier Post Feb 5 at 10:26

Have you considered configuring several webapps directories instead of running multiple tomcat instances?

Of course there are cases where you really need multiple instances but in case of serving same application separately for multiple hosts, you may do it by adding multiple declarations in server.xml:

  <Host name="host1.example.com" appBase="host1"
    unpackWARs="true" autoDeploy="true" 
    xmlValidation="false" xmlNamespaceAware="false" />

  <Host name="host2.example.com" appBase="host2"
    unpackWARs="true" autoDeploy="true" 
    xmlValidation="false" xmlNamespaceAware="false" />

Now you may create "/var/lib/tomcat6/host1" and "/var/lib/tomcat6/host2" directories and deploy WAR files to them.

share|improve this answer

I am setting this up on Ubuntu 14.04.3 LTS. I am using the Tomcat 7 provided by the tomcat7 package.

It installs Tomcat as a system service by providing a standard init script:

/etc/init.d/tomcat7

and configuration file:

/etc/default/tomcat7

Tomcat supports running multiple instances with the same server software. The server software is located in $CATALINA_HOME, the files for the instance are located in $CATALINA_BASE. They are defined as follows in /etc/init.d/tomcat7:

NAME=tomcat7
CATALINA_HOME=/usr/share/$NAME
CATALINA_BASE=/var/lib/$NAME

(Caveat: when editing files in the latter, be aware that it has some symlinks into the former.)

The tomcat7-user package provides the utility tomcat7-instance-create that can be used to create a directory tree for an additional Tomcat instance, including a bin/ directory with scripts for starting and stopping the instance manually.

What I haven't found is support for turning such an additional instance into a system service. Therefore, it must be done manually, e.g. as follows:

  1. Pick a value for the service name; it will be $NAME in the new init script.
  2. Create a new user with that name that will own the files for the Tomcat instance and as which Tomcat will run. It can be a system user, its properties should be the same as for the tomcat user.
  3. Run tomcat7-instance-create as that user to create a Tomcat instance.
  4. Configure it and install the web application(s) you want to run with it. Test them using its bin/startup.sh and bin/shutdown.sh scripts.
  5. Move the logs to /var/log/$NAME and symlink them back to logs/ of the new Tomcat instance.
  6. Write /etc/init.d/$NAME, e.g. by copying and modifying /etc/init.d/tomcat7 and modifying the assignment to $NAME. (It would be nicer if you didn't need to copy the whole script but could just create a link to it.)
  7. Write /etc/default/$NAME to point at your Tomcat instance and user.
  8. Use upstart-rc.d to install the new service.

I gleaned some of the details from Kodjo-Kuma Djomeda.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.