--- categories: java title: Howto Tomcat ... * Documentation : * Rôle Ansible : ## Installation Cette documentation se concentre sur l'installation et la configuration de Tomcat sur Debian Jessie en mode multi-instances. 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. ~~~ # apt install tomcat7 tomcat7-user || apt install tomcat8 tomcat8-user ~~~ ### Unité systemd utilisateur Installer la librairie PAM pour systemd : ~~~ # apt install libpam-systemd ~~~ Créer l'unité tomcat dans /etc/systemd/user/tomcat.service. ~~~{.ini} [Unit] Description=Tomcat %u. After=network.target [Service] WorkingDirectory=%h Environment="CATALINA_BASE=%h" EnvironmentFile=%h/conf/env UMask=0002 # Pour Tomcat 7 ExecStart=/usr/share/tomcat7/bin/startup.sh ExecStop=/usr/share/tomcat7/bin/shutdown.sh # Pour Tomcat 8 #ExecStart=/usr/share/tomcat8/bin/startup.sh #ExecStop=/usr/share/tomcat8/bin/shutdown.sh Type=forking [Install] WantedBy=default.target ~~~ ## Création d'une instance Créer un utilisateur dédié à l'instance et créer son arborescence via tomcatX-instance-create. ~~~ # mkdir -p /srv/tomcat # tomcat7-instance-create /srv/tomcat/app || tomcat8-instance-create /srv/tomcat/app # 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 ~~~ ### Configuration Créer les variables d'environnement dans /srv/tomcat/app/conf/env ~~~{.bash} # Memory allocation options. # Xmx Max memory allocated to instance. # Xms Allocated memory at startup. # XX:MaxPermSize Memory allocated to internal objects. 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" ~~~ Il reste ensuite à ajuster les ports HTTP et SHUTDOWN dans /srv/tomcat/app/conf/server.xml ~~~{.xml} ~~~ ### Garder la session utilisateur active Activer la conservation de la session de l'utilisateur. ~~~ # loginctl enable-linger foo ~~~ ### Reverse proxy avec Apache Activer le mod proxy et proxy_http : ~~~ # a2enmod proxy_http ~~~ ~~~{.apache} 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 ProxyPass / http://127.0.0.1:HTTP_PORT/ ProxyPassReverse / http://127.0.0.1:HTTP_PORT/ Allow from all ~~~ ## Utilisation Les instances Tomcat étant gérées via une unité utilisateur Systemd, les commandes suivantes doivent être lancées via l'utilisateur dédié à l'instance. ~~~ # su - app ~~~ #### Activation au démarrage ~~~ $ systemctl --user enable tomcat ~~~ #### Démarrage ~~~ $ systemctl --user start tomcat ~~~ #### Extinction ~~~ $ systemctl --user stop tomcat ~~~ #### Redémarrage ~~~ $ systemctl --user restart tomcat ~~~ #### Status ~~~ $ systemctl --user status -l tomcat ~~~ ## Divers ### Activation du « access_log » de Tomcat Pour loguer tous les accès, il suffit de décommenter cette partie dans le server.xml : ~~~{.xml} ~~~ ### Connecteur HTTP Activer la compression gzip de certains types de fichiers : Dans le fichier server.xml, rajouter ceci dans le connecteur HTTP : ~~~ compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/plain,text/javascript,application/javascript" ~~~ ### Manager Tomcat Une des méthodes possibles pour le déployment d'applications java est de le faire via une interface web, le manager Tomcat. Installation : ~~~ # apt install tomcat7-admin || apt install tomcat8-admin ~~~ Il faut ensuite ajouter un utilisateur au rôle _manager_, dans le fichier tomcat-users.xml (équivalent d'un fichier htpasswd d'Apache) : ~~~ [...] ~~~ Une fois Tomcat redémarré, l'accès au manager se fait sur l'URI :