Tomcat
| Fiche express | |
|---|---|
| Type | Conteneur de servlets / serveur web Java |
| Éditeur | Apache Software Foundation |
| Ports usuels | 8080 (HTTP), 8443 (HTTPS), 8005 (shutdown), 8009 (AJP) |
| Voir aussi | Tomcat (sécurisation) · Tomcat (SSL) · Script init.d Tomcat |
Apache Tomcat est un conteneur de servlets et serveur web Java. Cette page décrit l'installation et la configuration d'une instance Tomcat (préparation du stockage, script d'init, utilisateurs, server.xml, journalisation, manager).
Préparation du stockage (LVM)
Ajouter un disque dédié, le préparer avec fdisk (type 8e, LVM) puis :
pvcreate /dev/sdb1
vgcreate vg_produits /dev/sdb1
lvcreate -n lv_tomcat -L 15G vg_produits
mkfs.ext4 /dev/vg_produits/lv_tomcat
# montage persistant
echo '/dev/mapper/vg_produits-lv_tomcat /tomcat ext4 defaults 1 2' >> /etc/fstab
mkdir -p /tomcat
mount -a
df -h
Installation
mkdir /var/log/tomcat
# copier la distribution Tomcat dans /tomcat/APP-NAME
chown -R APP-NAME:APP-NAME /tomcat/APP-NAME
# script d'init (voir Script init.d Tomcat)
vi /etc/init.d/tomcat_APP-NAME
chkconfig --add tomcat_APP-NAME
Voir Script init.d Tomcat pour le contenu du script.
Configuration des utilisateurs
Sauvegarder puis éditer conf/tomcat-users.xml (remplacer les mots de passe d'exemple par des valeurs robustes) :
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="CHANGEME" roles="tomcat,manager"/>
<user username="admin" password="CHANGEME" roles="admin,manager"/>
</tomcat-users>
Personnalisation de server.xml
Fichier conf/server.xml. Adapter les ports pour rester cohérent avec l'instance.
Directive Server (port et commande de shutdown) :
<Server port="8005" shutdown="SHUTDOWN">
Directive Service :
<Service name="TOMCAT">
Directive Connector HTTP avec options courantes :
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
maxHttpHeaderSize : taille maximale de l'en-tête HTTP maxThreads : nombre maximum de threads acceptés minSpareThreads : threads créés au démarrage maxSpareThreads : threads inactifs maximum enableLookups : résolution du nom d'hôte client (false en prod) redirectPort : port du connecteur SSL pour les requêtes HTTPS acceptCount : requêtes en file d'attente connectionTimeout : délai de traitement d'une requête disableUploadTimeout: délai d'upload de fichier
Connecteur HTTPS (à décommenter pour activer le SSL) :
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
/usr/bin/keytool -genkey -alias tomcat -keyalg RSA
Connecteur AJP :
<Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="8443" />
Authentification
Chiffrer les mots de passe du fichier utilisateurs :
export JRE_HOME=/usr/
bin/digest.sh -a sha256 MonMotDePasse
Activer le mode chiffré dans server.xml (attribut digest) :
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase" digest="sha256" />
Authentification centralisée via un annuaire LDAP (exemple générique) :
<Realm className="monorg.realm.LdapRealm" debug="99" host="ldap.exemple.tld"
initialContextFactory="com.sun.jndi.ldap.LdapCtxFactory" minCount="1" maxCount="3"
loginTimeout="3" dataSourceName="jdbc/realm" baseDN="dc=exemple,dc=tld"
searchFilter="(&(objectclass=inetOrgPerson)(uid=#userName#))" />
Journalisation via syslog (log4j)
Vérifier la présence de log4j.jar dans lib/, puis configurer log4j.properties de la webapp (commenter les autres appenders) :
log4j.rootLogger=INFO, SYSLOG
log4j.logger.org.apache.catalina=INFO, SYSLOG
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=localhost
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=%p: %m
log4j.appender.SYSLOG.Facility=LOCAL1
Côté rsyslog de la machine :
# /etc/rsyslog.conf
local1.* /var/log/tomcat/tomcat.log
# et exclure local1 de /var/log/messages
service rsyslog restart
Manager / Admin
- Récupérer le paquet tomcat-admin correspondant à la version.
- Copier
admin.xmldansconf/Catalina/localhost/. - Copier l'application dans
webapps/admin. - Vérifier la présence d'un rôle manager dans
tomcat-users.xml, puis redémarrer.
Modifier la bannière
cd $CATALINA_HOME/lib
jar xf catalina.jar org/apache/catalina/util/ServerInfo.properties
# éditer ServerInfo.properties
jar uf catalina.jar org/apache/catalina/util/ServerInfo.properties
Configuration d'une ressource (datasource)
Dans conf/Catalina/localhost/services.xml, server.xml ou context.xml :
<Resource
name="jdbc/ctr"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
validationQuery="select 1 from dual"
username="user"
password="CHANGEME"
url="jdbc:oracle:thin:@hostname.fqdn:1521:SID" />