<< | Übersicht | >>

Tomcat + Apache + Plesk + Ubuntu



Bei gemieteten Servern ist häufig der Apache Webserver mit Plesk vorinstalliert. Im Folgenden wird gezeigt, wie auf einem Ubuntu Betriebssystem mit vorinstalliertem Apache Webserver und Plesk ein Tomcat installiert wird und Anfragten an eine Domain vom Apache an den Tomcat weitergeleitet werden. Das Ganze unter Berücksichtigung der Plesk-Installation, die für die Einrichtung und Verwaltung der Domains weiter genutzt werden soll. Die Angaben beziehen sich auf eine Plesk Version >=10. Bei älteren Versionen sind die Pfade andere. Bei der Verwendung anderer Betriebssysteme müssen ebenfalls die Pfade angepasst werden.


1. Anlegen der Domains unter Plesk

Zunächst werden die gewünschten Domains mittels der Plesk Verwaltung angelegt. Als nächstes ist der Tomcat zu installieren und eine Verbindung zwischen dem Apache Webserver und dem Tomcat einzustellen.

2. Tomcat installieren

Zunächst wird die gewünschte Tomcat Version ausgewählt und heruntergeladen. Ein Überblick über die verschiedenen Versionen findet sich unter http://tomcat.apache.org/whichversion.html.

  wget http://apache.osuosl.org/tomcat/tomcat-8/v8.5.0/bin/apache-tomcat-8.5.0.zip 
Danach wird das Archiv entpackt und der Tomcat an die gewünschte Position verschoben.
  sudo tar -xvf apache-tomcat-8.5.0.zip
  sudo mv apache-tomcat-8.5.0 /usr/local/
Das Tomcat Verzeichnis wurde hier nach /usr/local/ verschoben. Um den Tomcat als Tomcat user starten zu lassen, muss dieser wie folgt angelegt werden.
  groupadd tomcat
  useradd -g tomcat -s /usr/sbin/nologin -m -d /usr/tomcat tomcat
Ein Login in die Manageroberfläche des Tomcats wird aus Sicherheitsgründen verhindert (/usr/sbin/nologin). Falls sowas doch benötigt wird, muss die tomcat-users.xml unter /usr/local/apache-tomcat-8.5.0 konfiguriert werden.

Bevor der Tomcat gestartet werden kann, müssen noch einige Variablen definiert werden.
Ein kurzes mögliches Script sehe so aus:
   export JAVA_HOME=PATH_TO_JAVA
   export PATH=$JAVA_HOME/bin:$PATH
   export CATALINA_HOME=PATH_TO_TOMCAT
   export CATALINA_BASE=PATH_TO_TOMCAT
   su -p -s /bin/sh tomcat $CATALINA_HOME/bin/startup.sh
Die Datei speichern und zum Starten verwenden. Zum Stoppen des Tomcats shutdown.sh aufgerufen werden.

Machen wir es aber komfortabler.
Erzeugung einer Script-Datei namens tomcat in /etc/init.d/:
  sudo nano /etc/init.d/tomcat
Und in dieser ist folgender Code zu speichern:
   #!/bin/bash
   export CATALINA_HOME=/usr/local/apache-tomcat-8.0.0-RC10
   PATH=/sbin:/bin:/usr/sbin:/usr/bin
   start() {
      sh $CATALINA_HOME/bin/startup.sh
   }
   stop() {
      sh $CATALINA_HOME/bin/shutdown.sh
   }
   case $1 in
   start|stop) $1;;
   restart) stop; start;;
   *) echo "Run as $0 <start|stop|restart>"; exit 1;;
   esac    
Die Zugriffsrechte sind noch anzupassen:
  sudo chmod 755 /etc/init.d/tomcat
Starten des Tomcats:
  sudo /etc/init.d/tomcat start
Und um den Tomcat Dienst nach einem Reboot des Servers automatisch zu starten hilft folgende Anweisung:
  sudo update-rc.d tomcat defaults
Zu guter letzt sind noch die weiteren Umgebungsvariablen anzulegen:
  export JAVA_HOME=PATH_TO_JAVA
  export CATALINA_HOME=/usr/local/tomcat

3. Mod_JK installieren

Damit Tomcat und der Apache Webserver zusammenarbeiten, muss das Modul mod_jk beim Start eingebunden werden. Man spricht auch von einem Connector. Meistens ist das Modul bereits installiert. Um dies zu prüfen, wird folgender Befehl ausgeführt:
  dpkg -l libapache2-mod-jk
Falls das Modul bereits installiert und aktiviert ist, kann zum nächsten Schritt übergegangen werden.
Zur manuellen Installation und Aktivierung des Moduls, sind folgende Befehle auszuführen:
  wget install libapache2-mod-jk
  sudo a2enmod jk
  sudo service httpd restart
Nach dem Neustart des Apache Webservers findet sich im Ordner mods-enabled in etc/apache2/ ein neuer Eintrag. Je nachdem welche Features in der Plesk-Anwendung freigeschaltet sind, kann das Modul auch sehr konfortabel darüber installiert und aktiviert werden.

4. Tomcat mit Apache verbinden

