Предупреждение

Данный текст написан новичком в настройке tomcat да и в целом Java.

Установка

Установка достаточно простая, заходим в консоль и ставим tomcat. Надеюсь у вас стоит Java и apache? ;)

sudo pacman -Suy tomcat8 tomcat-native

Включаем сервис

systemctl enable tomcat8.service

Стартуем ...

sudo systemctl start tomcat8.service

Коннектор JK я буду ставить из aur:

yaourt -S mod_jk

На этом собственно всё. Заходим на http://localhost:8080 проверять работает ли tomcat.
Если всё в порядке, то вы должны увидеть что-то вроде этого

1_3

Настройка

Тут я напишу о простой настройке, не вникая в подробности.

По умолчанию файлы конфигурации хранятся в /etc/tomcat8/.
Первым делом настроим пользователей. А то вы наверное уже потыкали кнопочки Server Status, Manager App, а там просят какой то пароль? =)

Открываем tomcat-users.xml

sudo nano /etc/tomcat8/tomcat-users.xml

И приводи его к такому виду:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">

  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="tomcatpswd" roles="manager-gui,admin-gui"/>
</tomcat-users>

И не забываем сменить username и password!

//Вот теперь можно пробежаться по кнопочкам Server Status, Manager App, Host Manager. Но перед этим лучше рестартонуть сервер. sudo systemctl restart tomcat8.service хотя пока рано. Но вдруг не терпится)//

Теперь некоторые настройки сервера. Лучше предварительно сделать бэкап файла server.xml

И заменить его содержимое следующими настройками:

sudo nano /etc/tomcat8/server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">

    <Connector port="8487" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

      <Host name="java.local" appBase="/mnt/raid/domains/java.local">
        <Context path="" docBase="html"/>
      </Host>

    </Engine>
  </Service>
</Server>

В этом файле я поменял порт коннектора HTTP с 8080 на 8487, т.к. 8080 достаточно популярный и часто бывает занят. Так же добавил ещё один тег Host, в котором указал путь до папки. Т.е. localhost остался, и до панели можно достучаться по адресу localhost:8487

Настроим коннектор jk.

Добавляем в файл /etc/httpd/conf/httpd.conf строчку
Include conf/extra/java-jk.conf

Теперь
LoadModule jk_module modules/mod_jk.so
к директиве LoadModule

Создадим и заполним java-jk.conf

sudo nano /etc/httpd/conf/extra/java-jk.conf

Приводим к такому виду

<IfModule jk_module>
  JkWorkersFile "/etc/httpd/conf/extra/workers.properties"
  JkLogFile "/var/log/tomcat8/mod_jk.log"
  JkLogLevel info
  JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
</IfModule>

А рядом положим worker.properties

sudo nano /etc/httpd/conf/extra/workers.properties
workers.tomcat_home=/usr/share/tomcat8
workers.java_home=/usr/lib/jvm/java-8-openjdk/

# unix stile
ps=/

worker.list=ajp13

# ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1

//Пока не знаю по какой причине, но jk мне выдавал ошибку (спасибо логам), что не может найти директорию log//
//в// /etc/httpd/. //Я ещё не разбирался, и просто создал требуемую директорию. //

Настроим vhost у apache.

<VirtualHost java.local:80>
  ServerAdmin admin@java.local
  ServerName java.local
  DocumentRoot /mnt/raid/domains/java.local/html
  ErrorLog /mnt/raid/domains/java.local/logs/error.log
  CustomLog /mnt/raid/domains/java.local/logs/access.log common
  JkMount /* ajp13
</VirtualHost>

Пропишем имя в hosts

sudo nano /etc/hosts
127.0.0.1 java.local

И перезапускаем apache и tomcat

sudo systemctl restart httpd.service
sudo systemctl restart tomcat8.service

Размещаем в нашей директории (в моём случае /mnt/raid/domains/java.local/html) тестовый html файл с именем index.html. К примеру такой:

<html>
<head>
  <title>example static</title>
</head>
<body>
  <h2>Hello, Java!</h2>
</body>
</html>

Теперь пробуем перейти на java.local

И если всё правильно, то увидим нашу надпись.

2

Видим? Значит статика работает. На этом пока всё. Кстати, не стоит забывать менять пути на свои ;)