Pages enfant
  • Tomcat en production

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.
Commentaire: Migrated to Confluence 5.3

Préambule

Info

Ce document est un exemple de ce qui ce fait sur des serveurs de production, il n'a pas la prétention d'être LA référence.
D'ailleurs j'encourage tout personne le souhaitant à enrichir ce document pour apporter son expérience.

Le but de ce document est de :

  1. Faciliter les mises à jour ultérieures
  2. Supprimer ce qui est inutile et consommateur de ressources
  3. Sécuriser nos installations
  4. Disposer d'outils de maintenance

Pour l'exemple

Info
titleAstuce

Pour vous faciliter les mises à jours ultérieures de tomcat ou des versions d'esup-portail, il est conseillé d'utiliser des liens symboliques.
Par exemple :

  • /esup/tomcat6 est un lien symbolique vers l'installation binaire de tomcat (server.home)
  • /esup/esup-install est un lien symbolique vers l'installation binaire de tomcat (esup.root)
  • /esup/esup-sources est un lien symbolique vers les sources uPortal (esup.sources)
  • /esup/webapps est un lien symbolique vers le webapps de déploiement esup-portail (esup.deploy)

Installation d'un serveur tomcat 6

Bloc de code
[esup@test]$ mkdir /esup
[esup@test]$ cd /esup
[esup@test]$ wget http://apache.cict.fr/tomcat/tomcat-6/v6.0.24/bin/apache-tomcat-6.0.24.tar.gz
[esup@test]$ tar -zxvf apache-tomcat-6.0.24.tar.gz
[esup@test]$ ln -s apache-tomcat-6.0.24 tomcat6
[esup@test]$ rm apache-tomcat-6.0.24.tar.gz

On a donc :

Bloc de code
/esup/tomcat6 => /esup/apache-tomcat-6.0.24

Installation esup-3

Bloc de code
[esup@test]$ cd /esup
[esup@test]$ wget http://sourcesup.cru.fr/frs/download.php/2875/esup-3.1.2-esup-0.5-RC1.tar.gz
[esup@test]$ tar -zxvf esup-3.1.2-esup-0.5-RC1.tar.gz
[esup@test]$ ln -s esup-3.1.2-esup-0.5-RC1 esup-install
[esup@test]$ rm esup-3.1.2-esup-0.5-RC1.tar.gz

On a donc :

Bloc de code
/esup/esup-install => /esup/esup-3.1.2-esup-0.5-RC1

Librairies

Modifier le /esup/tomcat6/conf/catalina.properties

Bloc de code
[esup@test]$ vi /esup/tomcat6/conf/catalina.properties

> shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar

Créer les dossiers shared/classes et shared/lib

Bloc de code
[esup@test]$ mkdir -p /esup/tomcat6/shared/classes
[esup@test]$ mkdir -p /esup/tomcat6/shared/lib

Le driver SQL

Placer le driver de base de données dans /esup/tomcat6/lib (Utilisé par le pool de connexion Tomcat)

Bloc de code
[esup@test]$ cp /esup/esup-install/update/Tomcat/lib/mysql-connector-java-5.1.6.jar /esup/tomcat6/lib

Vous trouverez différents drivers dans le package [/esup/esup-install/update/Tomcat/lib]

Les jar du portail (pluto)

Bloc de code
[esup@test]$ ant init deploy-ear -Dtomcat.update=true

Context Tomcat

Modifier le server.xml [/esup/tomcat6/conf/server.xml]

Ajouter les contextes dans le portail (Attention au 2 docBase, username, password, url à adapter)

Info

Pour l'utilisation de portlet, on rajoute le paramètre emptySessionPath dans le Connector ( cf. https://wiki.jasig.org/display/UPM31/01+Tomcat )

Bloc de code
<?xml version='1.0' encoding='utf-8'?><Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

  <Service name="Catalina">
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" emptySessionPath="true" />
    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="webapps"
            unpackWARs="false" autoDeploy="false"
            xmlValidation="false" xmlNamespaceAware="false">

	  <Context path=""
	 	   docBase="/esup/webapps/uPortal"
		   crossContext="true"
		   reloadable="true">
		<Resource name="jdbc/PortalDb"
			  auth="Container"
			  type="javax.sql.DataSource"
			  username="XXXXX" password="XXXXX"
			  driverClassName="com.mysql.jdbc.Driver"
			  url="jdbc:mysql://XXXX.univ.fr/XXXXX?autoReconnect=true"
			  maxActive="50" maxIdle="30" maxWait="10000"
			  poolPreparedStatements="true"
			  removeAbandoned="true"
			  removeAbandonedTimeout="300"
		/>
		<Manager pathname="" />
	  </Context>

	  <Context path="/ResourceServingWebapp"
	           docBase="/esup/webapps/ResourceServingWebapp"
		    reloadable="false">
		<Manager pathname=""/>
	  </Context>

          <Context path="/manager"
                   docBase="/esup/tomcat6/webapps/manager"
                   reloadable="false"
		   antiResourceLocking="false"
		   privileged="true">
		<Manager pathname=""/>
	  </Context>

          <!--
          <Context path="/probe"
		   docBase="/esup/webapps/probe"
		   reloadable="false"
		   privileged="true">
		<Manager pathname=""/>
	  </Context>
          -->
      </Host>
    </Engine>
  </Service>