Als nächstes ist der Tomcat mit dem Apache zu verbinden. Zunächst werden hierfür die sogenannten Workers konfiguriert. Vereinfacht kann man sich einen Worker als Tomcat Instanz vorstellen, der die Anfragen vom Apache Webserver verarbeitet und an den Tomcat weiterreicht. Mit dem Tomcat 7 werden drei verschiedene Worker Typen ausgeliefert. Eine Referenz findet sich unter: Referenz Tomcat Workers.

Die Konfiguration findet hier statt:
  /etc/apache/workers.properties
Durch Plesk ist es nicht möglich eine andere Datei zu verwenden, da in den automatisch von Plesk generierten Konfigurationen der Wert für das JkWorkerFile schon fest eingetragen ist. Ein Überschreiben des Wertes in der apache2.conf ist nicht möglich, da Plesk diese überschreiben würde. Das Eintragen einer weiteren workers.properties führt zum nicht starten des Tomcats.
Bearbeiten der Konfigurationsdatei:
  sudo nano /etc/apache2/workers.properties
Im folgenden werden zwei Domains angelegt. Die worker.list bekommt eine kommaseparierte Liste aller anzulegender Worker. Für jeden Worker ist der Typ, der Host und der Port des Tomcat Servers anzugeben, über den die AJP Verbindung hergestellt wird.
   workers.tomcat_home=/usr/local/apache-tomcat-8.5.0
   workers.java_home=/usr/local/java/jdk1.8.0_40
   ps=/	  
   worker.list=worker1,worker2        
   worker.worker1.type=ajp13          
   worker.worker1.host=domain1.de   
   worker.worker1.port=8009           

   worker.worker2.type=ajp13
   worker.worker2.host=domain2.de
   worker.worker2.port=8010
Anfragen an den Apache Webserver für die Domain domain1.de wird an den Port 8009 des Tomcats weitergeleitet. Damit der Tomcat auf die Ports reagieren kann, sind dort noch Konfigurationen nötig.

5. Tomcat auf Anfragen reagieren lassen

  sudo nano /usr/local/apache-tomcat-8.5.0/conf/server.xml
Folgende Einträge sind zu ergänzen:
   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
   <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

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

   <Host name="domain2.de"
      appBase="/var/www/vhosts/domain2.de"
      unpackWARs="true"
      autoDeploy="true"
      xmlValidation="false"
      xmlNamespaceAware="false">	  
      <Alias>www.domain2.de</Alias>
   </Host>
Kleiner Hinweis für Windows-Nutzer: Falls die Konfigurationsdateien auf einem Windows-System bearbeitet werden, um diese dann auf das Ubuntu-System zu kopieren, die Dateien am besten immer im UTF-8 Format speichern.

Falls mehrere Java Applikationen unter einer Domain installiert werden sollen, kann unter das Domain-Verzeichnis noch das Verzeichnis /webapps angelegt werden, wohin dann die Applikationen deployed werden. Dies kann so aussehen:
   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
   <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

   <Host name="domain1.de"
      appBase="/var/www/vhosts/domain1.de/webapps"
      unpackWARs="true"
      autoDeploy="true"
      xmlValidation="false"
      xmlNamespaceAware="false">
      <Alias>www.domain1.de</Alias>
      <Context path="/" docBase="app1"/>
   </Host>

   <Host name="domain2.de"
      appBase="/var/www/vhosts/domain2.de/webapps"
      unpackWARs="true"
      autoDeploy="true"
      xmlValidation="false"
      xmlNamespaceAware="false">	  
      <Alias>www.domain2.de</Alias>
      <Context path="/" docBase="app2"/>
   </Host>

6. Anfragen vom Apache an den Tomcat weiterleiten

Jetzt muss dem Apache noch mitgeteilt werden, welcher Worker für welche Domain zuständig ist, damit die Anfragen, die an den Apache Webserver gestellt werden, an den richtigen Worker weitergleitet werden können.

Da Plesk die Konfigurationen für die Domains bei Änderungen immer wieder überschreibt, muss für jede Domain eine eigene Konfigurationsdatei angelegt werden. Dafür wird eine vhost.conf Datei in das conf Verzeichniss der Domain angelegt.

  cd /var/www/vhosts/domain1.de/conf
  sudo nano vhost.conf
  sudo nano /var/www/vhosts/domain1.de/conf/vhost.conf
