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 de ce document pour apporter son expérience.

...

  1. Faciliter les mises à jour ultérieures
  2. Supprimer ce qui est inutile et consommateur de ressources
  3. Sécuriser nos installations
  4. Dispose 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)

...

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

...

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]$ mkdir -p /esup/tomcat6/shared/classeclasses
[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

Balise Wiki
Modifier le config du package esup \[/esup/esup-install/config.propeties ou /esup/esup-install/custom.properties\]

Bloc de code

[esup@test]$ vi /esup/esup-install/config.propeties

> tomcat.update=true

[esup@test]$ ant init deploy-ear
[esup@test]$ vi /esup/esup-install/config.propeties

> tomcat.update=false

Contexte

Ajouter les contextes dans le portail (Attention au 2 docBase, username, password, url a à 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' 
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>

      </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

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

Nettoyage

Supprimer les dossiers suivants :Créer un dossier de librairies dans le manager

Bloc de code
[esup@test]$ mkdirrm -prf /esup/tomcat6/webapps/manager/WEB-INF/lib

...

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
  • Télécharger le cas-client http://www.tmp [esup@test]$ wget http://www.ja-sig.org/downloads/cas-clients/
  • En extraire cas-client-core-3.1.10-release.tar.gzX.X.jar, commons-logging-X.X.jar
  • Les placer dans /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.

...

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>=java.util.logging.SimpleFormatter # Pour avoir les ligne de démarrage org.apache.catalina.startup.Catalina.level=INFO # Pour avoir les ligne 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