</Server>

Nettoyage

Supprimer les dossiers suivants :

Bloc de code
[esup@test]$ rm -rf /esup/tomcat6/webapps/docs
[esup@test]$ rm -rf /esup/tomcat6/webapps/examples
[esup@test]$ rm -rf /esup/tomcat6/webapps/host-manager
[esup@test]$ rm -rf /esup/tomcat6/webapps/ROOT
[esup@test]$ rm -rf /esup/tomcat6/conf/Catalina

Cassifier le manager Tomcat

Créer un dossier de librairies dans le manager

Bloc de code
[esup@test]$ mkdir -p /esup/tomcat6/webapps/manager/WEB-INF/lib
Bloc de code
[esup@test]$ cd /tmp
[esup@test]$ wget http://www.ja-sig.org/downloads/cas-clients/cas-client-3.1.10-release.tar.gz
[esup@test]$ tar -zxvf cas-client-3.1.10-release.tar.gz
[esup@test]$ cp cas-client-3.1.10/modules/cas-client-core-3.1.10.jar /esup/tomcat6/webapps/manager/WEB-INF/lib
[esup@test]$ cp cas-client-3.1.10/modules/commons-logging-1.1.jar /esup/tomcat6/webapps/manager/WEB-INF/lib
[esup@test]$ rm -rf /tmp/cas-client-3.1.10
Bloc de code
[esup@test]$ cd /tmp
[esup@test]$ wget http://www.apache.org/dist/xerces/j/binaries/Xerces-J-bin.2.9.1.tar.gz
[esup@test]$ tar -zxvf Xerces-J-bin.2.9.1.tar.gz
[esup@test]$ cp xerces-2_9_1/xercesImpl.jar /esup/tomcat6/webapps/manager/WEB-INF/lib
[esup@test]$ rm -rf /tmp/xerces-2_9_1

Filtre d'authentification

Copier la classe java SimpleCASAuthorizationFilter dans le manager.

Cette classe permet de filtrer les utilisateurs pouvant utiliser le manager

Bloc de code
[esup@test]$ cp /esup/webapps/uPortal/WEB-INF/classes/org/esupportail/portal/utils/filter/SimpleCASAuthorizationFilter.class  /esup/tomcat6/webapps/manager/WEB-INF/classes/org/esupportail/portal/utils/filter/SimpleCASAuthorizationFilter.class

web.xml du manager

Bloc de code
[esup@test]$ vi /esup/tomcat6/webapps/manager/WEB-INF/web.xml

Les filtres CAS

Attention au serverName, casServerLoginUrl, casServerUrlPrefix, LOGIN, LOGIN 2 (personne autorisées)

Bloc de code
<!-- Server Name -->
<context-param>
  <param-name>serverName</param-name>
  <param-value>XXXXXXXXX</param-value>
</context-param>

<filter>
  <filter-name>CAS Single Sign Out Filter</filter-name>
  <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>

<!-- CAS Authentication Filter -->
<filter>
  <filter-name>CASFilter</filter-name>
  <filter-class>
    org.jasig.cas.client.authentication.AuthenticationFilter
  </filter-class>
  <init-param>
    <param-name>casServerLoginUrl</param-name>
    <param-value>https://XXXXX/cas/login</param-value>
  </init-param>
</filter>

<!-- CAS Validation Filter -->
<filter>
  <filter-name>CASValidation</filter-name>
  <filter-class>
    org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
  </filter-class>
  <init-param>
    <param-name>casServerUrlPrefix</param-name>
    <param-value>https://XXXXX/cas</param-value>
  </init-param>
  <init-param>
    <param-name>redirectAfterValidation</param-name>
    <param-value>true</param-value>
  </init-param>
</filter>

<!-- CAS Wrapper Filter -->
<filter>
  <filter-name>CASWrapper</filter-name>
  <filter-class>
    org.jasig.cas.client.util.HttpServletRequestWrapperFilter
  </filter-class>
</filter>

<filter>
  <filter-name>AuthzFilter</filter-name>
  <filter-class>org.esupportail.portal.utils.filter.SimpleCASAuthorizationFilter</filter-class>
  <init-param>
    <param-name>org.esupportail.portal.utils.filter.authorizedUsers</param-name>
    <param-value>LOGIN1 LOGIN2 ...</param-value>
  </init-param>
</filter>

Les mappings

Bloc de code
<filter-mapping>
  <filter-name>CAS Single Sign Out Filter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- CAS Authentication Filter Mapping -->
