Cómo ejecutar varias aplicaciones web en un servidor Apache Tomcat


Apache Tomcat es un contenedor web de código abierto que le permite implementar Java Servlets, JSP y Web Sockets para ejecutar un servidor web impulsado por código Java. También se puede identificar como un contenedor de servlets multiplataforma o un contenedor web.

Simplemente, Tomcat es muy popular entre muchos interesados industriales debido a muchas ventajas sobre otros contenedores web en el mercado. Puede crear archivos web desde su proyecto Java y simplemente implementarlo dentro de un contenedor Tomcat para alojar un servidor web HTTP codificado por Java. Las industrias eligen apache tomcat sobre otros contenedores debido a las siguientes ventajas.

  1. Peso ligero.
  2. Ampliamente utilizado.
  3. Mucho más rápido que otros contenedores.
  4. Fácil de configurar.
  5. Muy flexible.

Por lo general, apache tomcat es un producto fácil de usar que brinda a los ingenieros espacio para implementar sus artefactos WAR (Web ARchives) con cambios mínimos en la configuración.

Esta publicación está dirigida a una audiencia que ya está usando tomcat y sabe cómo iniciar y usar el motor apache tomcat.

En apache tomcat, los WAR deben colocarse en el directorio webapps en el que el contenedor los implementa de forma predeterminada. Simplemente, el directorio webapps actúa como el contenedor principal del código Java para que tomcat lo implemente como servidor web.

En un escenario en el que necesitamos alojar más de un servidor web desde un solo contenedor Tomcat, puede usar esta publicación como guía para lograrlo. Le mostraré cómo implementar múltiples aplicaciones web o dos servidores web dentro de un tomcat de este artículo.

Requisitos previos: Java debe estar instalado en el servidor. Preferiblemente 1.7.xo superior. En este tutorial tengo instalado Java 1.7 ya que uso la versión 8.0.37 de tomcat.

Puede instalar Java usando su administrador de paquetes como yum o apt como se muestra:

# yum install java              [On CentOS based Systems]
# apt-get install default-jre   [On Debian based Systems]

Paso 1: Instale el servidor Apache Tomcat

1. Primero cree un usuario tomcat separado usando la cuenta raíz.

# useradd tomcat
# passwd tomcat

Ahora inicie sesión como usuario de tomcat y descargue el último paquete de apache tomcat del sitio oficial aquí: comando wget para descargar directamente en la terminal.

En este caso, descargo Apache Tomcat, 8.5.5, que es una de las últimas versiones estables lanzadas hasta ahora.

$ wget http://redrockdigimark.com/apachemirror/tomcat/tomcat-8/v8.5.5/bin/apache-tomcat-8.5.5.tar.gz

2. Una vez descargado el archivo, descomprima el contenido usando el comando tar y vea la estructura del directorio como se muestra:

$ tar -xvf apache-tomcat-8.5.5.tar.gz
$ cd apache-tomcat-8.5.5/
$ ls -l
total 112
drwxr-x---. 2 tomcat tomcat  4096 Sep 29 11:26 bin
drwx------. 2 tomcat tomcat  4096 Sep  1 01:23 conf
drwxr-x---. 2 tomcat tomcat  4096 Sep 29 11:26 lib
-rw-r-----. 1 tomcat tomcat 57092 Sep  1 01:23 LICENSE
drwxr-x---. 2 tomcat tomcat  4096 Sep  1 01:21 logs
-rw-r-----. 1 tomcat tomcat  1723 Sep  1 01:23 NOTICE
-rw-r-----. 1 tomcat tomcat  7063 Sep  1 01:23 RELEASE-NOTES
-rw-r-----. 1 tomcat tomcat 15946 Sep  1 01:23 RUNNING.txt
drwxr-x---. 2 tomcat tomcat  4096 Sep 29 11:26 temp
drwxr-x---. 7 tomcat tomcat  4096 Sep  1 01:22 webapps
drwxr-x---. 2 tomcat tomcat  4096 Sep  1 01:21 work

Paso 2: configurar el servidor Apache Tomcat

3. El cambio de configuración que estamos buscando se encuentra dentro del directorio conf, se está utilizando para colocar todos los archivos de configuración que ayudan a que Tomcat se inicie.

El contenido del directorio conf se ve a continuación.

$ cd conf/
$ ls -l
total 224
-rw-------. 1 tomcat tomcat  12502 Sep  1 01:23 catalina.policy
-rw-------. 1 tomcat tomcat   7203 Sep  1 01:23 catalina.properties
-rw-------. 1 tomcat tomcat   1338 Sep  1 01:23 context.xml
-rw-------. 1 tomcat tomcat   1149 Sep  1 01:23 jaspic-providers.xml
-rw-------. 1 tomcat tomcat   2358 Sep  1 01:23 jaspic-providers.xsd
-rw-------. 1 tomcat tomcat   3622 Sep  1 01:23 logging.properties
-rw-------. 1 tomcat tomcat   7283 Sep  1 01:23 server.xml
-rw-------. 1 tomcat tomcat   2164 Sep  1 01:23 tomcat-users.xml
-rw-------. 1 tomcat tomcat   2633 Sep  1 01:23 tomcat-users.xsd
-rw-------. 1 tomcat tomcat 168133 Sep  1 01:23 web.xml

