11 votes

Hébergement de plusieurs domaines sur un seul dossier webapp dans tomcat

Duplicata possible de cette mais la réponse n'est pas acceptée.

J'ai deux scénarios

  1. Nous construisons un CRM et nous aurons plusieurs clients qui utiliseront le même produit. Prenons un exemple, subdomain1.maindomain1.com y anysubmain.anothermaindomain.com doit pointer vers le même dossier webapp. En fonction du domaine, nous sélectionnerons la base de données dynamiquement, mais la base de code restera la même. Point à noter ici : l'ensemble de la base de code reste inchangée. .
  2. Nous construisons une série de sites web pour un client où une partie de la base de code restera la même pour tous, mais en fonction du sous-domaine, nous chargerons le fichier servlet par défaut. Prenons un exemple, manage.domain.com crm.domain.com equote.domain.com doit pointer vers le même dossier webapp. En fonction du domaine, nous chargerons le fichier de servlet par défaut. A noter ici : Une partie de la base de code restera la même pour tous les domaines. Ex. fichiers de l'architecte de base .

Quelles sont les solutions proposées par d'autres ?

  1. Déployer 2 fois une copie du même fichier war, Softlink, Créer 2 contextes qui pointent vers le même fichier, Utiliser un alias . La dernière peut être une bonne option mais je ne sais pas comment nous pouvons l'utiliser pour différents sous-domaines / domaines.
  2. Cela peut être une des solutions mais je ne suis pas sûr que cela fonctionne sur le même port ou sur un port différent.
  3. Il y a beaucoup d'articles sur internet qui montrent comment on peut déployer plusieurs webapps sur plusieurs domaines sur un seul serveur tomcat mais ce n'est pas la façon dont j'ai besoin.

Note : Je peux créer 2 instances AWS EC2 pour les 2 scénarios ci-dessus. Cela signifie que je n'attends pas une seule solution pour les deux problèmes ci-dessus.

10voto

Selaron Points 5617

Dans Apache Tomcat, vous pouvez configurer plusieurs hôtes virtuels qui déploient chacun le même fichier .war (ou base documentaire) tout en ayant des paramètres de configuration de contexte différents comme la connexion JDBC, les ressources, les fichiers JAR internes et autres.

Pour en rester à votre scénario (1), en server.xml configurer les éléments d'accueil des deux domaines :

<Engine name="Catalina" defaultHost="subdomain1.maindomain1.com">
    <Host name="subdomain1.maindomain1.com"    appBase="subdomain1.maindomain1.com"/>
    <Host name="anysubmain.anothermaindomain.com" appBase="anysubmain.anothermaindomain.com"/>
</Engine>

Créez des dossiers de ressources et de configuration pour les deux :

mkdir $CATALINA_HOME/subdomain1.maindomain1.com
mkdir $CATALINA_HOME/anysubmain.anothermaindomain.com
mkdir $CATALINA_HOME/conf/Catalina/subdomain1.maindomain1.com
mkdir $CATALINA_HOME/conf/Catalina/anysubmain.anothermaindomain.com

Ensuite, pour chaque hôte, créez un fichier ROOT.xml chacun pointant vers la même base de code (par exemple, le fichier .war) mais différents configuration des bases de données . En général, cela permet d'obtenir une configuration du contexte pour chaque domaine.

$CATALINA_HOME/conf/Catalina/subdomain1.maindomain1.com/ROOT.xml

<Context docBase="/path/to/your/webapp.war" path="">
     <Resource name="jdbc/Database" auth="Container" type="javax.sql.DataSource"
               username="subdomain1_maindomain1_com" password="anysecurepassword" driverClassName="com.your.jdbc.Driver"
               url="jdbc:xyz://localhost:321/subdomain1_maindomain1_com_dbname"/>
   ...
</Context>

$CATALINA_HOME/conf/Catalina/anysubmain.anothermaindomain.com/ROOT.xml

<Context docBase="/path/to/your/webapp.war" path="">
     <Resource name="jdbc/Database" auth="Container" type="javax.sql.DataSource"
               username="anysubmain_anothermaindomain_com" password="anysecurepassword" driverClassName="com.your.jdbc.Driver"
               url="jdbc:xyz://localhost:321/anysubmain_anothermaindomain_com_dbname"/>
   ...
</Context>

En outre, pour mettre en œuvre le scénario 2, vous pouvez pour chaque domaine configurer différents dossiers de ressources externes .

E.G. pour anysubmain_anothermaindomain_com_dbname en $CATALINA_HOME/conf/Catalina/anysubmain.anothermaindomain.com/ROOT.xml

<Context>
...
  <Resources>
    <PreResources base="/path/to/anysubmain_anothermaindomain_com_dbname/jarfiles/"
      className="org.apache.catalina.webresources.DirResourceSet" readOnly="true"
      internalPath="/" webAppMount="/WEB-INF/lib" />
  </Resources>
...
</Context>

De cette manière, les applications web de tous les domaines reposent sur la même base documentaire, mais des fichiers jar différents (variantes) ou d'autres dépendances de ressources peuvent être ajoutés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X