<filter-mapping>
  <filter-name>CASFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- CAS Validation Filter Mapping -->
<filter-mapping>
  <filter-name>CASValidation</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- CAS Wrapper Filter Mapping -->
<filter-mapping>
  <filter-name>CASWrapper</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
  <filter-name>AuthzFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

Le Listener

Bloc de code
<listener>
  <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>

Nettoyage web.xml

Supprimer les parties :

  • <resource-env-ref>...</resource-env-ref>
  • <security-constraint>...</security-constraint>
  • <login-config>...</login-config>
  • <security-role>...</security-role>

Les logs Tomcat

Modifier le fichier logging.properties pour :

  • Ne plus logguer à la console mais uniquement dans un fichier
  • Tourner automatiquement les fichiers quand ils font plus de 10Mo
  • Garder seulement 7 fichiers (donc 70Mo)
  • Passer le niveau de log en WARNING
  • N'avoir qu'un seul fichier
Bloc de code
[esup@test]$ vi /esup/tomcat6/conf/logging.properties

# see http://tomcat.apache.org/tomcat-6.0-doc/logging.html
handlers = 1catalina.java.util.logging.FileHandler
.handlers = 1catalina.java.util.logging.FileHandler
.level= WARNING

1catalina.java.util.logging.FileHandler.pattern =  ${catalina.base}/logs/catalina.%g.log
1catalina.java.util.logging.FileHandler.limit = 10485760
1catalina.java.util.logging.FileHandler.count = 7
1catalina.java.util.logging.FileHandler.append=true
1catalina.java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter

# Pour avoir les lignes de démarrage
org.apache.catalina.startup.Catalina.level=INFO
# Pour avoir les lignes d'arrêt
org.apache.catalina.core.StandardService.level=INFO

# Pour avoir les manger de ce qui est fait au niveau manager
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO

Installation de LamdaProbe

LambdaProbe est un outil qui ressemble au manager de Tomcat mais un peu plus évolué.

Il vous permet de :

  • Lister vos contextes Tomcat
  • Redémarrer les contextes
  • Lister vos sessions et leurs contenus
  • Monitorer les sources de données
  • Voir les logs a chaud
  • Analyser les Threads
  • Voir l'utilisation de la mémoire
  • ...
    Bloc de code
    [esup@test]$ cd /tmp
    [esup@test]$ wget http://www.lambdaprobe.org/downloads/1.7/probe.1.7b.zip
    [esup@test]$ unzip probe.1.7b.zip
    [esup@test]$ mkdir /esup/webapps/probe
    [esup@test]$ cd /esup/webapps/probe
    [esup@test]$ unzip /tmp/probe.war
    

Context tomcat

Modifier le server.xml [/esup/tomcat6/conf/server.xml]

Bloc de code
<Context path="/probe"
         docBase="/esup/webapps/probe"
         reloadable="false"
         privileged="true">
    <Manager pathname=""/>
</Context>

Cassfication

Vous pouvez vous reporter à la partie "Cassifier le manager Tomcat" qui s'en rapproche fortement

Bloc de code
[esup@test]$ cd /tmp
[esup@test]$ wget http://www.ja-sig.org/downloads/cas-clients/cas-client-3.1.10-release.tar.gz
[esup@test]$ tar -zxvf cas-client-3.1.10-release.tar.gz
[esup@test]$ cp cas-client-3.1.10/modules/cas-client-core-3.1.10.jar /esup/webapps/probe/WEB-INF/lib
[esup@test]$ cp cas-client-3.1.10/modules/commons-logging-1.1.jar /esup/webapps/probe/WEB-INF/lib
[esup@test]$ rm -rf /tmp/cas-client-3.1.10

[esup@test]$ cd /tmp
[esup@test]$ wget http://www.apache.org/dist/xerces/j/binaries/Xerces-J-bin.2.9.1.tar.gz
[esup@test]$ tar -zxvf Xerces-J-bin.2.9.1.tar.gz
[esup@test]$ cp xerces-2_9_1/xercesImpl.jar /esup/webapps/probe/WEB-INF/lib
[esup@test]$ rm -rf /tmp/xerces-2_9_1

[esup@test]$ cp /esup/webapps/uPortal/WEB-INF/classes/org/esupportail/portal/utils/filter/SimpleCASAuthorizationFilter.class  /esup/webapps/probe/WEB-INF/classes/org/esupportail/portal/utils/filter/SimpleCASAuthorizationFilter.class

[esup@test]$ vi /esup/webapps/probe/WEB-INF/web.xml

# se reporter à la partie "Les filtres CAS" > "Cassifier le manager Tomcat"
# se reporter à la partie "Les mappings" > "Cassifier le manager Tomcat"
# se reporter à la partie "Le Listener" > "Cassifier le manager Tomcat"

Nettoyage web.xml

Supprimer les parties :

  • <security-constraint>...</security-constraint>
  • <login-config>...</login-config>
  • <security-role>...</security-role>