Tomcat

From ICO wiki
Jump to navigationJump to search

Autor: Kristjan Veskimäe D32

Sissejuhatus

Tomcat on vabalt kättesaadav server Java veebirakendustele. Põhimõtteliselt on tegemist Servlet/JSP spetsifikatsiooni toetava konteineriga. Kiire käivitumise ning rakenduste käigultvahetuse tõttu on Tomcat hea valik väiksemate ning keskmise suurusega Java veebirakenduste käitamiseks.

Antud töö kirjeldab Tomcati 8. versiooni. Põhiosa on üldiselt samasugune võrreldes paari eelmise versiooniga. Suuremad erinevused on versioonispetsiifilistes probleemides ja nende lahendamises, mida käesolev töö ei vaatle.

Mõisted

  • Kontekst (context) - Tomcati mõistes üks konkreetne veebiaplikatsioon
  • Konteiner (container) - veebiserver Tomcat ise
  • Kontekstikirjeldus (context descriptor) - Tomcati-spetsiifiline konteksti konfiguratsioonimääratlus; peremehepõhine osa loetakse failist $CATALINA_HOME/conf/[enginename]/[hostname]/context.xml ja sellele lisatakse kontekstispetsiifilised täpsustused failist $CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml; kontekstikirjeldus määrab näiteks nimed ressurssidele, sessioonihalduse parameetrid jmt. (olgu märgitud, et Tomcati varasemates versioonides sisaldusid kontekstikirjeldused põhikonfiguratsioonifailis server.xml)
  • Dokumendipõhi (docBase) - kontekstile vastav kataloog Tomcati "webapps" kataloogis, mis tekib veebiaplikatsiooni serverisse rakendamisel

Ülesehitus

Kataloogid
$CATALINA_HOME baaskataloog, kuhu on Tomcat paigutatud
$CATALINA_BASE parasjagu töösoleva Tomcati eksemplari baaskataloog, mille alusel lahendatakse teed ülejäänud kataloogide ja failideni; ainult ühe kasutusel oleva Tomcati eksemplari puhul on see sama, mis $CATALINA_HOME
$CATALINA_BASE/bin serveri käivitus- ja abiskriptid
$CATALINA_BASE/conf konfiguratsioonifailid
$CATALINA_BASE/lib Tomcatile vaikimisi kättesaadavad Java klassiteegid (class libraries) ehk .jar-failid kuhu on Java kompileeritud kood kokku pakendatud
$CATALINA_BASE/logs logifailid paigutatakse vaikimisi siia
$CATALINA_BASE/webapps kataloog, kuhu paigutatakse serverisse juurutatavad veebiaplikatsioonid


Olulisemad failid
$CATALINA_BASE/bin/startup.sh serveri käivitusskript
$CATALINA_BASE/bin/shutdown.sh serveri peatusskript
$CATALINA_BASE/conf/server.xml konteineri peamine konfiguratsioonifail
$CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml serveri administraatori jaoks konteinerisse endasse ümber kopeeritud rakendusepõhine kontekstikirjelduse konfiguratsioon failist $CATALINA_BASE/webapps/[ApplicationName]/META-INF/context.xml
$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml fail, mis aitab administraatoril konteksti kohta käivat infot kirjeldada peremeesmasina-põhiselt ja halduseks mõeldud automaat-tööriistadel (näiteks Tomcat Manager ja TCD) oma tööd teha
$CATALINA_BASE/$CATALINA_BASE/conf/[enginename]/[hostname]/manager.xml fail, mis võimaldab lisada rakendustele ligipääsufiltreid
$CATALINA_BASE/webapps/[webappname]/META-INF/context.xml kontekstikirjeldusfail, mille veebirakenduse programmeerija on pakendanud oma aplikatsiooniga kaasa ning millega ta saab võimaluse kontekstikirjeldust omalt poolt mõjutada; kirjutatakse rakenduse uuestijuurutamisel üle, mistõttu administraator peaks muutma selle asemel konteinerisse ümber kopeeritud püsieksemplari $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml
$CATALINA_BASE/webapps/[webappname]/WEB-INF/web.xml ka üks oluline Java veebiaplikatsiooni konfiguratsioonifail, mille pakendatakse koos veebiarhiiviga; enamasti muudab seda ainult programeerija; määrab muu hulgas millised aplikatsiooni osad vajavad autentimist või kui kiiresti veebisessioon aegub

