Ставим tomcat, настраиваем apache + jk коннектор

28 October 2015
#Archlinux#Java#Linux#Tomcat

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

Данный текст написан новичком в настройке 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

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