Instalación, configuración e despregamento de aplicacións web en Apache Tomcat 10
Sumario
- 1 Introdución
- 2 Que é Apache Tomcat?
- 3 Funcións clave de Apache Tomcat
- 4 Apache Tomcat fronte a outros servidores de aplicacións Java
- 5 Requisitos previos para instalar Apache Tomcat
- 6 Instalación
- 7 Postinstalación: validación e troubleshooting de posibles erros
- 8 Creación dun virtual host
- 9 Despregamento dunha aplicación web
- 10 Securizando o teu servidor Tomcat
- 11 Configuración de Apache Tomcat para un rendemento óptimo
- 12 Mellores prácticas para xestionar Apache Tomcat
- 13 Ampliación
- 14 Referencias
Introdución
O servidor Apache Tomcat é un contenedor de servlets de código aberto baseado en Java creado para executar aplicacións web con servlets e JavaServer Pages (JSP).
- Servlet
- Módulo escrito en Java que serve para extender as capacidades dun servidor web agregando funcionalidades a este.
E importante ter en conta que as versións de Apache Tomcat están asociadas a distintas tecnoloxías e versións das mesmas. Podes consultar esa relación actualizada.
No momento de elaborar este artigo, as dúas últimas versions de apache:
| Tomcat version | Java version | Servlet spec | JSP spec |
|---|---|---|---|
| 11.0.x | 17 e posterior | 6.1 | 4.0 |
| 10.1.X | 11 e posterior | 6.0 | 3.1 |
Que é Apache Tomcat?
Apache Tomcat funciona como unha ponte entre os servidores web e as aplicacións Java. É un contedor de servlets de código aberto que permite executar aplicacións web en Java de maneira eficiente.
Función principal
Pensa en Tomcat como un motor especializado para aplicacións Java. Mentres que os servidores web convencionais manexan contidos estáticos como imaxes ou ficheiros HTML, Tomcat procesa servlets Java e páxinas JavaServer Pages (JSP) para crear contido web dinámico. Ofrece o entorno de execución necesario para que as túas aplicacións Java xestionen solicitudes web e xeren respostas.
Componentes clave
A arquitectura de Tomcat inclúe:
- Catalina: o contedor de servlets que procesa as túas aplicacións Java.
- Coyote: o conector HTTP que xestiona as solicitudes web.
- Jasper: o motor JSP que converte as túas páxinas en servlets.
Por que elixir Tomcat?
Como servidor de aplicacións de código aberto, Tomcat ofrece:
- Rendemento lixeiro que non sobrecarga os teus recursos.
- Funcións de seguridade integradas para as túas aplicacións.
- Excelente soporte da comunidade.
- Fácil integración con outros servidores web.
Funcións clave de Apache Tomcat
Apache Tomcat vén equipado con capacidades que o fan unha opción popular para aloxar aplicacións Java en servidores HTTP Apache. Vexamos as súas características máis importantes.
Capacidades principais
- Procesamento de servlets: Xestiona eficazmente solicitudes e respostas web, permitindo procesar múltiples solicitudes de xeito simultáneo.
- Compatibilidade con JSP: Procesamento integrado de páxinas JavaServer Pages (JSP) para crear contido dinámico con facilidade.
- Conector HTTP: O conector Coyote xestiona as conexións HTTP entrantes e ofrece:
- Xestión eficiente de solicitudes.
- Agrupamento de conexións.
- Melloras de protocolo.
- Cifrado SSL/TLS para Tomcat.
Funcións de desenvolvemento
- Despregamento en quente: Permite despregar ficheiros WAR sen reiniciar o servidor.
- Xestión de recursos: Xestiona eficientemente os recursos da JVM, como:
- Agrupamento de conexións.
- Xestión de memoria.
- Optimización de fíos de execución.
- Xestión de sesións.
Preparado para empresas
Tomcat inclúe funcións para aplicacións empresariais:
- Soporte para clustering.
- Reinos de seguridade para autenticación.
- Capacidades de aloxamento virtual.
- Rexistro e monitorización extensivos.
Apache Tomcat fronte a outros servidores de aplicacións Java
Comprender como Tomcat se compara con alternativas pode axudarche a confirmar que estás a usar a ferramenta axeitada para as túas necesidades. Vexamos como se compara Tomcat con outras opcións populares.
Comparación de servidores de aplicacións Java
| Característica | Tomcat | JBoss/WildFly | GlassFish | Jetty |
|---|---|---|---|---|
| Tempo de inicio | Rápido | Máis lento | Medio | Moi rápido |
| Uso de memoria | Lixeiro | Elevado | Medio | Lixeiro |
| Configuración | Sinxela | Complexa | Media | Sinxela |
| Compatibilidade completa con JEE | Non | Si | Si | Non |
| Curva de aprendizaxe | Baixa | Alta | Media | Baixa |
Cando escoller Tomcat
Tomcat é máis axeitado cando necesitas:
- Un contedor de servlets lixeiro.
- Tempos de inicio rápidos.
- Un proceso de despregamento sinxelo.
- Baixos requisitos de memoria.
- Soporte básico para aplicacións web en Java.
Cando considerar alternativas
Deberías considerar outras opcións cando precises:
- Funcións completas de Java Enterprise Edition (JEE).
- Clustering integrado.
- Ferramentas avanzadas de xestión.
- Interfaces de administración a nivel empresarial.
Requisitos previos para instalar Apache Tomcat
Antes de instalar, asegúrate de ter todo o necesario para un proceso de configuración do servidor sen problemas.
Requisitos do sistema
- Hardware:
- 2 GB de RAM mínimo para desenvolvemento; 4 GB ou máis para produción.
- Espazo libre en disco: mínimo 1 GB.
- Procesador: 1 núcleo mínimo, recomendados 2.
- Sistema operativo:
- Linux (recomendado para servidores).
- Windows Server.
- macOS (principalmente para desenvolvemento).
Requisitos de software
- Contorna Java:
- Necesítase un JDK ou JRE (versión 8 ou máis recente).
- Configurar a variable de entorno JAVA_HOME.
- Dispoñibilidade de Java no PATH do sistema.
- Requisitos de rede:
- Portos necesarios: 8080 (HTTP), 8443 (HTTPS), 8005 (comandos de apagado), 8009 (AJP).
- Ferramentas adicionais recomendables:
- Un editor de texto para ficheiros de configuración (vim, nano, notepad,...) .
- Ferramentas para xestionar ficheiros WAR (IDEs).
- Ferramentas de monitorización para contornas de produción.
Instalación
En Linux
Prerrequitos: Java e apertura do porto
Neste caso levarase a cabo a instalación en Debian 10 dun Tomcat 9 e OpenJDK 11.
Poderíase instalar JRE de non contar con el:
apt install default-jre
Para coñecer versión de Java instalada e ruta:
update-java-alternatives -l
INTERESANTE. Tes información detallada para instalar e configurar as diferentes versións de java
E sempre será preciso abrir o porto 8080 (porto por defecto de tomcat) do firewall e recargar regras:
ufw allow 8080 ufw reload
Instalación con binarios
É aconsellable facer a instalación cun usuario propio e non o root por cuestions de seguridade. Podemos seguir estes pasos: groupadd tomcat useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat
Co último parámetro ese usuario tomcat non poderá executar consola con shell, estará no grupo tomcat.
mkdir /opt/tomcat cd /opt/tomcat wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.tar.gz tar xzvf apache-tomcat-9.0.65.tar.gz -C /opt/tomcat --strip-components=1 rm apache-tomcat-9.0.65.tar.gz cd /opt/tomcat chgrp -R tomcat /opt/tomcat chmod -R g+r conf chmod -R g+x conf chown -R tomcat webapps/ temp/ work/ logs/
Arrancaremos el servicio al inicio
sudo nano /etc/systemd/system/tomcat.service
[Unit] Description=Apache Tomcat Web Application Container After=network.target [Service] Type=forking Environment=JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64 Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom' ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh User=tomcat Group=tomcat UMask=0007 RestartSec=10 Restart=always [Install] WantedBy=multi-user.target
Reiniciamos el demonio:
systemctl daemon-reload
Le indicamos que ya arranque tomcat:
systemctl start tomcat
Y comprobamos ha arrancado correctamente:
systemctl status tomcat
Instalación con apt install
Esta opción é menos recomendable, coma aquí se sinala:
These packages work fine and are easy to install for a normal single-instance case, but they make it more difficult for more specific use cases, and more difficult for people on the Tomcat User mailing list to help you. That is because each of these packages distributes the files of Tomcat in different places on the disk, sets different environment variables, sets different links from one directory to the other in the filesystem, etc.. Moreover, some of those packages are notably outdated. So it would be better to install a "standard" tomcat downloaded from the website https://tomcat.apache.org/, to some directory like /opt/tomcat, and follow the instructions that are given in the "RUNNING.txt" file.
En todo caso, os pasos serían máis sinxelos. A instalación:
apt install tomcat9 tomcat9-admin tomcat9-docs tomcat9-user tomcat9-examples
- tomcat9-docs: este paquete inclúe unha aplicación web que permite navegar na documentación de Tomcat 9
- tomcat9-examples: este paquete inclúe unha aplicación web que permite acceder a exemplos de Tomcat 9 Servlet e JSP
- tomcat9-admin: este paquete instala dúas aplicacións web que poden axudar a manexar a instancia de Tomcat.
- o manager webapp
- o host-manager webapp
Na miña instalación, feita nun VPS contratado por min:
Para acceder o manager webabb é o host-manager, debemos dar pemisos:
cd /opt/tomcat/conf nano tomcat-users.xml
Nalgunhas distros esta ruta será outra:
cd /etc/tomcat9/ nano tomcat-users.xml
En calquera caso engadir esta liña o ficheiro, gardar, e reiniciar tomcat:
<user username="useradmin" password="useradmin" roles="admin-gui,manager-gui,manager-status"/>
Reiniciamos o servizo:
systemctl restart tomcat
En Windows
É prerrequisito ter a JDK instalada (nuhna versión de JDK compatible coa de Tomcat).
E configurar a variable de entorno, por interfaz gráfica, facendo clic no botón dereito en sistema, e chegando a opción coma se ve na captura:
Ou comando powershell:
[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Java\jdk-18.0.2", "Machine")
Neste caso levarase a cabo a instalación nun Windows 10 Home, con JDK 18.0.2 e Tomcat 10.0.23.
Por sinxelez descargarei e executarei o ficheiro de tomcat Windows Service Installer, porque así guiaranos un asistente.
Con docker
Se non está instalado docker:
sudo apt update sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker
Facer pull da imaxe:
# Pull official Tomcat image docker pull tomcat:9.0
Correr o contenedor con mapeo de portos:
# Run container with port mapping
docker run -d \
--name tomcat \
-p 8080:8080 \
-v tomcat-data:/usr/local/tomcat/webapps \
tomcat:9.0
Verificar o estado do contenedor:
# Check if container is running docker ps # View container logs docker logs tomcat # Access container shell docker exec -it tomcat bash
Postinstalación: validación e troubleshooting de posibles erros
Configurar e arrancar o servizo
Crear un ficheiro de servizo systemd(Linux):
sudo nano /etc/systemd/system/tomcat.service
[Unit] Description=Apache Tomcat After=network.target [Service] Type=forking User=tomcat Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk" Environment="CATALINA_HOME=/opt/tomcat" ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh [Install] WantedBy=multi-user.target
Arrancar o servizo correctamente:
# Linux sudo systemctl start tomcat # Windows net start tomcat9 Check Service Status sudo systemctl status tomcat
Verificar acceso web
Comprobando cun navegador:
- A páxina de benvida: http://your-server-ip:8080
- O Test Manager app: http://your-server-ip:8080/manager
Erros frecuentes na instalación
- Port 8080 already in use: Comproba se o porto está en uso, e de ser así cambia o porto no ficheiro server.xml
- # Check if ports are already in use
- sudo netstat -tulpn | grep LISTEN
- Java not found: Verifica java está instalado e a variable de entorno JAVA_HOME
- # Verify Java installation
- java -version
- Permission denied: Comproba permisos do directorio
- Servizo non arranca: Comproba logs en /var/log/tomcat
- # Check Tomcat logs
- tail -f /opt/tomcat/logs/catalina.out
Outros erros
- Cuestións de memoria: Se Tomcat para inesperadamete, pode ser que esté agotando a memoria
- # Check memory usage
- ps aux | grep tomcat
- # Review garbage collection logs
- tail -f /opt/tomcat/logs/gc.log
- Cuestións de rendemento: con tempos de resposta lentos pode ser:
- Uso elevado da memoria
- Demasiadas conexións concurrentes
- Consultas (queries) contra a base de datos non optimizadas
- Tamaño do pool de fíos insufciente
- # Check system resources
- top -u tomcat
- # View active connections
- netstat -an | grep 8080 | wc -l
- Erros de aplicación: Algúns erros e a sua solución
- 404 Errors: Revisa a ruta de despregamento e de contexto
- 503 Errors: Revisa o agotamento de recursos
- ClassNotFound: Verifica que as librerías se atopan en WEB-INF/lib
- Cuestións relacionadas coa memoria
- # Check Tomcat's memory usage
- ps aux | grep tomcat
- Erros relacionados con permisos
- # View current permissions
- ls -l /opt/tomcat/webapps/your-application
- # Fix permissions if needed
- chown -R tomcat:tomcat /opt/tomcat/webapps/your-application
Creación dun virtual host
- https://tecadmin.net/create-virtualhost-in-tomcat/
- https://tomcat.apache.org/tomcat-10.0-doc/virtual-hosting-howto.html
Despregamento dunha aplicación web
Estrutura das aplicacións a despregar
As aplicacións despregadas seguen esta estrutura:
/webapps/
└── your-application/
├── WEB-INF/
│ ├── web.xml
│ ├── classes/
│ └── lib/
└── resources/
Alternativas para despregamento
Hai varios xeitos de despregar unha aplicacion web en Tomcat.
Colleremos un dos exemplos que facilita a documentación de tomcat, un Hello World:
E seguiremos algunha das alternativas:
Detallaremos dous dos máis comúns.
Despregamento co Application Manager
Coma se ve na imaxe, facer deploy cargando o ficheiro a través do manager, e acceder a mesma:
Para usar a aplicación Manager, requírese configurar o acceso en tomcat-users.xml:
<tomcat-users>
<role rolename="manager-gui"/>
<user username="admin" password="secure_password" roles="manager-gui"/>
</tomcat-users>
E acceder co navegador a http://your-server:8080/manager/html
Desde a interface gráfica poderemos:
- Subir e despregar ficheiros WAR
- Arrancar e parar aplicacións
- Ver o estado dos despregamentos
- Monitorizar recursos
Despregamento en quente copiando na ruta webapps
O xeito máis habitual para os administradores e empregando ficheiros WAR files copiadas na ruta webapps:
# Copy WAR file to webapps directory cp sample.war /opt/tomcat/webapps/ # Watch deployment in logs tail -f /opt/tomcat/logs/catalina.out
E para un container docker:
sudo docker cp /home/osboxes/Desktop/sample.war tomcat:/usr/local/tomcat/webapps/ ”
Por defecto Tomcat automaticadamente desempaqueta e desga os ficheiros WAR localizados na ruta webapps.
Esa despregamento "en quente" e como ter una tenda aberta 24 por 7; alta disponibilidade xa que podes actualizar as aplicacións sen ter que reiniciar o servidor. A configuración realizase no ficheiro server.xml:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
Para contornas en produción:
- unpackWARs=”true”: Dille a Tomcat que descomprima os paquetes da aplicación automáticamente
- autoDeploy=”true”: Vixía na procura de novas aplicacións ou actualizacións e as instala automáticamente
Para aplicacións de negocio críticas, pode ser recomendable deixar autodeploy en false para manter mais control sobre as actualizacións.es.
Securizando o teu servidor Tomcat
A seguridade non é opcional ao executar aplicacións web. A continuación, detállanse algúns pasos esenciais para mellorar a seguridade en Apache Tomcat.
Eliminar aplicacións predeterminadas
Primeiro, elimina as aplicacións predeterminadas innecesarias:
cd $CATALINA_HOME/webapps rm -rf docs examples manager host-manager ROOT
Pensa nisto como eliminar chaves de reposto escondidas baixo o felpudo: menos puntos de entrada significan mellor seguridade.
Protexer a interface de xestión
Crea credenciais seguras para a interface de xestión no ficheiro tomcat-users.xml:
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin"
password="your_strong_password_here"
roles="manager-gui,admin-gui"/>
</tomcat-users>
Configurar o acceso remoto
Limita o acceso ao xestor a enderezos IP específicos en context.xml:
<Context antiResourceLocking="false">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1|192\.168\.1\.*"/>
</Context>
Configuración de SSL/TLS
Habilita HTTPS para cifrar a transmisión de datos:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
Pensa en SSL como enviar cartas en sobres selados en lugar de postais: mantén os teus datos privados durante a transmisión.
INTERESANTE. Tes unha guía con información detallada de SSL e como xestionar os certificados.
En contornas de desenvolvmento, podes empregar certificados autoasinados:
Cabeceiras de seguridade
Engade cabeceiras de seguridade en web.xml para protexerte contra vulnerabilidades web comúns:
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
</filter>
Configuración de Apache Tomcat para un rendemento óptimo
Optimizemos a túa instalación de Tomcat para xestionar aplicacións web de forma eficiente. Pensa nisto como axustar un coche: pequenos cambios poden marcar unha gran diferenza no rendemento.
Configuración da memoria
Así como o teu ordenador necesita suficiente RAM para funcionar ben, Tomcat precisa dunha asignación axeitada de memoria. Configúrase nos ficheiros catalina.sh ou setenv.sh:
export CATALINA_OPTS="$CATALINA_OPTS -Xms512m -Xmx1024m -XX:MaxPermSize=256m"
O significado destas opcións:
- Xms
- Memoria inicial (como o nivel mínimo de combustible).
- Xmx
- Memoria máxima (a capacidade total do depósito).
- MaxPermSize
- Espazo para clases de Java (o espazo de traballo do motor).
Para aplicacións pequenas ou medianas, comezar con 512MB e permitir o crecemento ata 1GB funciona ben.
Optimización do grupo de fíos (Thread Pool)
Os fíos son como traballadores de servizo: necesitas suficientes para xestionar solicitudes, pero non tantos que interfiran uns cos outros.
Modifica o ficheiro server.xml:
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="400"
minSpareThreads="25"
maxSpareThreads="75"
acceptCount="100"
connectionTimeout="20000"
enableLookups="false" />
Que controlan estas configuracións:
- maxThreads
- Número máximo de usuarios simultáneos (como as caixas dun supermercado).
- minSpareThreads
- Traballadores sempre dispoñibles para respostas rápidas.
- acceptCount
- Lonxitude da cola antes de rexeitar novas solicitudes.
- connectionTimeout
- Tempo de espera antes de pechar conexións inactivas.
Configuración de compresión
Igual que comprimir ficheiros antes de envialos por correo electrónico, Tomcat pode comprimir datos para aforrar ancho de banda:
<Connector port="8080" protocol="HTTP/1.1"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript" />
Isto axuda ao teu servidor a enviar información máis rápido, especialmente útil para usuarios con conexións máis lentas.
Configuración da caché
A caché é como ter elementos frecuentemente usados ao alcance da man, en vez de ir ao almacén cada vez:
<Context>
<Resources cachingAllowed="true" cacheMaxSize="100000" />
</Context>
Isto indica a Tomcat que manteña dispoñibles ficheiros frecuentemente accedidos, acelerando os tempos de resposta para os usuarios.
Mellores prácticas para xestionar Apache Tomcat
Para manter o teu servidor funcionando de forma óptima, segue estas prácticas recomendadas para a xestión de Tomcat:
Mantemento regular
- Actualizar regularmente: Mantén actualizadas as versións de Tomcat e Java para garantir a seguridade e o rendemento.
- Monitorizar rexistros: Configura a rotación de rexistros e revísaos periodicamente para detectar problemas.
- Realizar copias de seguridade: Programa copias de seguridade regulares da configuración de Tomcat e das túas aplicacións.
Configuración do contexto
Pensa no ficheiro context.xml como o arquivo de configuración específico da túa aplicación. Nel almacénase información importante, como conexións á base de datos e configuracións específicas do entorno:
<Context>
<!-- Configuración da conexión á base de datos -->
<Environment name="dbUrl"
value="jdbc:mysql://localhost:3306/mydb"
type="java.lang.String" override="false"/>
</Context>
Este enfoque axuda a manter a configuración organizada e facilita a actualización dos parámetros sen necesidade de modificar o código da aplicación.
Axuste de rendemento
- Optimizar a JVM: Axusta os parámetros de memoria en función das necesidades da túa aplicación e dos recursos do servidor.
- Usar agrupamento de conexións: Implementa pools de conexións á base de datos para mellorar a eficiencia.
- Habilitar caché: Utiliza os mecanismos de caché de Tomcat para contido estático.
E convinte realizar probas de carga con ferramentas coma Apache JMeter ou AB Apache Benchmark
Mellores prácticas de seguridade
- Usar HTTPS: Sempre cifra o tráfico entre os clientes e o teu servidor.
- Implementar controis de acceso: Restrinxe o acceso ás aplicacións Manager e Host Manager.
- Mantelo simple: Elimina aplicacións e servizos innecesarios para reducir o espazo de ataque.
INTERESANTE. Podes atopar ferrmamentas para monitorizar e testear a seguridade
Monitorización e alertas
- Configurar a monitorización: Usa ferramentas como JavaMelody ou New Relic para seguir as métricas de rendemento do servidor Tomcat.
- Configurar alertas: Establece notificacións para eventos críticos, como uso elevado de memoria ou erros nas aplicacións.
Ao seguir estas prácticas, manterás un entorno Tomcat robusto, seguro e eficiente para as túas aplicacións.
Ampliación
- Analizando os diferentes métodos de despregamento de aplicacións hacia Tomcat
- Configurando varias instancias de Tomcat nun so servidor simulando contonar (desenvolvemeto, preprodución, formación, probas, produción)