Czym jest Apache Tomcat? Tomcat jest jednym z bardziej popularnych kontenerów aplikacji webowych rozwijany w ramach projektu Apache. Jako kontener aplikacji jest serwerem, który umożliwia uruchamianie aplikacji internetowych w technologiach Java Servlets i Java Server Pages (JSP) Tomcat jest wykorzystywany w takich serwerach aplikacji JEE (J2EE) jak Apache Geronimo. Jest jednak również bardzo popularnym kontenerem dla samodzielnych aplikacji (niewymagających pełnego serwera aplikacji) pisanych w środowisku Spring Framework.
Co wchodzi w skład pakietu? Zaczynając od wersji 4.0, Tomcat składa się z 3 komponentów: Catalina – kontener servletów. Zawera specyfikacje Sun Microsystem dotyczące Java servletów oraz JavaServer Pages (JSP). W Tomcat kluczowy element reprezentuje bazę danych zawierającą nazwy użytkowników, hasła oraz przypisane użytkownikom role (podobnie jak w systemach Unixowych). Dzięki różnym implementacjom elementu bazodanowego Catalina może być używana w systemach z już istniejącym systemem autentykacji użytkowników, których jest automatycznie importowany do systemu zabezpieczeń Tomcat.
cd. Co wchodzi w skład pakietu? Coyote – jest komponentem nasłuchującym przychodzące połączenia na określonym porcie TCP i przekazującym je do przypisanego silnika Tomcat w celu obsłużenia zapytania. Odpowiada również za poprawną komunikację zwrotną do klienta. Jasper – jest Tomcatowym silnikiem JSP. Przetwarza pliki JSP w celu skompilowania ich do kodu Java jako servlety, wykorzystywane następnie przez komponent Catalina. Jasper pracuje w tle, dzięki czemu pliki JSP są przetwarzane na bieżąco.
Przygotowanie systemu dla Tomcat Wstępne wymagania: użytkownik nie będący rootem pakiet Java OpenJDK
Tworzenie użytkownika logowanie do systemu z uprawnieniami roota logowanie za pomocą SSH przełączenie użytkownika za pomocą komendy su dodanie nowego użytkownika # adduser praktyki # passwd praktyki przyznanie uprawnień super usera (dodanie do grupy wheel) # gpasswd -a praktyki wheel sprawdzenie ustawień - logowanie do systemu używając użytkownika praktyki
Pakiet Java oraz użytkownik tomcat Tomcat wymaga środowiska Javy w celu poprawnego uruchamiania dowolnych webowych aplikacji Java. instalacja środowiska Java $ sudo yum install java-1.7.0-openjdk-devel (lub inna dostępna dystrybucja) dodanie grupy i użytkownika tomcat $ sudo groupadd -r tomcat $ sudo useradd -d /usr/local/tomcat -r -s /bin/bash -U tomcat
Instalacja Tomcat Apache Tomcat jest wydany w różnych wersjach odpowiednich do rożnych wersji specyfikacji JSP oraz Java Servlet. Odpowiednie archiwum z binariami dla wybranego wydanie serwera Tomcat należy pobrać ze strony projektu, a następnie rozpakować w stosownym miejscu w systemie plików, dla przykładu w katalogu /opt lub /usr/local. # export tver=7.0.59 # wget http://ftp.piotrkosoft.net/pub/mirrors/ftp.apache.org/tomcat/tomcat- 7/v${tver}/bin/apache-tomcat-${tver}.tar.gz # tar xf apache-tomcat-${tver}.tar.gz # mv apache-tomcat-${tver} /usr/local/tomcat
cd. Instalacja Tomcat Standardowo uruchomiony Tomcat nasłuchuje na porcie 8080 na wszystkich dostępnych interfejsach oraz lokalnie na interfejsie loopback na porcie 8005. Nie wymaga również uprawnień administracyjnych użytkownika root w domyślnej konfiguracji co powinno zostać zachowane. W tym celu skorzystamy z osobnego, dedykowanego pod usługę konta tomcat.
cd. Instalacja Tomcat - uprawnienia Następnie uaktualniamy uprawnienia na wypakowanych z archiwum plikach. Uwaga! użytkownik tomcat na którym będzie działać usługa nie powinien mieć uprawnień do modyfikacji plików konfiguracyjnych czy binarnych odpowiedzialnych za uruchamianie aplikacji, ponieważ z poziomu aplikacji może takich zmian w systemie plików dokonać jeśli tylko uprawnienia na to mu zezwalają. # chown tomcat.tomcat -R /usr/local/tomcat
cd. Instalacja Tomcat – uszczelnianie systemu - katalog conf/ # chmod 750 /usr/local/tomcat/conf/ # chown root.tomcat /usr/local/tomcat/conf/ # cd /usr/local/tomcat/conf/ # chown root.tomcat tomcat-users.xml web.xml server.xml logging.properties context.xml catalina.policy catalina.properties # chmod 640 tomcat-users.xml web.xml server.xml logging.properties context.xml catalina.policy catalina.properties katalogi lib/ i bin/ # chown -R root.tomcat /usr/local/tomcat/lib /usr/local/tomcat/bin
Zarządzanie usługą - uruchamianie Tomcat dostarcza własne skrypty przygotowujące środowisko uruchomieniowe Javy pod serwer. Skrypty odpowiedzialne za uruchomianie usługi umieszczone są wewnątrz podkatalogu bin wypakowanego archiwum. Główne z nich to startup.sh i shutdown.sh, stanowiące w rzeczywistości parę wraperów odpowiedzialnych za ustawienie zmiennych i wywołanie głównego skryptu startującego usługę tj. catalina.sh wraz z odpowiednimi parametrami. Jeśli z poziomu użytkownika root wykonamy te skrypty serwer wystartuje na uprawnieniach superużytkownika. Dlatego w celu uruchomienia usługi na uprawnieniach nowo przygotowanego konta można użyć narzędzie su. Ręcznie usługę startujemy zawsze z poziomu dedykowanego użytkownika. # su - tomcat -c /usr/local/tomcat/bin/startup.sh # su - tomcat -c /usr/local/tomcat/bin/shutdown.sh
cd. Zarządzanie usługą - status Status uruchomionego serwera można sprawdzić za pomocą standardowego narzędzia ps po procesie catalina, ewentualnie z pomocą narzędzia jps (java vm ps) $ jps -v | grep Bootstrap $ ps aux | grep catalina.startup.Bootstrap Można uruchomić dowolną przeglądarkę i na porcie 8080 naszego interfejsu publicznego sprawdzić czy usługa prawidłowo wystartowała. Na ekranie powinny załadować się pliki z domyślnej strony startowej z katalogu webapps. firefox http://IP_serwera:8080
Zadanie dodatkowe – przekierowanie portów Tomcat , a raczej proces uruchomieniowy JVM jak każdy inny wymagający pracy na porcie poniżej 1024 w systemach unixowych wymaga uprawnień administracyjnych użytkownika root. Tomcat nie posiada możliwości zrzucania uprawnień jak serwer Apache. Dlatego uruchamiany powinien być na uprawnieniach zwykłego użytkownika, a co za tym idzie na porcie powyżej uprawnionego zakresu. Ruch z portu 80 może być przekierowany za pomocą reguł iptables lub przy użyciu narzędzia jak jsvc, gdy nie jest wykorzystywany na tym porcie inny serwer WWW. # iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080