Tomcat ist ein Java Application Server welcher in Java/JavaScript geschriebene Programme ausführt.
Als erstes gilt es eine Umgebung für den Appl-Server zu schaffen. Wir benötigen eine geeignete JavaRuntime Umgebung.
Sucht euch bitte die passende Version auf der Seite: http://www.oracle.com/technetwork/java/javase/downloads/index.html
Für den Raspberry Pi wäre das:
http://www.oracle.com/technetwork/java/embedded/downloads/javase/index.html – „ARMv6/7 Linux – Headless – Client Compiler EABI, VFP, HardFP ABI, Little Endian1“.
Da Oracle unbedingt Cookie setzen will zum abnicken der AGBs kann man das ganze nicht ganz so einfach mit wget laden man braucht noch was drumherum:
RaspberryPi
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http://www.oracle.com/" "http://download.oracle.com/otn/java/ejre/7u51-b13/ejre-7u51-fcs-b13-linux-arm-vfp-hflt-client_headless-18_dec_2013.tar.gz
für Linux 64bit:
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http://www.oracle.com/" "http://download.oracle.com/otn-pub/java/jdk/7u51-b13/jdk-7u51-linux-x64.tar.gz"
Installation von Java auf eurem System:
mkdir /usr/lib/jvm cd /usr/lib/jvm tar xfz jre-7u51-linux-x64.tar.gz #64bit Linux tar xfz jdk-7u51-linux-arm-vfp-hflt.tar.gz #RaspberryPi ln -s /usr/lib/jvm/jre1.7.0_51/ /usr/lib/jvm/java update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/java/bin/java" 1 #Oracle Java zum Standard
Ein „java -version
“ sollte soetwas ausgeben(auf RaspberryPi):
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode)
Damit wäre die umgebung für Tomcat fertig. Jetzt geht es mit der eigentlichen installation von Tomcat los.
„Aktuellen“ Tomcat herunterladen http://tomcat.apache.org/download-70.cgi
wget http://www.eu.apache.org/dist/tomcat/tomcat-7/v7.0.42/bin/apache-tomcat-7.0.42.tar.gz
Ich installiere es auf einer eigenen partition welche ich nach /tomcat mounte.
cd / tar xfz apache-tomcat-7.0.42.tar.gz mv /apache-tomcat-7.0.42 /tomcat chown -R tomcat:tomcat /tomcat chmod +x /tomcat/bin/*.sh
Jetzt kann man ihn schon fast starten, hier ein Script welches ich mir auch nur von „http://www.SysADMINsLife.com“ kopiert und etwas angepasst habe:
tomcat:
### BEGIN INIT INFO # Provides: tomcat # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs $remote_fs $network # Should-Start: $named # Should-Stop: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start Tomcat Server # Description: Start the Tomcat Server ### END INIT INFO ###################################### # customize values for your needs JRE_HOME=""; JAVA_HOME="/usr/lib/jvm/java"; TOMCAT_USER=tomcat; TOMCAT_PATH=/tomcat; SHUTDOWN_TIME=60 CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=8090 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" export JAVA_OPTS export CATALINA_OPTS if [ -n "$JAVA_HOME" ] && [ -n "$JRE_HOME" ] ; then echo "JAVA_HOME and JRE_HOME is set. Choose one of them. JAVA_HOME=$JAVA_HOME JRE_HOME=$JRE_HOME Abort starting Tomcat." exit 1; fi if [ -n "$JAVA_HOME" ] ; then JAVA_VERSION=$($JAVA_HOME/bin/java -version 2>&1|grep "java version"|awk {'print $3'}|cut -d"." -f 2); export JAVA_HOME; fi if [ -n "$JRE_HOME" ] ; then JAVA_VERSION=$($JRE_HOME/bin/java -version 2>&1|grep "java version"|awk {'print $3'}|cut -d"." -f 2); export JRE_HOME; fi if [ $JAVA_VERSION -gt 7 ] ; then JAVA_OPTS="-Djava.awt.headless=true -Xms64m -Xmx256m"; else JAVA_OPTS="-Djava.awt.headless=true -Xms64m -Xmx256m -XX:MaxPermSize=128m"; fi tomcat_pid() { echo `ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }'` } start() { if [ -f $TOMCAT_PATH/bin/startup.sh ]; then pid=$(tomcat_pid) if [ -n "$pid" ] then echo "Start aborted because Tomcat already running with pid: $pid" else echo "Starting Tomcat" /bin/su $TOMCAT_USER -c $TOMCAT_PATH/bin/startup.sh fi else echo "$TOMCAT_PATH/bin/startup.sh does not exist - Please check your config" fi return 0 } stop() { if [ -f $TOMCAT_PATH/bin/shutdown.sh ]; then pid=$(tomcat_pid) if [ -n "$pid" ] then echo "Stopping Tomcat" /bin/su $TOMCAT_USER -c $TOMCAT_PATH/bin/shutdown.sh let waitfor=$SHUTDOWN_TIME count=0; until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $waitfor ] do echo -n -e "\rWaiting $count of $waitfor seconds for Tomcat to exit until process kill "; sleep 1 let count=$count+1; done if [ $count -gt $waitfor ]; then echo -n -e "\nKilling Tomcat which didn't stop after $SHUTDOWN_TIME seconds" kill -9 $pid fi else echo "Your Tomcat Instance is not running" fi else echo "$TOMCAT_PATH/bin/shutdown.sh does not exist - Please check your config" fi return 0 } case $1 in start) start ;; stop) stop ;; restart) stop start ;; status) pid=$(tomcat_pid) if [ -n "$pid" ] then echo "Your Tomcat Instance is running with pid: $pid" else echo "Your Tomcat Instance is not running" fi ;; *) echo "Usage: $0 { start | stop | restart | status }" ;; esac exit 0
Dieses Skript noch ausführbar machen chmod +x tomcat
und dann ausführen ./tomcat start
.
Nun im Logfile verfolgen ob er wirklich startet mit tail -f /tomcat/logs/catalina.out
und warten bis folgende Ausgabe erscheint:
Mrz 19, 2014 2:22:05 PM org.apache.coyote.AbstractProtocol start Information: Starting ProtocolHandler ["http-bio-8282"] Mrz 19, 2014 2:22:05 PM org.apache.coyote.AbstractProtocol start Information: Starting ProtocolHandler ["ajp-bio-8009"] Mrz 19, 2014 2:22:05 PM org.apache.catalina.startup.Catalina start Information: Server startup in 2589 ms
Jetzt kann man im Browser unter der URL „http://<servername>:8080
“ den Tomcat bewundern. Wenn er läuft stoppen mit ./tomcat stop
und noch etwas hand anlegen.
Als ersters solltet ihr das Script nach /etc/init.d/
kopieren und mit update-rc.d tomcat defaults 99 01
dem init-Prozess bekannt machen bzw. automatisch starten lassen.
1. Benutzer anlegen für „Server-Status/Manager GUI“:
vi /tomcat/conf/tomcat-users.xml
und folgendes in den Abschnitt <tomcat-users>
hinzufügen:
<role rolename="manager"/>; <role rolename="manager-gui"/> <role rolename="admin"/> <user username="<USERNAME>" password="<PASSWORD>" roles="admin,manager,admin-gui,manager-gui"/>
und schon könnt ihr euch unter der URL „http://<servername>:8080/manager/
“ mit den Credentials anmelden.
2. Wenn euch das Standard-Logging welches für jeden Tag ein eigenes Log öffnet stört kann folgendes hinzufügen:
/tomcat/conf/logging.properties:
1catalina.org.apache.juli.FileHandler.rotatable = false 2localhost.org.apache.juli.FileHandler.rotatable = false 3manager.org.apache.juli.FileHandler.rotatable = false 4host-manager.org.apache.juli.FileHandler.rotatable = false 1catalina.org.apache.juli.FileHandler.suffix = log 2localhost.org.apache.juli.FileHandler.suffix = log 3manager.org.apache.juli.FileHandler.suffix = log 4host-manager.org.apache.juli.FileHandler.suffix = log
3. Wenn ihr euren Tomcat nicht direkt an das Netz hängen wollt könnt ihr die Anfragen vorher mit dem Apache oder nginx abfangen und an den Tomcat weiterleiten so ist kann man noch einige Dinge beeinflussen wie Rewrite der URL, vhosts usw.
Ich nutze den nginx als ReverseProxy für den Tomcat. Der Tomcat darf nicht auf dem port vom nginx laufen.
Hier müssen am Tomcat und an nginx Veränderungen vorgenommen werden.
Am Tomcat:
/tomcat/conf/server.xml (innerhalb von Server->Service->Engine->Host):
Eventuell Port ändern:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
hier ‚port=“8080″‚ auf ein nicht besetzten über 1024 liegenden Port wechseln.
Wenn im logging korrekte IPs erscheinen sollen dies hinzufügen:
/tomcat/conf/server.xml:
<Valve className="org.apache.catalina.valves.RemoteIpValve" internalProxies="127\.0\.0\.1" remoteIpHeader="x-forwarded-for" proxiesHeader="x-forwarded-by" trustedProxies="127.0.0.1" protocolHeader="x-forwarded-proto">
Dies sorgt dafür das ein vom Proxy/Reverse Proxy gesetzter „x-forwarded-for“ Eintrag im Header welcher die echte IP des anfragenden Clients ist auswertet und verarbeitet. So ist im access-log des Tomcat die echte Client-IP gesetzt und nicht die des Proxy.
Damit sind die arbeiten an der Tomcat-konfig abgeschlossen.
Der nginx wird wie folgt zum Reverse Proxy konfiguriert:
/etc/nginx/sites-available/default:
server { listen *:80; server_name ; root /tomcat/webapps/; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header CLIENT_IP $remote_addr; proxy_pass http://127.0.0.1:8080/; } }
Beide Dienste werden neugestartet bzw. beim nginx reloaded und unter der URL "http://<servername>"
sollte euer Tomcat über nginx erreichbar sein.
4. Der Tomcat kann über die Zeile "JAVA_OPTS="-Djava.awt.headless=true -Xms32m -Xmx64m -XX:MaxPermSize=96m""
im Start-Skript konfiguriert werden.
Hier wurde festgelegt das Java mit 32MByte initialisiert wird(-Xms) und maximal 64MByte verbrauchen darf(-Xmx). Mit "-XX:MaxPermSize=96m"
legt man den PermGenSpace fest dies ist der „Heap Space“ hier werden die Classen abgelegt. Bei grösseren Projekten kann es zu OutOfMemory kommen weil nicht alle Classen geladen werden können. Wird dieser nicht angegeben wird der Standard benutzt: 64MByte.
Zu guter letzt sollte dem Tomcat noch ein Programm hinzugefügt werden.
Lade dazu „psi probe“ herunter: https://code.google.com/p/psi-probe/ entpacken die zip-Datei und kopieren die enthaltene probe.war-Datei nach /tomcat/webapps/
. Führe wieder ein tail -f /tomcat/logs/catalina.out
aus und sehe zu wie die App. deployed wird. Nach erfolgreicher Installation kann man dies unter http://<servername>/probe/
bewundern.
Update 19.07.:
Wenn man das jdk 8 haben möchte lädt man dies so:
curl -L --header "Cookie: s_nr=1405796959315; s_cc=true; gpw_e24=http%3A%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2Fdownloads%2Fjdk8-arm-downloads-2187472.html; s_sq=oracleotnlive%2Coracleglobal%3D%2526pid%253Dotn%25253Aen-us%25253A%25252Fjava%25252Fjavase%25252Fdownloads%25252Fjdk8-arm-downloads-2187472.html%2526pidt%253D1%2526oid%253Dfunctiononclick(event)%25257BacceptAgreement(window.self%25252C'jdk-8-oth-JPR')%25253B%25257D%2526oidt%253D2%2526ot%253DRADIO; oraclelicense=accept-securebackup-cookie; testSessionCookie=Enabled" http://download.oracle.com/otn-pub/java/jdk/8u6-b23/jdk-8u6-linux-arm-vfp-hflt.tar.gz -o jdk-8u6-linux-arm-vfp-hflt.tar.gz