08 maj

Jak zainstalować Apache Tomcat 8 na Ubuntu 16.04

Apache Tomcat 8 na Ubuntu 16

Apache Tomcat jest kontenerem serwletów i serwerem WWW, który jest używany do obsługi aplikacji Java. Tomcat jest otwartą implementacją technologii Java Servlet i JavaServer Pages, wydaną przez Apache Software Foundation. W tym tutorialu opiszemy podstawową instalację i konfigurację Tomcat 8 na serwerze Ubuntu 16.04.

Wymagania

Przed rozpoczęciem pracy, należy zalogować się jako użytkownik inny niż root, z ustawionymi na serwerze uprawnieniami sudo. Można to zrobić za pomocą naszego tutorialu Wstępna Konfiguracja serwera z Ubuntu 16.04.

Krok 1: Instalacja Java

Tomcat wymaga, aby na serwerze była zainstalowana Java, aby każdy kod aplikacji Java mógł być wykonywany.  Możemy spełnić ten warunek  poprzez instalację OpenJDK z apt-get.

Najpierw, należy zaktualizować indeks pakietów apt-get:

sudo apt-get update

Następnie należy zainstalować pakiet Java Development Kit za pomocą apt-get:

sudo apt-get install default-jdk

Teraz, gdy mamy zainstalowaną Javę, możemy utworzyć użytkownika tomcat, który będzie używany do uruchomienia usługi Tomcat.

Krok 2: Tworzenie Użytkownika Tomcat

Ze względów bezpieczeństwa, Tomcat musi być uruchomiony w imieniu nieuprzywilejowanego użytkownika (tzn. nie root). Będziemy tworzyć nowego użytkownika i grupę, która będzie uruchamiać usługę Tomcat.

Po pierwsze, należy utworzyć nową grupę tomcat:

sudo groupadd tomcat

Następnie należy utworzyć nowego użytkownika tomcat. Dodamy tego użytkownika do grupy tomcat, z katalogu domowego /opt/tomcat (gdzie będziemy instalować Tomcat), a także z powłoki /bin/false (nikt nie będzie mógł wejść na konto):

sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

Teraz, kiedy nasz użytkownik jest skonfigurowany, możemy pobrać i zainstalować Tomcat.

Krok 3: Instalacja Tomcat

Najlepszym sposobem, aby zainstalować Tomcat 8, jest pobranie najnowszej wersji binarnej, a następnie konfiguracja go ręcznie.

Znajdź ostatnią wersję Tomcat 8 na stronie Tomcat 8 Downloads. W chwili pisania tego artykułu, najnowsza wersja to 8.5.5, ale należy użyć nowszej wersji stabilnej, jeśli jest ona dostępna. W sekcji Binary Distributions, a następnie z listy Core, skopiuj link “tar.gz“.

Dalej przejdź do katalogu /tmp na serwerze. Jest to dobry wybór katalogu dla ściągnięcia efemerycznych rzeczy, takich jak archiwum Tomcat, który nam się nie przyda po pobraniu zawartości Tomcat:

cd /tmp

Użyj curl do pobrania linku skopiowanego ze strony internetowej Tomcat:

curl -O https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.87/bin/apache-tomcat-8.5.87.tar.gz

Będziemy instalować Tomcat do katalogu /opt/tomcat. Utwórz katalog, a następnie rozpakuj archiwum za pomocą następnych poleceń:

sudo mkdir /opt/tomcat

sudo tar xzvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1

Dalej możemy skonfigurować odpowiednie uprawnienia użytkownika dla naszej instalacji.

Krok 4: Aktualizacja uprawnień

Użytkownik tomcat, którego utworzyliśmy, musi mieć dostęp do instalacji Tomcat.

Przejdź do katalogu, w którym została rozpakowana instalacja Tomcat:

cd /opt/tomcat

Ustaw dla grupy tomcat prawo własności do całego katalogu instalacyjnego:

sudo chgrp -R tomcat /opt/tomcat

Następnie ustaw dla grupy tomcat uprawnienia do odczytu katalogu conf oraz jego zawartości:

sudo chmod -R g+r conf

sudo chmod g+x conf

Zrób użytkownika tomcat właścicielem katalogów webapps, work, temp, i logs:

sudo chown -R tomcat webapps/ work/ temp/ logs/

Teraz, gdy odpowiednie uprawnienia są ustawione, możemy utworzyć plik systemd  do zarządzania procesem Tomcat.

Krok 5: Tworzenie Systemd Service File

Chcemy mieć możliwość uruchomienia Tomcat jako usługi, więc będziemy konfigurować plik usług systemd.

Tomcat musi wiedzieć, gdzie jest zainstalowana Java. Ścieżka zazwyczaj jest określana jako “JAVA_HOME“. Najprostszym sposobem, aby znaleźć tą lokalizację, jest uruchomienie tego polecenia:

sudo update-java-alternatives –l

Output
java-1.8.0-openjdk-amd64       1081       /usr/lib/jvm/java-1.8.0-openjdk-amd64

Prawidłowa zmienna JAVA_HOME może być wykonana poprzez wyjście z ostatniej kolumny (zaznaczone na czerwono) i dodanie /jre na końcu. Biorąc pod uwagę powyższy przykład, prawidłowa zmienna JAVA_HOME dla tego serwera będzie:

JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre

Twoja zmienna JAVA_HOME może być inna.

Dzięki tej informacji, możemy utworzyć plik usług systemd. Otwórz plik o nazwie tomcat.service w katalogu /etc/systemd/system wpisując:

sudo nano /etc/systemd/system/tomcat.service

Wklej następującą zawartość do pliku usług. Zmień wartość zmiennej środowiskowej JAVA_HOME, jeśli to konieczne, aby dopasować do wartości, która została znaleziona w systemie. Można również zmodyfikować ustawienia alokacji pamięci, które są określone w CATALINA_OPTS:

/etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=mult.target

Gdy skończysz, zapisz i zamknij plik.

Następnie ponownie uruchom systemd daemon:

udo systemctl daemon-reload

Uruchom usługę Tomcat wpisując:

sudo systemctl start tomcat

Podwójnie sprawdź, że Tomcat został uruchomiony bez błędów, wpisując:

sudo systemctl status tomcat

Krok 6: Ustawienie zapory i testowanie serweru Tomcat

Teraz, gdy usługa Tomcat jest uruchomiona, możemy ją przetestować, aby upewnić się, że domyślna strona powitalna jest dostępna.

Zanim to zrobimy, musimy ustawić zaporę, aby umożliwić nasze żądania w celu  uzyskania dostępu do usługi. Jeśli są spełnione niezbędne warunki, zapora ufw będzie włączona.

Tomcat używa portu 8080 dla akceptacji zwykłych żądań. Można umożliwić ruch na tym porcie wpisując:

sudo ufw allow 8080

Ze zmodyfikowaną zaporą, można uzyskać dostęp do domyślnej strony powitalnej, wpisując w przeglądarce internetowej adres IP lub domenę, a następnie :8080 :

http://server_domain_or_IP:8080

W dodatku do innych informacji zobaczysz domyślną stronę powitalną Tomcat.  Jednak, jeśli klikniesz link, na przykład, Manager aplikacji będzie odmowa dostępu. Możemy skonfigurować dostęp.

Teraz włączymy plik usług tak, że Tomcat będzie automatycznie się uruchamiać przy starcie systemu:

sudo systemctl enable tomcat

Krok 7: Konfiguracja Tomcat Web Management Interface

Aby korzystać z menedżera aplikacji internetowych, który jest dostępny z Tomcat, musimy dodać logowanie na nasz serwer. Zrobimy to poprzez edycję pliku tomcat-users.xml:

sudo nano /opt/tomcat/conf/tomcat-users.xml

Będziemy chcieli dodać użytkownika, który będzie miał dostęp do manager-gui i admin-gui (aplikacje internetowe, które pochodzą z Tomcat). Można to zrobić poprzez określenie użytkownika, podobnie jak na poniższym przykładzie, między tagami tomcat-users. Pamiętaj zmienić nazwę użytkownika i ustawić bezpieczne hasło:

tomcat-users.xml — Admin User
<tomcat-users . . .>

<user username="admin" password="password" roles="manager-gui,admin-gui"/>

</tomcat-users>

Zapisz i zamknij plik po zakończeniu.

Domyślnie nowsze wersje Tomcat ograniczają dostęp dla aplikacji Manager i Host Manager do połączenia z samego serwera. Ponieważ instalujemy na komputerze zdalnym, prawdopodobnie będziesz chciał zmienić lub usunąć to ograniczenie. Aby zmienić ograniczenia adresu IP, otwórz odpowiednie pliki context.xml.

Dla aplikacji Manager wpisz:

sudo nano /opt/tomcat/webapps/manager/META-INF/context.xml

Dla aplikacji Host Manager wpisz:

sudo nano /opt/tomcat/webapps/host-manager/META-INF/context.xml

Wewnątrz wykomentuj ograniczenia adresów IP w celu umożliwienia połączenia z dowolnego miejsca. Ewentualnie, jeśli chcesz umożliwić dostęp tylko do połączeń pochodzących z własnego adresu IP, można dodać swój publiczny adres IP do listy:

context.xml files for Tomcat webapps
<Context antiResourceLocking="false" privileged="true" >
  <!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->
</Context>

Zapisz i zamknij pliki po zakończeniu.

Aby nasze zmiany zostały zastosowane, należy ponownie uruchomić usługę Tomcat:

sudo systemctl restart tomcat

Krok 8: Dostęp do interfejsu WWW

Teraz, kiedy stworzyliśmy użytkownika, możemy ponownie uzyskać dostęp do interfejsu zarządzania siecią w przeglądarce internetowej. Po raz kolejny, można wyświetlić właściwy interfejs wpisując nazwę domeny lub adres IP serwera, a następnie port 8080 w przeglądarce:

http://server_domain_or_IP:8080

Strona będzie wyglądać tak:

Tomcat_startpage

Spójrzmy na App Manager dostępną przez link lub

http://server_domain_or_IP/manager/html

Należy wprowadzić dane konta, które zostały dodane do pliku tomcat-users.xml. Następnie powinieneś zobaczyć stronę, która wygląda tak:Tomcat_appmanager

Web Application Manager służy do zarządzania aplikacjami Java. Aplikację można uruchamiać, zatrzymywać, uruchamiać ponownie, wdrażać i usuwać. Można również przeprowadzić diagnostykę aplikacji (tzn. znaleźć wyciek pamięci).  I wreszcie, informacja o serwerze dostępna jest na samym dole tej strony.

Teraz spójrzmy na Host Manager dostępny przez link lub

http://server_domain_or_IP/host-manager/html/Tomcat_hostmanager

Na stronie Virtual Host Manager można dodać wirtualne hosty, aby obsługiwać swoje aplikacje.

Wniosek

Instalacja Tomcat zakończona! Teraz możesz projektować Swoje własne aplikacje internetowe na Java!

Obecnie instalacja Tomcat jest funkcjonalna, ale całkowicie niezaszyfrowana. Oznacza to, że wszystkie dane, w tym wrażliwe, takie jak hasła, są przesyłane w postaci zwykłego tekstu, który może być przechwycone i odczytane innymi  użytkownikami w Internecie. Aby tego uniknąć, zaleca się szyfrowanie połączenia za pomocą protokołu SSL.