How to setup Tomcat 9 on Java OpenJDK 11 and Apache proxy_ajp on Ubuntu 18.04 LTS - jbilander/HowTos GitHub Wiki

How to setup Tomcat 9 on Java OpenJDK 11 and Apache proxy_ajp on Ubuntu 18.04 LTS

first become root:

jbilander@zeus:~$ sudo -s
[sudo] password for jbilander:
root@zeus:~#

Rather than install OpenJDK 11 with apt install default-jdk, I will use a prebuilt binary from adoptopenjdk.net. I prefer to use the smaller JRE (39 MB). The downside with using the JRE rather than the full JDK is that running Tomcat in debug mode is not possible with only the JRE, however that is perfectly fine with me on a production server.

Download the latest JRE, version 11.28 at the time of writing:

root@zeus:~# cd /opt/
root@zeus:/opt# wget -c "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11+28/OpenJDK11-jre_x64_linux_hotspot_11_28.tar.gz"

HTTP request sent, awaiting response... 200 OK
Length: 41597311 (40M) [application/octet-stream]
Saving to: β€˜OpenJDK11-jre_x64_linux_hotspot_11_28.tar.gz’

OpenJDK11-jre_x64_linux_hotspot_ 100%[==========================================================>]  39.67M  10.3MB/s    in 4.3s

2019-01-17 18:54:59 (9.30 MB/s) - β€˜OpenJDK11-jre_x64_linux_hotspot_11_28.tar.gz’ saved [41597311/41597311]

root@zeus:/opt# ls -al
total 40746
drwxr-xr-x  2 root root        3 Jan 17 18:54 .
drwxr-xr-x 25 root root       29 Dec 27 17:44 ..
-rw-r--r--  1 root root 41597311 Oct  3 07:12 OpenJDK11-jre_x64_linux_hotspot_11_28.tar.gz

Unpack the file:

root@zeus:/opt# tar xvzf OpenJDK11-jre_x64_linux_hotspot_11_28.tar.gz

root@zeus:/opt# ls -al
total 40762
drwxr-xr-x  3 root root        4 Jan 17 18:57 .
drwxr-xr-x 25 root root       29 Dec 27 17:44 ..
drwxrwxr-x  7  500  500        8 Oct  2 21:45 jdk-11+28-jre
-rw-r--r--  1 root root 41597311 Oct  3 07:12 OpenJDK11-jre_x64_linux_hotspot_11_28.tar.gz

Set root user/group to be the owner of this folder and files recursively:

root@zeus:/opt# chown -R root:root jdk-11+28-jre/
root@zeus:/opt# ls -al
total 40763
drwxr-xr-x  3 root root        5 Jan 17 19:11 .
drwxr-xr-x 25 root root       29 Dec 27 17:44 ..
drwxrwxr-x  7 root root        8 Oct  2 21:45 jdk-11+28-jre
-rw-r--r--  1 root root 41597311 Oct  3 07:12 OpenJDK11-jre_x64_linux_hotspot_11_28.tar.gz

Now create a symbolic link to this JRE so that we easily can upgrade later on just by altering the link:

root@zeus:/opt# ln -s jdk-11+28-jre server_jre
root@zeus:/opt# ls -al
total 40763
drwxr-xr-x  3 root root        5 Jan 17 19:11 .
drwxr-xr-x 25 root root       29 Dec 27 17:44 ..
drwxrwxr-x  7 root root        8 Oct  2 21:45 jdk-11+28-jre
-rw-r--r--  1 root root 41597311 Oct  3 07:12 OpenJDK11-jre_x64_linux_hotspot_11_28.tar.gz
lrwxrwxrwx  1 root root       13 Jan 17 19:11 server_jre -> jdk-11+28-jre

Check the java version:

root@zeus:/opt# ./server_jre/bin/java -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment AdoptOpenJDK (build 11+28)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11+28, mixed mode)

Now download the latest binary distribution for Tomcat 9 (9.0.14 at the time of writing)

root@zeus:/opt# wget -c "http://apache.mirrors.spacedump.net/tomcat/tomcat-9/v9.0.14/bin/apache-tomcat-9.0.14.tar.gz"