In der vhost.conf wird dann folgendes geschrieben:
   ServerName domain1.de
   ServerAlias *.domain1.de  
   JkMount /* worker1	  
   JkUnMount /*.zip  worker1
   JkUnMount /*.php  worker1
Alle Anfragen an die Domain domain1.de gehen an den worker1 mit Ausnahme von Anfragen, die eine PHP oder ZIP-Datei anfragen. Das gleiche ist für die zweite Domain durchzuführen.
Die JKMount-Befehle werden normalerweise in das httpd.conf Apache configuration file geschrieben. Bei Plesk gibt es dafür aber, wie beschrieben, für jede Domain das Konfigurationsverzeichnis /var/www/vhosts/[Domainname]. Dort gibt es eine Datei namens httpd.include, die aber nicht verwendet werden darf, da diese von Plesk überschrieben wird. Stattdessen wurde die Datei vhost.conf angelegt, die durch das http.include file automatisch eingebunden wird. Nachdem die Änderugen Plesk bekannt gemacht werden, ist dies also eine Stelle, wo geprüft werden kann, ob die Datei korrekt eingebunden wird.

Und hier ein weiterer Hinweis insbesondere für Windows-Benutzer, die vielleicht die Konfigurationsdateien von Windows nach Ubuntu kopieren. Eventuell treten Rechte-Probleme auf, so dass der Apache die conf Dateien nicht lesen kann.

Abhilfe schafft, das Setzen des Besitzers der Dateien:
  chown -R apache /var/www/vhosts/domain1.de/conf
  chown -R apache /var/www/vhosts/domain2.de/conf
Und das Setzen der Rechte, damit der Apache user auch wirklich alle Dateien lesen kann:
  chmod -R 644 /var/www/vhosts/domain1.de/conf
  chmod -R 644 /var/www/vhosts/domain2.de/conf

7. Änderungen Plesk bekannt machen

Damit die neuen vhost.conf Dateien auch von Plesk in die httpd.include aufegnommen werden, müssen diese Plesk bekannt gemacht werden. Dies geschieht über:
  /usr/local/psa/admin/sbin/websrvmng -ur --vhost-name=domain1.de
  /usr/local/psa/admin/sbin/websrvmng -ur --vhost-name=domain2.de
Bei Plesk 9 und früher geht: /usr/local/psa/admin/bin/websrvmng -a -v

Alternativ kann auch folgendes ausgeführt werden (Plesk >=10):
/usr/local/psa/admin/bin/httpdmng --reconfigure-all

ACHTUNG: Bei Verwendung von --reconfigure-all wird die workers.properties überschrieben und muss neu angepasst werden!!!

Zu guter Letzt wird der Apache neu gestartet:
Bei Änderungen dort werden diese nach einem Webserverneustart aktiv
  sudo service httpd restart

Falls dies aus irgendwelchen Gründen noch nicht den gewünschten Effekt haben sollte, kann Plesk neu gestartet werden:
  /etc/init.d/psa start

8. Das Wichtigste in Kürze

Wichtige Befehle

Tomcat gestartet?
      sudo service tomcat status
   
Tomcat neu starten
      sudo service tomcat restart
   
Apache neu starten
      sudo service httpd restart
   
Plesk neu starten
      /etc/init.d/psa start
   
Plesk alles stoppen
      /etc/init.d/psa stopall
   
Plesk Änderungen an vhost.conf bekannt machen
      /usr/local/psa/admin/sbin/websrvmng -ur --vhost-name=[Domainname]
   
Plesk rekonfigurieren (Plesk >=10)
(ACHTUNG: Hierbei wird die workers.properties überschrieben und muss neu angepasst werden.)
      /usr/local/psa/admin/bin/httpdmng --reconfigure-all
   

9. Deployen der Java Anwendung

In Abhängigkeit der beschriebenen Vorgehensweise wird das WAR, wie in der tomcat/conf/server.xml konfiguriert, einfach an die entsprechende Stelle kopiert. Also hier z.B. das WAR für domain1.de mit dem Namen app1.war nach /var/www/vhosts/domain1.de/webapps/.

Wenn die Applikation nicht startet, folgendes Logfile kontrollieren: $TOMCAT_HOME/logs/catalina.out

Der Tomcat sollte die Anwendung selber entpacken und zugreifbar haben. Beim ersten Mal kann es jedoch nötig sein, dass der Tomcat nochmal durchgestartet wird.
  service tomcat restart

Hinweis:
Falls die Anwendung auf Verzeichnisse zugreifen möchte, dann erfolgt der Zugriff aus der Anwendung heraus in der Regel mit dem Tomcat user. Falls also beispielsweise ein /uploads Verzeichnis angelegt wird, in das über die Anwendung hochgeladene Bilder gespeichert werden sollen, müssen für dieses Verzeichnis noch die Rechte für en Tomcat user gesetzt werden.
  sudo chown -R -v tomcat /uploads

10. Deutscher Zeichensatz

Die korrekte Anzeige von Umlauten kann einiges an Sucharbeit nötig machen, dem durch folgende Hinweise begegnet werden soll. Dateien sollten grundsätzlich in UTF-8 (ohne BOM) speichern.

In der server.xml des Tomcats bei jedem Connector-Tag das URIEncoding hinzufügen:
  <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>

Im Apache ist noch die Konfigurationsdatei charset um UTF-8 als Default Charset zu ergänzen:
  sudo nano /etc/apache2/conf.d/charset
In die Datei ist folgendes zu schreiben:
   AddDefaultCharset UTF-8


Tags: Tomcat, Apache, Plesk, Ubuntu
Guido Oelmann     Donnerstag, 21. April 2016 0    4503
@
(Email Adresse wird nicht veröffentlicht)
(kein HTML erlaubt)
Bitte beantworten Sie die einfache mathematische Frage.
  


Keine Kommentare vorhanden.