Installeerimine

Installeerimine paketihalduriga

apt-cache search tomcat
apt-get install tomcat[version]-webapps
apt-get install tomcat[version]-admin
apt-get install tomcat[version]

Installeerimine käsitsi

Paketihalduriga installeerides ei pruugi viimane Tomcati versioon olla kättesaadav ja see pakub ka vähem võimalusi kataloogide määramiseks jms. Käsitsi installeerimiseks tuleb laadida Tomcat kodulehelt alla. Lahtipakkimisel tekib kataloog, milles sisalduv fail "RUNNING.txt" on kõige kindlam allikas installeerimisel tekkivate probleemide vältimiseks ning lahendamiseks.

Vajaliku versiooni installeerimisfaili asukoha saab vaadata Tomcati kodulehelt sektsioonist "Download". Järgnevas näites installeerime Tomcati kõige uuema ebastabiilse kandidaatversiooni, mida näitab nimes sisalduv RC ehk "release candidate". Produktsioonikeskkonda tuleks siiski valida stabiilse versiooni. Käsitsi installeerimine on sarnane järgmisega:

wget http://mirror.nexcess.net/apache/tomcat/tomcat-8/v8.0.0-RC5/bin/apache-tomcat-8.0.0-RC5.tar.gz
tar -zxvf apache-tomcat-8.0.0-RC5.tar.gz
sudo mv /Users/kristjanveskimae/downloads/apache-tomcat-8.0.0-RC5 /usr/local/apache-tomcat-8.0.0-RC5
sudo rm -f /Library/Tomcat 
sudo ln -s /usr/local/apache-tomcat-8.0.0-RC5/ /Library/Tomcat 
sudo chown -R kristjanveskimae /Library/Tomcat
sudo chmod +x /Library/Tomcat/bin/*.sh

Käivitamine ja aplikatsiooni juurutamine

Konteineri käivitamine

Peale installeerimist võib kasutada skripte kataloogist $CATALINA_BASE/bin . Järgneb üks võimalik käivitamise ja peatamise näide, mis on kasutatav eelnevalt kirjeldatud käsitsi installeerimise juhul:

/Library/Tomcat/bin/startup.sh 

ja peatamiseks

/Library/Tomcat/bin/shutdown.sh 

Näiteaplikatsiooni juurutamine

Java veebiaplikatsiooni jagatakse hea tava kohaselt üheainsa veebiarhiivi failina, mille laienditüübiks on "war". Tegemist on zip-protokolliga kokkupakitud kataloogiga, millel on Java veebirakenduste spetsifikatsioonile vastav ülesehitus. Siiski võib veebiaplikatsioon olla juurutamisel ka lahtipakendatud olekus (inglisekeelne termin on "war is exploded").

Käsitsi juurutamine ja mahavõtmine

Näiteaplikatsiooni juurutamiseks lae selle veebiarhiivifail alla ning kopeeri oma konteineri juurutamiskataloogi 'webapps':

wget http://tomcat.apache.org/tomcat-8.0-doc/appdev/sample/sample.war
cp /Users/kristjanveskimae/downloads/sample.war /Library/Tomcat/webapps/sample.war

Kui konfiguratsioonifailis $CATALINA_BASE/conf/server.xml on märgendi "Host" atribuudi "autoDeploy" väärtus "true", installeerib ja uuendab Tomcat aplikatsioone dünaamiliselt töötamise ajal. Kui väärtuseks on "false", käib installeerimine staatiliselt ning serverisse juurutamiseks tuleb teha konteineri taaskäivitus. Mõlemal juhul pakib konteiner arhiveeritud faili ise lahti samasse kausta $CATALINA_BASE/webapps ning ka rakendab selle. Tekkiv aplikatsioon on lokaalsest masinast seejärel kättesaadav aadressil http://localhost:8080/sample/ .

Veebirakenduse käsitsi mahavõtmiseks tuleb kustutada talle vastav dokumendipõhja kataloog "webapps" kataloogist. Samuti tuleks kustutada .war-fail olemaks kindel, et Tomcat ei rakenda uuel käivitamisel veebiaplikatsiooni veebiarhiivifailist. Veelgi lihtsam on mahavõtmine brauseriga haldusrakenduse kaudu.

Rakenduste baaskataloogi "webapps" asukohta saab muuta failis $CATALINA_BASE/conf/server.xml peremehepõhiselt määratava atribuudiga "appBase", sealjuures Tomcati vaikimisi peremees ehk "Host" on "localhost".

Tomcati vahendid juurutamiseks

Veebiaplikatsioonide juurutamine ja mahajuurutamine on võimalik ka kaughalduse teel tänu Tomcati internetipõhisele haldusrakendusele. Näiteks saab veebibrauserit kasutades teha serveri põhitoiminguid Tomcati enda HTML-põhise rakendusega "Tomcat Manager". Veebipõhine haldusrakendus töötab ka käsupõhise veebiteenusena, millele on valmis ehitatud Anti ja Maveni integratsioonid. Samuti eksisteerib käsurea kliendirakendus TCD (Tomcat Client Deployer). TCD ei kuulu Tomcati baaskoosseisu, kuid pakub peale serveri administreerimise tavatoimingute ka lisafunktsionaalsust nagu veebirakenduse kokkukompileerimine ja pakendamine.

Haldurakendus "Tomcat Manager"

Tomcati haldusrakendus "Tomcat Manager" (antud alamjaotuses lihtsalt haldusrakendus) on Tomcati enda veebiaplikatioon Tomcati brauseripõhiseks kaughalduseks, võimaldades muu hulgas järgnevat:

  • Rakendada uue veebiaplikatsiooni war-faili üleslaadimisega;
  • Näha kõiki rakendatud veebiaplikatsioone koos aktiivsete sessioonidega;
  • Taasrakendada veebirakendust, näiteks klassifailide /WEB-INF/classes või teekide /WEB-INF/lib uuendamisel, kinnijooksmisel jms.;
  • Peatada veebirakendust ilma serverist eemaldamata, samuti koos serverist eemaldamisega;
  • Vaadata operatsioonisüsteemi ja Java parameetrite väärtusi;
  • Näha kõiki saadaolevaid JNDI ressursse, k.a. andmebaasiühendusi, mis aitavad rakenduste programmeerijail defineerida <ResourceLink> elemendid web.xml konfiguratsioonifailis.

Tomcati installatsioon sisaldab haldusrakendust juba vaikimisi. Haldusrakenduse töölepanemiseks tuleb peremeesmasina konfiguratsioonikataloogi $CATALINA_BASE/conf/[enginename]/[hostname] lisada ka fail manager.xml. Vaikimisi valmiskonfigureeritud testrakendusel on see fail juba olemas asukohas $CATALINA_BASE/conf/Catalina/localhost/manager.xml . Rakendus asub vaikimisi aadressil http://[host]/manager/ . Samuti on võimalik kasutada käskude edastamiseks veebiteenust või Ant-tegumeid.

"Tomcat Manager" ligipääsu konfigureerimine

Vaikimisi on turvalisuspõhjustel ligipääs haldusrakendusele maha keeratud. Mismoodi täpselt kasutajatel ligipääsu võimaldada sõltub kasutatavast valdusest (realm). Vaikimisi defineerib $CATALINA_BASE/conf/server.xml valduseks "MemoryRealm". Vaikimisi loeb valdus "MemoryRealm" kasutajad failist $CATALINA_BASE/conf/tomcat-users.xml. Antud failis on iga kasutaja defineeritud omaette märgendiga <user>, mis näeb välja umbes järgmine:

<user name="craig" password="secret" roles="manager-gui,manager-script" />

Antud kasutajale on defineeritud korraga kaks rolli. Ligipääsu võimaldamiseks tulebki lihtsamal juhul kasutajatefailis $CATALINA_BASE/conf/tomcat-users.xml defineerida enda kasutaja. Kasutaja rolliks võib määrata näiteks "manager-gui", mis võimaldab ligipääsu kogu HTML liidese funktsionaalsusele.

Teised valdused on "JDBCRealm", mille puhul hoitakse kasutajatega seonduvat infot andmebaasis ja JNDIRealm, mille puhul kasutatakse lihtsustatud kataloogisirvimise protokolli (LDAP). Lisaks saab haldusrakendusele keelata ligipääsu mujalt kui kindlaksmääratud IP-aadressidelt, lisades filtri "RemoteAddrValve" või "RemoteHostValve" konfigureerimisfaili manager.xml näiteks järgmiselt:

<Context privileged="true">
         <Valve className="org.apache.catalina.valves.RemoteAddrValve"
                allow="127\.0\.0\.1"/>
</Context>
Juurutamine ja mahavõtmine haldusrakendusega "Tomcat Manager"

Kõigepealt lae haldusrakendusega veebiarhiivifail üles, kasutades esilehel asuvat sektsiooni "WAR file to deploy".

Rakendus kuvatakse seejärel hallatavate rakenduste nimekirjas. Kui konteiner pole seadistatud üleslaetud aplikatsiooni kohe ka ise rakendama, tuleb vajutada "Start". Rakenduse peatamiseks kasuta "Stop", uuesti rakendamiseks "Redeploy" ja serverist eemaldamiseks "Undeploy".

Rakenduste nimekiri

Märkused reaalseks kasutamiseks

Tomcati käivitumisel rakendatakse aplikatsioonid sellises järjekorras:

  1. Konteinerisse kopeeritud kontekstikirjelduste järgi $CATALINA_BASE/conf/[EngineName]/[HostName]/[ApplicationName].xml ;
  2. Lahtipakitud rakendused "webapps" kataloogis;
  3. Pakitud rakenduste veebiarhiivid "webapps" kataloogis.

Seetõttu tuleb käsitsi rakendamisel eelnevalt kustutada rakenduse lahtipakitud dokumendipõhja kataloog "webapps" kataloogist. Kontekstikirjelduse muutumisel tuleb jälgida, kas kirjeldus on juba kopeeritud serverisse ning vajadusel eelmise versiooni ümber muuta või kustutada.

Võimaldamaks käigultvahetust (hot deployment) peab konteineri konfiguratsioonifailis $CATALINA_BASE/conf/server.xml olema peremehepõhise märgendi "Host" atribuudi "autoDeploy" väärtus "true". Sel juhul installeerib ja uuendab Tomcat aplikatsioone dünaamiliselt töötamise ajal. Kui väärtuseks on "false", käib installeerimine staatiliselt ning serverisse juurutamiseks tuleb teha konteineri taaskäivitus.

Käigultvahetust päästikuks on vaikimisi uuendatud veebiarhiivifaili või lahtipakitud veebirakenduse paigutamine "webapps" kataloogi. Käigultvahetuse võib konfigeerida ka käivituma ise ressursside nagu web.xml lisamisega kuulatavate ressursside loetelusse.

Java klassiteegid võib pakendada veebiarhiivi faili, kuid nii võib osutuda veebiarhiivi üleslaadimine ajakulukaks. Kui ei teki ohtu, et erinevad rakendused kasutavad sama teegi erinevaid versioone, siis on vahel parem lisada vähemalt osa teeke konteineri kataloogi "libs", kust need tehakse siis konteineri poolt kättesaadavaks kõigile konteineris jooksutatavatele kontekstidele. Nii võib vähendada veebiarhiivi failide suurust märgatavalt.

Protsessid ja logifailid

Kasutatud materjalid