HTTP request sent, awaiting response... 200 OK
Length: 10492627 (10M) [application/x-gzip]
Saving to: β€˜apache-tomcat-9.0.14.tar.gz’

apache-tomcat-9.0.14.tar.gz      100%[==========================================================>]  10.01M  2.83MB/s    in 3.5s

2019-01-17 19:33:51 (2.83 MB/s) - β€˜apache-tomcat-9.0.14.tar.gz’ saved [10492627/10492627]

Unpack the file:

root@zeus:/opt# tar xvzf apache-tomcat-9.0.14.tar.gz

root@zeus:/opt# ls -al
total 51148
drwxr-xr-x  4 root root        7 Jan 17 19:35 .
drwxr-xr-x 25 root root       29 Dec 27 17:44 ..
drwxr-xr-x  9 root root       16 Jan 17 19:35 apache-tomcat-9.0.14
-rw-r--r--  1 root root 10492627 Dec  6 22:37 apache-tomcat-9.0.14.tar.gz
drwxrwxr-x  7 root root        8 Oct  2 21:45 jdk-11+28-jre
-rw-r--r--  1 root root 41597311 Oct  3 07:12 OpenJDK11-jre_x64_linux_hotspot_11_28.tar.gz
lrwxrwxrwx  1 root root       13 Jan 17 19:11 server_jre -> jdk-11+28-jre

Create a symbolic link to apache-tomcat-9.0.14

root@zeus:/opt# ln -s apache-tomcat-9.0.14 tomcat

root@zeus:/opt# ls -al
total 51148
drwxr-xr-x  4 root root        8 Jan 17 19:36 .
drwxr-xr-x 25 root root       29 Dec 27 17:44 ..
drwxr-xr-x  9 root root       16 Jan 17 19:35 apache-tomcat-9.0.14
-rw-r--r--  1 root root 10492627 Dec  6 22:37 apache-tomcat-9.0.14.tar.gz
drwxrwxr-x  7 root root        8 Oct  2 21:45 jdk-11+28-jre
-rw-r--r--  1 root root 41597311 Oct  3 07:12 OpenJDK11-jre_x64_linux_hotspot_11_28.tar.gz
lrwxrwxrwx  1 root root       13 Jan 17 19:11 server_jre -> jdk-11+28-jre
lrwxrwxrwx  1 root root       20 Jan 17 19:36 tomcat -> apache-tomcat-9.0.14

Delete the tar.gz files:

root@zeus:/opt# rm -rf *.tar.gz
root@zeus:/opt# ls -al
total 35
drwxr-xr-x  4 root root  6 Jan 17 19:39 .
drwxr-xr-x 25 root root 29 Dec 27 17:44 ..
drwxr-xr-x  9 root root 16 Jan 17 19:35 apache-tomcat-9.0.14
drwxrwxr-x  7 root root  8 Oct  2 21:45 jdk-11+28-jre
lrwxrwxrwx  1 root root 13 Jan 17 19:11 server_jre -> jdk-11+28-jre
lrwxrwxrwx  1 root root 20 Jan 17 19:36 tomcat -> apache-tomcat-9.0.14

Check what we got in tomcat/bin folder:

root@zeus:/opt# cd tomcat/bin/
root@zeus:/opt/tomcat/bin# ls -al
total 1063
drwxr-x--- 2 root root     29 Jan 17 19:35 .
drwxr-xr-x 9 root root     16 Jan 17 19:35 ..
-rw-r----- 1 root root  34941 Dec  6 22:15 bootstrap.jar
-rw-r----- 1 root root  15900 Dec  6 22:15 catalina.bat
-rwxr-x--- 1 root root  24220 Dec  6 22:15 catalina.sh
-rw-r----- 1 root root   1664 Dec  6 22:17 catalina-tasks.xml
-rw-r----- 1 root root   2123 Dec  6 22:15 ciphers.bat
-rwxr-x--- 1 root root   1997 Dec  6 22:15 ciphers.sh
-rw-r----- 1 root root  25145 Dec  6 22:15 commons-daemon.jar
-rw-r----- 1 root root 207125 Dec  6 22:15 commons-daemon-native.tar.gz
-rw-r----- 1 root root   2040 Dec  6 22:15 configtest.bat
-rwxr-x--- 1 root root   1922 Dec  6 22:15 configtest.sh
-rwxr-x--- 1 root root   8513 Dec  6 22:15 daemon.sh
-rw-r----- 1 root root   2091 Dec  6 22:15 digest.bat
-rwxr-x--- 1 root root   1965 Dec  6 22:15 digest.sh
-rw-r----- 1 root root   3606 Dec  6 22:15 makebase.bat
-rwxr-x--- 1 root root   3382 Dec  6 22:15 makebase.sh
-rw-r----- 1 root root   3460 Dec  6 22:15 setclasspath.bat
-rwxr-x--- 1 root root   3708 Dec  6 22:15 setclasspath.sh
-rw-r----- 1 root root   2020 Dec  6 22:15 shutdown.bat
-rwxr-x--- 1 root root   1902 Dec  6 22:15 shutdown.sh
-rw-r----- 1 root root   2022 Dec  6 22:15 startup.bat
-rwxr-x--- 1 root root   1904 Dec  6 22:15 startup.sh
-rw-r----- 1 root root  47262 Dec  6 22:15 tomcat-juli.jar
-rw-r----- 1 root root 418183 Dec  6 22:15 tomcat-native.tar.gz
-rw-r----- 1 root root   4574 Dec  6 22:15 tool-wrapper.bat
-rwxr-x--- 1 root root   5515 Dec  6 22:15 tool-wrapper.sh
-rw-r----- 1 root root   2026 Dec  6 22:15 version.bat
-rwxr-x--- 1 root root   1908 Dec  6 22:15 version.sh

OK, no need for bat files here since we are on linux, let's remove them:

root@zeus:/opt/tomcat/bin# rm -rf *.bat
root@zeus:/opt/tomcat/bin# ls -al
total 1002
drwxr-x--- 2 root root     19 Jan 17 19:41 .
drwxr-xr-x 9 root root     16 Jan 17 19:35 ..
-rw-r----- 1 root root  34941 Dec  6 22:15 bootstrap.jar
-rwxr-x--- 1 root root  24220 Dec  6 22:15 catalina.sh
-rw-r----- 1 root root   1664 Dec  6 22:17 catalina-tasks.xml
-rwxr-x--- 1 root root   1997 Dec  6 22:15 ciphers.sh
-rw-r----- 1 root root  25145 Dec  6 22:15 commons-daemon.jar
-rw-r----- 1 root root 207125 Dec  6 22:15 commons-daemon-native.tar.gz
-rwxr-x--- 1 root root   1922 Dec  6 22:15 configtest.sh
-rwxr-x--- 1 root root   8513 Dec  6 22:15 daemon.sh
-rwxr-x--- 1 root root   1965 Dec  6 22:15 digest.sh
-rwxr-x--- 1 root root   3382 Dec  6 22:15 makebase.sh
-rwxr-x--- 1 root root   3708 Dec  6 22:15 setclasspath.sh
-rwxr-x--- 1 root root   1902 Dec  6 22:15 shutdown.sh
-rwxr-x--- 1 root root   1904 Dec  6 22:15 startup.sh
-rw-r----- 1 root root  47262 Dec  6 22:15 tomcat-juli.jar
-rw-r----- 1 root root 418183 Dec  6 22:15 tomcat-native.tar.gz
-rwxr-x--- 1 root root   5515 Dec  6 22:15 tool-wrapper.sh
-rwxr-x--- 1 root root   1908 Dec  6 22:15 version.sh

root@zeus:/opt/tomcat/bin# cd
root@zeus:~#

Create Tomcat User:

For security purposes, Tomcat should be run as an unprivileged user (i.e. not root). We will create a new user and group that will run the Tomcat service.

First, create a new tomcat group:

root@zeus:~# groupadd tomcat

Next, create a new tomcat user. We'll make this user a member of the tomcat group, with a home directory of /opt/tomcat, and with a shell of /bin/false (so nobody can log into the account):

root@zeus:~# useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

The tomcat user that we set up needs to have access to the Tomcat installation. We'll set that up now.

Give the tomcat group ownership over the entire installation directory:

root@zeus:~# chgrp -R tomcat /opt/apache-tomcat-9.0.14

Next, give the tomcat group read access to the conf directory and all of its contents, and write/execute access to the directory itself:

root@zeus:~# chmod -R g+r /opt/apache-tomcat-9.0.14/conf
root@zeus:/# chmod g+wx /opt/apache-tomcat-9.0.14/conf

The reason for giving it wx permission for the directory itself is otherwise we would get this in the catalina.out log:

SEVERE [main] org.apache.catalina.startup.HostConfig.beforeStart Unable to create directory for deployment: [/opt/apache-tomcat-9.0.14/conf/Catalina/localhost]

Make the tomcat user the owner of the webapps, work, temp, and logs directories:

root@zeus:~# cd /opt/tomcat
root@zeus:/opt/tomcat# chown -R tomcat webapps/ work/ temp/ logs/

It should now look like this:

root@zeus:/opt/tomcat# ls -al
total 172
drwxr-xr-x 9 root   tomcat    16 Jan 17 19:35 .
drwxr-xr-x 4 root   root       6 Jan 17 19:39 ..
drwxr-x--- 2 root   tomcat    19 Jan 17 19:41 bin
-rw-r----- 1 root   tomcat 19203 Dec  6 22:17 BUILDING.txt
drwxrwx--- 2 root   tomcat    12 Dec  6 22:17 conf
-rw-r----- 1 root   tomcat  6095 Dec  6 22:17 CONTRIBUTING.md
drwxr-x--- 2 root   tomcat    32 Jan 17 19:35 lib
-rw-r----- 1 root   tomcat 57092 Dec  6 22:17 LICENSE
drwxr-x--- 2 tomcat tomcat     2 Dec  6 22:14 logs
-rw-r----- 1 root   tomcat  2333 Dec  6 22:17 NOTICE
-rw-r----- 1 root   tomcat  3255 Dec  6 22:17 README.md
-rw-r----- 1 root   tomcat  6854 Dec  6 22:17 RELEASE-NOTES
-rw-r----- 1 root   tomcat 16262 Dec  6 22:17 RUNNING.txt
drwxr-x--- 2 tomcat tomcat     3 Jan 17 19:35 temp
drwxr-x--- 7 tomcat tomcat     7 Dec  6 22:15 webapps
drwxr-x--- 2 tomcat tomcat     2 Dec  6 22:14 work

Now that the proper permissions are set up, we can create a systemd service file to manage the Tomcat process.

Create a systemd Service File:

root@zeus:/opt/tomcat# vi /etc/systemd/system/tomcat.service

Put these lines in the file:

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JRE_HOME=/opt/server_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=multi-user.target

When you are finished, save and close the file.

Please note: If you use the JDK you should set JAVA_HOME, if JRE you should set JRE_HOME

from catalina.sh script:

#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" argument.

Next, reload the systemd daemon so that it knows about our service file:

root@zeus:/opt/tomcat# systemctl daemon-reload

Now before we start tomcat we will disable the http connector that is enabled by default for port 8080. Edit conf/server.xml and comment out the Connector at line 69. Also add the localhost ipv4 address to the ajp Connector at line 116:

root@zeus:/opt/tomcat# vi conf/server.xml

<!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> -->

<Connector address="127.0.0.1" port="8009" protocol="AJP/1.3" redirectPort="8443" />

When you are finished, save and close the file.

Now, in order to access the tomcat manager site we will have to edit the tomcat-users.xml file:

root@zeus:/opt/tomcat# vi conf/tomcat-users.xml

Put the following inside the tomcat-users tag, replace with your prefered username and password

<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>

By default the tomcat Manager is only accessible from a browser running on the same machine as Tomcat. We will modify this restriction temporarily to allow for our client's IP. We need to edit the Manager's context.xml file. For Tomcat v8.5.4 and above, the file webapps/manager/META-INF/context.xml has to be adjusted:

Looking at the context.xml file:

<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>

I change this file to allow for 192.X.X.X addresses, you can also comment out the whole Valve tag to allow for all addresses (not recommended):

root@zeus:/opt/tomcat# vi webapps/manager/META-INF/context.xml

<Context antiResourceLocking="false" privileged="true" >
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="192\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>

When you are finished, save and close the file.

Start Tomcat:

root@zeus:/opt/tomcat# systemctl start tomcat

