web-dev-qa-db-fra.com

déployer plusieurs applications sur Tomcat

Je souhaite déployer deux applications foo.war et bar.war sur la même instance de Tomcat. Est-il possible pour eux d'écouter les connexions sur différents ports, par exemple foo écoute sur le port 81 et bar écoute sur le port 82? Si oui, comment puis-je configurer cela? Je me rends compte qu'il n'est pas nécessaire que les applications écoutent sur différents ports, mais c'est ce que je veux réaliser.

De plus, ai-je raison de dire que si je renomme foo.war en ROOT.war de sorte qu'il s'exécute dans le contexte racine, toutes les demandes adressées à cette instance Tomcat seront traitées par l'application foo et, par conséquent, bar devra être déployé sur une instance Tomcat distincte ?

30
Dónal

Si vous voulez que Tomcat écoute plusieurs ports, vous devez configurer un connecteur pour chaque port. Pour que chaque port mappé sur une application différente, vous devez envelopper chaque connecteur dans un service et créer un hôte avec sa propre variable appBase.

Exemple de définition de service dans server.xml:

<Service name="foo">
    <Connector port="80" protocol="org.Apache.coyote.http11.Http11NioProtocol" />
    <Engine name="Catalina80" defaultHost="localhost">
        <Host name="localhost" appBase="foo" unpackWARs="true" autoDeploy="true" />
    </Engine>
</Service>

<Service name="bar">
    <Connector port="81" protocol="org.Apache.coyote.http11.Http11NioProtocol" />
    <Engine name="Catalina81" defaultHost="localhost">
        <Host name="localhost" appBase="bar" unpackWARs="true" autoDeploy="true" />
    </Engine>
</Service>

Au lieu de déposer les fichiers war dans le répertoire webapps, vous devez créer le répertoire foo pour le port 80 et bar pour le port 81. Nommez les deux fichiers war ROOT.war et déposez-les dans leur propre répertoire de base. Vous pouvez bien sûr avoir plusieurs applications dans chaque répertoire si vous en avez besoin.

Le répertoire défini dans appBase est relatif au répertoire Tomcat. En utilisant un chemin absolu, il pourrait être n'importe où sur votre système. De la documentation :

appBase

Le répertoire Application Base pour cet hôte virtuel. Il s'agit du nom de chemin d'un répertoire pouvant contenir des applications Web à déployer sur cet hôte virtuel. Vous pouvez spécifier un chemin absolu ou un chemin relatif au répertoire $CATALINA_BASE. [...] Si non spécifié, la valeur par défaut de webapps sera utilisée.

Une autre option consiste à conserver la configuration Tomcat par défaut et à utiliser un autre serveur http (Apache, nginx, lighttpd, ...) pour mapper un port sur le chemin interne d'une application Tomcat.

L'application racine ne recevra pas les demandes qui correspondent à d'autres applications, par exemple. /foo/example ira à foo.war, /example/example ira à ROOT.war.

60
kapex

Pas besoin de changer de port

Jongler avec plusieurs demandes entrantes et réponses sortantes sur plusieurs utilisateurs à l'aide de plusieurs applications Web en cours d'exécution est le but de la technologie Java Servlet. Tout ce trafic peut être traité sur un seul port. 

Il suffit de déposer les deux fichiers war dans le dossier webapps de Tomcat. C'est tout ce que vous devez faire. 

Par défaut, Tomcat développe ("explose", disent certains) chaque guerre (techniquement un fichier Zip) dans un dossier et déploie automatiquement l'application pour vous. Cela se produit à la volée si Tomcat est déjà en cours d'exécution ou au démarrage lorsque vous lancez Tomcat. Certaines personnes désactivent la fonctionnalité de déploiement automatique pour la production afin d’éviter à Tomcat d’analyser de nouveaux fichiers war.

Pas besoin de plusieurs ports. Le travail d'un conteneur de servlets consiste à examiner l'URL et à déterminer quel servlet doit être appelé.

Par défaut, le nom du fichier war détermine l'URL. Compte tenu de votre exemple:

Toutes les applications Web peuvent être servies sur le même port. Votre seul souci avec les ports est d'utiliser un système d'exploitation de type Unix qui protège l'accès aux ports dont le nombre est faible. Cela inclut Mac OS X, BSD, Linux et Solaris. Utilisez un port avec un numéro élevé dans votre URL (Tomcat par défaut est 8080) ou utilisez transfert de port pour envoyer les demandes entrantes sur le port 80 (par défaut des navigateurs Web) au port de Tomcat (tel que 8080).

Si vous souhaitez que les fichiers war soient servis en utilisant différents domaines, découvrez les paramètres "hôte virtuel" dans Tomcat.

26
Basil Bourque

J'ai correctement configuré Tomcat pour exécuter des applications sur plusieurs ports. Je ne sais pas si c’est la meilleure façon de le faire, mais j’ai simplement dupliqué le contenu de 

<Service>...</Service>

dans conf/server.xml et changé les ports pour les balises Connector et le appBase attribut de la balise Host . Vous contrôlez le port de votre application sur la base de appBase sur lequel elle est déployée.

4
Jeff Miller

Je faisais déjà ce que Basil mentionne ci-dessus.

En fin de compte, j’avais besoin de joker le fichier sites-enabled/blah.conf pour ne pas faire référence au premier (et unique) .war que j’ai déployé des mois avant d’ajouter une autre application.

Voici ce que j'ai générique:

  • DocumentRoot
  • JkMount
  • Annuaire
  • DirectoryIndex

Alors fyi, tu vas. :)

0
Mr. Butterworth