wiki/HowtoTomcat.md

175 lines
4.8 KiB
Markdown
Raw Normal View History

2017-02-20 17:06:36 +01:00
---
categories: java
title: Howto Tomcat
...
2016-12-29 11:25:39 +01:00
2017-02-20 17:06:36 +01:00
* Documentation : <http://tomcat.apache.org/tomcat-7.0-doc/>
* Rôle Ansible : <https://forge.evolix.org/projects/ansible-roles/repository/revisions/unstable/show/tomcat-instance>
2016-12-29 11:25:39 +01:00
2017-02-20 17:06:36 +01:00
## Installation
2016-12-29 11:25:39 +01:00
2017-02-20 17:06:36 +01:00
Cette documentation se concentre sur l'installation et la configuration de Tomcat sur Debian Jessie en mode multi-instances.
2016-12-29 11:25:39 +01:00
2017-02-21 14:42:46 +01:00
Ce mode permet de faire tourner plusieurs instances Tomcat de façon complètement indépendantes, avec leurs propres réglages et en permettant des arrêts/redémarrages d'une instance sans impacter les autres, le tout en mutualisant les binaires.
Sous Debian Jessie, Tomcat 7 et 8 sont disponibles.
2016-12-29 11:25:39 +01:00
~~~
2017-02-21 14:42:46 +01:00
# apt install tomcat7 tomcat7-user || apt install tomcat8 tomcat8-user
2016-12-29 11:25:39 +01:00
~~~
### Unité systemd utilisateur
2017-02-21 14:42:46 +01:00
Installer la librairie PAM pour systemd :
~~~
# apt install libpam-systemd
~~~
Créer l'unité tomcat dans /etc/systemd/user/tomcat.service.
2016-12-29 11:25:39 +01:00
2017-02-20 17:21:00 +01:00
~~~{.ini}
2016-12-29 11:25:39 +01:00
[Unit]
2017-02-21 14:42:46 +01:00
Description=Tomcat %u.
2016-12-29 11:25:39 +01:00
After=network.target
[Service]
2017-02-20 17:06:36 +01:00
WorkingDirectory=%h
Environment="CATALINA_BASE=%h"
EnvironmentFile=%h/conf/env
2016-12-29 11:25:39 +01:00
UMask=0002
2017-02-21 14:42:46 +01:00
# Pour Tomcat 7
2016-12-29 11:25:39 +01:00
ExecStart=/usr/share/tomcat7/bin/startup.sh
ExecStop=/usr/share/tomcat7/bin/shutdown.sh
2017-02-21 14:42:46 +01:00
# Pour Tomcat 8
#ExecStart=/usr/share/tomcat8/bin/startup.sh
#ExecStop=/usr/share/tomcat8/bin/shutdown.sh
2016-12-29 11:25:39 +01:00
Type=forking
[Install]
WantedBy=default.target
~~~
2017-02-20 17:06:36 +01:00
## Création d'une instance
2016-12-29 11:25:39 +01:00
2017-02-21 17:40:35 +01:00
Créer un utilisateur dédié à l'instance et créer son arborescence via tomcatX-instance-create.
2016-12-29 11:25:39 +01:00
~~~
2017-02-20 17:06:36 +01:00
# mkdir -p /srv/tomcat
2017-02-21 14:42:46 +01:00
# tomcat7-instance-create /srv/tomcat/app || tomcat8-instance-create /srv/tomcat/app
2017-02-20 17:06:36 +01:00
# useradd -d /srv/tomcat/app app
# chown -R app:app /srv/tomcat/app
# chmod -R u=rwX,g=rX,o= /srv/tomcat/app
# chmod -R g+ws /srv/tomcat/app
2016-12-29 11:25:39 +01:00
~~~
2017-02-20 17:21:00 +01:00
### Configuration
2017-02-20 17:06:36 +01:00
Créer les variables d'environnement dans /srv/tomcat/app/conf/env
2016-12-29 11:25:39 +01:00
2017-02-20 17:21:00 +01:00
~~~{.bash}
2017-02-20 17:06:36 +01:00
# Memory allocation options.
# Xmx Max memory allocated to instance.
# Xms Allocated memory at startup.
# XX:MaxPermSize Memory allocated to internal objects.
2017-02-20 17:21:00 +01:00
JAVA_HOME="/usr/lib/jvm/java-1.7.0-openjdk-amd64"
JAVA_OPTS="-server -XmxTOMCAT_INSTANCE_RAMm -XmsTOMCAT_INSTANCE_RAMm -XX:MaxPermSize=(TOMCAT_INSTANCE_RAM/2)m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -Xverify:none"
2016-12-29 11:25:39 +01:00
~~~
2017-02-21 17:40:35 +01:00
Il reste ensuite à ajuster les ports HTTP et SHUTDOWN dans /srv/tomcat/app/conf/server.xml
2016-12-29 11:25:39 +01:00
2017-02-20 17:21:00 +01:00
~~~{.xml}
<Server port="SHUTDOWN_PORT" shutdown="SHUTDOWN">
<Connector port="HTTP_PORT" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443"/>
~~~
### Garder la session utilisateur active
2017-02-20 17:06:36 +01:00
Activer la conservation de la session de l'utilisateur.
2016-12-29 11:25:39 +01:00
~~~
2017-02-20 17:06:36 +01:00
# loginctl enable-linger foo
2016-12-29 11:25:39 +01:00
~~~
### Reverse proxy avec Apache
2017-02-21 17:44:01 +01:00
Activer le mod proxy et proxy_http :
2016-12-29 11:25:39 +01:00
~~~
2017-02-20 17:21:00 +01:00
# a2enmod proxy_http
2017-02-20 17:06:36 +01:00
~~~
2016-12-29 11:25:39 +01:00
2017-01-03 11:20:35 +01:00
~~~{.apache}
2016-12-29 11:25:39 +01:00
<VirtualHost *:80>
2017-02-20 17:06:36 +01:00
ServerName SERVER_NAME
CustomLog /var/log/apache2/access.log combined
CustomLog /var/log/apache2/INSTANCE_NAME_access.log combined
ErrorLog /var/log/apache2/INSTANCE_NAME_error.log
Include /etc/apache2/nocache-js.conf
<IfModule mod_proxy_http.c>
ProxyPass / http://127.0.0.1:HTTP_PORT/
ProxyPassReverse / http://127.0.0.1:HTTP_PORT/
<Proxy http://127.0.0.1:HTTP_PORT/>
Allow from all
</Proxy>
</IfModule>
2016-12-29 11:25:39 +01:00
</VirtualHost>
~~~
2017-02-20 17:21:00 +01:00
## Utilisation
Enfin, l'utilisateur pour activer l'instance au démarrage et la démarrer, voir le status, …
~~~
$ systemctl --user enable tomcat
$ systemctl --user start tomcat
$ systemctl --user status -l tomcat
$ systemctl --user restart tomcat
$ systemctl --user stop tomcat
~~~
## Divers
2017-02-20 17:06:36 +01:00
### Activation du « access_log » de Tomcat
2016-12-29 11:25:39 +01:00
2017-02-20 17:06:36 +01:00
Pour loguer tous les accès, il suffit de décommenter cette partie dans le server.xml :
2017-01-03 11:20:35 +01:00
2017-02-20 17:06:36 +01:00
~~~{.xml}
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
2016-12-29 11:25:39 +01:00
~~~
2017-02-20 17:06:36 +01:00
### Connecteur HTTP
2016-12-29 11:25:39 +01:00
2017-02-20 17:06:36 +01:00
Activer la compression gzip de certains types de fichiers :
2016-12-29 11:25:39 +01:00
2017-02-20 17:21:00 +01:00
Dans le fichier server.xml, rajouter ceci dans le connecteur HTTP :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
2017-02-20 17:06:36 +01:00
compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/plain,text/javascript,application/javascript"
2016-12-29 11:25:39 +01:00
~~~
2017-02-20 17:21:00 +01:00
### Manager Tomcat
2016-12-29 11:25:39 +01:00
Une des méthodes possibles pour le déployment d'applications java est de le faire via une interface web, le manager Tomcat.
Installation :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
2017-02-21 14:42:46 +01:00
# apt install tomcat7-admin || apt install tomcat8-admin
2016-12-29 11:25:39 +01:00
~~~
2017-02-21 14:42:46 +01:00
Il faut ensuite ajouter un utilisateur au role _manager_, dans le fichier tomcat-users.xml (équivalent d'un fichier htpasswd d'Apache) :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
<tomcat-users>
[...]
<role rolename="manager"/>
<user username="jdoe" password="s3cret" roles="manager"/>
</tomcat-users>
~~~
Une fois Tomcat redémarré, l'accès au manager ce fait sur l'URI : <http://example.com:8080/manager/html>