root@zeus:/opt/tomcat# systemctl --no-pager status tomcat
● tomcat.service - Apache Tomcat Web Application Container
   Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-01-17 21:07:17 CET; 11s ago
  Process: 5810 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
    Tasks: 42 (limit: 4915)
   CGroup: /system.slice/tomcat.service
           └─5825 /opt/server_jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true …

Jan 17 21:07:17 zeus systemd[1]: Starting Apache Tomcat Web Application Container...
Jan 17 21:07:17 zeus startup.sh[5810]: Tomcat started.
Jan 17 21:07:17 zeus systemd[1]: Started Apache Tomcat Web Application Container.
root@zeus:/opt/tomcat#

With the command pstree we can check how tomcat forks children processes:

root@zeus:/opt/tomcat# pstree -p | grep java

β”œβ”€java(23800)─┬─{java}(23804)
β”‚             β”œβ”€{java}(23807)
β”‚             β”œβ”€{java}(23808)
β”‚             β”œβ”€{java}(23809)
β”‚             β”œβ”€{java}(23810)
β”‚             β”œβ”€{java}(23811)
β”‚             β”œβ”€{java}(23812)
β”‚             β”œβ”€{java}(23813)
β”‚             β”œβ”€{java}(23814)
β”‚             β”œβ”€{java}(23815)
β”‚             β”œβ”€{java}(23816)
β”‚             β”œβ”€{java}(23817)
β”‚             β”œβ”€{java}(23818)
β”‚             β”œβ”€{java}(23822)
β”‚             β”œβ”€{java}(23828)
β”‚             β”œβ”€{java}(23831)
β”‚             β”œβ”€{java}(23832)
β”‚             β”œβ”€{java}(23833)
β”‚             β”œβ”€{java}(23834)
β”‚             β”œβ”€{java}(23835)
β”‚             β”œβ”€{java}(23836)
β”‚             β”œβ”€{java}(23837)
β”‚             β”œβ”€{java}(23838)
β”‚             β”œβ”€{java}(23839)
β”‚             β”œβ”€{java}(23840)
β”‚             β”œβ”€{java}(23842)
β”‚             β”œβ”€{java}(23853)
β”‚             β”œβ”€{java}(23854)
β”‚             β”œβ”€{java}(23855)
β”‚             β”œβ”€{java}(4990)
β”‚             β”œβ”€{java}(5347)
β”‚             β”œβ”€{java}(5528)
β”‚             β”œβ”€{java}(6119)
β”‚             β”œβ”€{java}(6516)
β”‚             β”œβ”€{java}(6794)
β”‚             β”œβ”€{java}(7084)
β”‚             β”œβ”€{java}(7524)
β”‚             β”œβ”€{java}(8108)
β”‚             └─{java}(8475)

To enable tomcat service on boot up run:

root@zeus:/opt/tomcat# systemctl enable tomcat
Created symlink /etc/systemd/system/multi-user.target.wants/tomcat.service β†’ /etc/systemd/system/tomcat.service.

Now we will enable the proxy_ajp module in Apache. I presume you have apache up and running already otherwise take a look here: How to install Apache and configure virtualhosts with http and https on Ubuntu 18.04 LTS

Enable proxy_ajp for Apache:

root@zeus:/opt/tomcat# a2enmod proxy_ajp
Considering dependency proxy for proxy_ajp:
Enabling module proxy.
Enabling module proxy_ajp.
To activate the new configuration, you need to run:
  systemctl restart apache2
root@zeus:/opt/tomcat#

Now edit your vhosts-default.conf file:

root@zeus:/opt/tomcat# vi /etc/apache2/sites-enabled/vhosts-default.conf

Add this line...

ProxyPass "/manager" "ajp://127.0.0.1:8009/manager"

...so that it looks like this now:

<VirtualHost *:80>
        ServerName www.example.com
        DocumentRoot /var/www/example
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        <Directory /var/www/example>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>
        ProxyPass "/manager" "ajp://127.0.0.1:8009/manager"
</VirtualHost>

This ProxyPass directive can be set in the virtualhost for https also should you want to.

Note that usually no ProxyPassReverse directive is necessary. The AJP request includes the original host header given to the proxy, and the application server can be expected to generate self-referential headers relative to this host, so no rewriting is necessary.

