Как развернуть несколько приложений Grails на одном Tomcat + Apache? - PullRequest
11 голосов
/ 22 апреля 2011

Я прочитал несколько вопросов о StackOverflow и несколько часов гуглил, но не могу найти полного и ясного ответа на мою проблему развертывания нескольких приложений Grails на одном tomcat 5.5 (с Apache). Может быть, кто-то может подтолкнуть меня в правильном направлении, или мы можем найти решение здесь.

Вопрос Развертывание нескольких приложений Grails с Apache / Tomcat + Virtual Hosts выглядело многообещающе, но не сработало. Может быть, мне нужно внести дополнительные изменения в Tomcat или Apache?

СИТУАЦИЯ:

В каталоге webapps Tomcat у меня есть два war-файла app1.war и app2.war, которые распаковываются Tomcat и к которым я могу получить доступ через domain1.com/app1 или domain1.com/ app2 (я удалил ранее использовавшийся ROOT.war и связанный каталог webapps / ROOT /)

В файле server.xml Tomcat У меня есть следующие хосты:

    <!-- Logger shared by all Contexts related to this virtual host. -->
    <Logger className="org.apache.catalina.logger.FileLogger"
            directory="logs" prefix="localhost_" suffix=".log"
            timestamp="true"/>

    <!-- Allow symlinks for the tomcat-docs webapp. This is required in
         the Debian packages to make the Servlet/JSP API docs work. -->
     <Context path="/tomcat-docs" docBase="tomcat-docs" debug="0">
        <Resources className="org.apache.naming.resources.FileDirContext"
                   allowLinking="true" />
     </Context>

  </Host>

  <Host name="domain1.com" appBase="webapps/app1" unpackWARs="true" autoDeploy="true"></Host>
  <Host name="domain2.com" appBase="webapps/app2" unpackWARs="true" autoDeploy="true"></Host>

В Apache У меня есть следующие виртуальные хосты: ServerName app1.com

JkMount /* default

DocumentRoot /var/lib/tomcat5.5/webapps/app1
<directory /var/lib/tomcat5.5/webapps/app1>
    Options -Indexes
</directory>

LogLevel warn
ErrorLog  /var/www/app1/logs/error.log
CustomLog /var/www/app1/logs/access.log common

Проблема:

Я не могу получить прямой доступ к двум приложениям через domain1.com и domain2.com - что я делаю не так?

Заранее большое спасибо,

Йорг.

Ответы [ 2 ]

6 голосов
/ 05 мая 2011

Я боролся с этим некоторое время назад и сумел получить что-то, что работает нормально. Это не использует mod_jk, хотя, я выбрал mod_proxy. У меня также была немного другая настройка в Tomcat (у меня версия 6), где я добавил несколько коннекторов, а также объявления хоста, которые у вас есть.

Попробуйте следующее -

В tomcat server.xml:

<!-- I opted for a shared thread pool so both apps share same resources - optional -->
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    maxThreads="250" minSpareThreads="40"/>


<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8444"
           executor="tomcatThreadPool"
           proxyName="www.domain1.com"
           proxyPort="80"/>
<Connector port="8082" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8445"
           executor="tomcatThreadPool"
           proxyName="www.domain2.com"
           proxyPort="80"/>

  <Host name="www.domain1.com" appBase="vhosts/domain1" unpackWARs="true"
        autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
            <Alias>domain1.com</Alias>
  </Host>
  <Host name="www.domain2.com" appBase="vhosts/domain2" unpackWARs="true"
        autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
            <Alias>domain2.com</Alias>
  </Host>

В Apache:

<VirtualHost *:80>
  ServerName www.domain1.com
  ServerAlias www.domain1.com

  ProxyRequests Off

  ErrorLog /var/log/apache2/error-domain1.log

  <Directory proxy:http://www.domain1.com:80>
        Order Allow,Deny
        Allow from all
  </Directory>

  <Proxy www.domain1.com:80>
    Order deny,allow
    Allow from all
  </Proxy>
  ProxyPass / http://localhost:8081/
  ProxyPassReverse / http://localhost:8081/
  ProxyPreserveHost On
</VirtualHost>

<VirtualHost *:80>
  ServerName www.domain2.com
  ServerAlias www.domain2.com

  ProxyRequests Off

  ErrorLog /var/log/apache2/error-domain2.log

  <Directory proxy:http://www.domain2.com:80>
        Order Allow,Deny
        Allow from all
  </Directory>

  <Proxy www.domain2.com:80>
    Order deny,allow
    Allow from all
  </Proxy>
  ProxyPass / http://localhost:8082/
  ProxyPassReverse / http://localhost:8082/
  ProxyPreserveHost On
</VirtualHost>

Убедитесь, что mod_proxy включен для вашего сервера Apache. Это было некоторое время назад, когда я заработал это, так что я уверен, что все, что нужно в этом конфиге - как только я получу его, я склонен забывать вещи:)

Надеюсь, это поможет, Крис.

3 голосов
/ 11 мая 2011

у нас есть два веб-приложения Grails, запущенных в производство под одним и тем же котом

Это было легко сделать с котом 6

Я вижу разницу с вашим server.xml в названии приложений вот что имеем:

<Host name="www.domain1.com" appBase="[tomcat_root_dir]/www.domain1.com/webapps" unpackWARs="true"
    autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
</Host>
<Host name="www.domain2.com" appBase="[tomcat_root_dir]/www.domain2/webapps" unpackWARs="true"
    autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
</Host>

Тогда у нас есть две директории domain1.com и domain2.com в корневом каталоге tomcat. В каждом каталоге у нас есть каталог webapps, который содержит только файл ROOT.war для каждого приложения

Надеюсь, что поможет

Приветствия

Grooveek

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...