4. En este caso, lo que es importante para mí es el archivo server.xml . Así que no voy a hacer una explicación detallada sobre otros archivos o directorios.

Server.xml es el archivo de configuración que le dice a Tomcat qué puerto iniciar, qué contenido de directorio implementar y muchas más configuraciones principales y básicas.

Básicamente, se ve como a continuación después de abrir el archivo.

$ vim server.xml

Paso 3: implementación de aplicaciones web en Apache Tomcat

5. Ahora implementaremos una nueva aplicación web en Apache tomcat, primero busque el lugar donde la etiqueta de servicio está cerrada e inserte las líneas siguientes después de la primera etiqueta de servicio cerrada.

<Service name="webapps2">
    <Connector port="7070" maxHttpHeaderSize="7192"
        maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
        enableLookups="false" redirectPort="7443" acceptCount="100"
        connectionTimeout="20000" disableUploadTimeout="true" />
        <Connector port="7072" 
        enableLookups="false" redirectPort="7043" protocol="AJP/1.3" />

    <Engine name="webapps2" defaultHost="localhost">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
            resourceName="UserDatabase"/>
            <Host name="localhost" appBase="webapps2"
                unpackWARs="true" autoDeploy="true"
                 xmlValidation="false" xmlNamespaceAware="false">
            </Host>
    </Engine>
</Service>

Como puede ver, he cambiado el puerto del conector a 7070 en la entrada recién insertada ya que el Tomcat predeterminado comienza con el puerto 8080. Después de configurar esto por completo, habrá dos servidores web ejecutándose en los puertos 8080 y 7070.

6. Después de guardar el cambio realizado en server.xml , cree un directorio en apache llamado webapps2 dentro del main de apache.

$ cd /home/tomcat/apache-tomcat-8.5.5/
$ mkdir webapps2

Si observa la nueva entrada server.xml que he proporcionado, debería ver que el nombre del servicio, la base de la aplicación y el motor se denominan webapps2. Esa es la razón por la que creé el directorio llamado webapps2. Puede crear uno como desee, pero asegúrese de realizar los cambios necesarios en la entrada.

7. Para asegurarme de que el segundo servidor web esté en funcionamiento, copié el contenido del directorio webapps en el directorio webapps2.

$ cp -r webapps/* webapps2/

8. Ahora la parte emocionante. Vamos a iniciar el servidor y ver si está funcionando. Vaya al directorio bin y ejecute el script startup.sh . Puede ver los registros en el archivo catalina.out que se encuentra en el directorio de registros.

$ cd bin/
$ ./startup.sh
Using CATALINA_BASE:   /home/tomcat/apache-tomcat-8.5.5
Using CATALINA_HOME:   /home/tomcat/apache-tomcat-8.5.5
Using CATALINA_TMPDIR: /home/tomcat/apache-tomcat-8.5.5/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /home/tomcat/apache-tomcat-8.5.5/bin/bootstrap.jar:/home/tomcat/apache-tomcat-8.5.5/bin/tomcat-juli.jar
Tomcat started.

9. Si consulta los registros, podrá ver que tanto webapps como webapps2 están implementadas y la aplicación se inicia sin ningún problema.

$ cd logs/
$ tail -25f catalina.out 
29-Sep-2016 12:13:51.210 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/examples
29-Sep-2016 12:13:51.661 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/examples has finished in 452 ms
29-Sep-2016 12:13:51.664 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/docs
29-Sep-2016 12:13:51.703 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/docs has finished in 39 ms
29-Sep-2016 12:13:51.704 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/host-manager
29-Sep-2016 12:13:51.744 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/host-manager has finished in 39 ms
29-Sep-2016 12:13:51.748 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [http-nio-8080]
29-Sep-2016 12:13:51.767 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [ajp-nio-8009]
29-Sep-2016 12:13:51.768 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service webapps2
29-Sep-2016 12:13:51.768 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.5
29-Sep-2016 12:13:51.777 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/manager
29-Sep-2016 12:13:51.879 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/manager has finished in 102 ms
29-Sep-2016 12:13:51.879 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/ROOT
29-Sep-2016 12:13:51.915 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/ROOT has finished in 35 ms
29-Sep-2016 12:13:51.927 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/examples
29-Sep-2016 12:13:52.323 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized()
29-Sep-2016 12:13:52.337 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log SessionListener: contextInitialized()
29-Sep-2016 12:13:52.341 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/examples has finished in 414 ms
29-Sep-2016 12:13:52.341 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/docs
29-Sep-2016 12:13:52.371 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/docs has finished in 29 ms
29-Sep-2016 12:13:52.371 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/host-manager
29-Sep-2016 12:13:52.417 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/host-manager has finished in 46 ms
...

10. En este escenario, la IP del servidor que utilicé es 172.16.1.39 y puede ver que podría iniciar dos servidores web dentro de un solo contenedor Tomcat.

http://172.16.1.39:8080   [1st Web App]
http://172.16.1.39:7070   [2nd Web App]

Espero que todos encuentren este artículo útil y agradable. Manténgase en contacto con TecMint y no dude en comunicarse conmigo para cualquier consulta relacionada con este artículo.