Restart apache for the changes to take effect:

root@zeus:/opt/tomcat# systemctl restart apache2

Now point your browser to http://www.example.com/manager

Undeploy / /docs /examples by clicking Undeploy on them

Checking status in the manager:

OK, almost done now. However, I only wanted that ProxyPass manager mapping to be temporary set so we delete it and restart apache. Also undo the changes we made to webapps/manager/META-INF/context.xml and conf/tomcat-users.xml.

For future deployments I will use the autodeploy feature, just copy the war file into the webapps folder, and then make a new ProxyPass directive with mapping set to the deployed apps context path.

In conf/server.xml we can see that the autodeploy feature is enabled by default...

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

Looking at logs/catalina.out we can see the line:

17-Jan-2019 22:50:00.599 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]

We can ignore this message. The library referred to is bundled into an OS specific libtcnative.so (or dll for windows) loaded via JNI. It allows Tomcat to use OS functionalities not provided in the Java Runtime (such as sendfile, epoll, OpenSSL, OS level functionality (random number generation, system status, etc), and native process handling (shared memory, NT pipes and Unix sockets). Tomcat will run just fine without it, these features allows making Tomcat a general purpose webserver. We however only use Tomcat as a backend java web container working together with the Apache-webserver, hence we ignore this message.

To build and deploy your own Hello World webapp follow this link:
HelloWorld from Java jsp with OpenJDK 11 packaged Maven war and deploy on Tomcat 9

That's all folks!!!


Example logs/catalina.out for tomcat startup:

18-Jan-2019 12:29:24.393 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.14
18-Jan-2019 12:29:24.397 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Dec 6 2018 21:13:53 UTC
18-Jan-2019 12:29:24.398 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.14.0
18-Jan-2019 12:29:24.398 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
18-Jan-2019 12:29:24.399 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            4.15.0-43-generic
18-Jan-2019 12:29:24.399 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
18-Jan-2019 12:29:24.399 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/jdk-11+28-jre
18-Jan-2019 12:29:24.399 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11+28
18-Jan-2019 12:29:24.400 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
18-Jan-2019 12:29:24.400 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /opt/apache-tomcat-9.0.14
18-Jan-2019 12:29:24.400 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /opt/apache-tomcat-9.0.14
18-Jan-2019 12:29:24.403 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
18-Jan-2019 12:29:24.403 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
18-Jan-2019 12:29:24.404 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
18-Jan-2019 12:29:24.404 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties
18-Jan-2019 12:29:24.404 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
18-Jan-2019 12:29:24.404 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.awt.headless=true
18-Jan-2019 12:29:24.405 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.security.egd=file:/dev/./urandom
18-Jan-2019 12:29:24.405 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
18-Jan-2019 12:29:24.405 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
18-Jan-2019 12:29:24.405 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
18-Jan-2019 12:29:24.405 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xms512M
18-Jan-2019 12:29:24.406 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx1024M
18-Jan-2019 12:29:24.406 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+UseParallelGC
18-Jan-2019 12:29:24.406 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
18-Jan-2019 12:29:24.406 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/opt/tomcat
18-Jan-2019 12:29:24.407 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/opt/tomcat
18-Jan-2019 12:29:24.407 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/opt/tomcat/temp
18-Jan-2019 12:29:24.407 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]
18-Jan-2019 12:29:24.456 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-127.0.0.1-8009"]
18-Jan-2019 12:29:24.495 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [648] milliseconds
18-Jan-2019 12:29:24.568 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
18-Jan-2019 12:29:24.569 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.14]
18-Jan-2019 12:29:24.578 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/opt/apache-tomcat-9.0.14/webapps/host-manager]
18-Jan-2019 12:29:25.004 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/opt/apache-tomcat-9.0.14/webapps/host-manager] has finished in [426] ms
18-Jan-2019 12:29:25.005 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/opt/apache-tomcat-9.0.14/webapps/manager]
18-Jan-2019 12:29:25.037 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/opt/apache-tomcat-9.0.14/webapps/manager] has finished in [32] ms
18-Jan-2019 12:29:25.043 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-127.0.0.1-8009"]
18-Jan-2019 12:29:25.055 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [558] milliseconds
⚠️ **GitHub.com Fallback** ⚠️