0

Does anyone know a good guide to set up Apache2 and Tomcat8.5 on an Ubuntu 18.04? (Including the Apache Tomcat Connectors: mod_jk)

1 Answer 1

1

There are lots of guides online that go over how to accomplish each of these tasks, but it seems many of them leave out one or two steps that then lead to questions on sites like this one. That said, DigitalOcean puts out some of the better walk-throughs for common software packages.

That said, AskUbuntu isn't really a site where one drops links and walks away. Link rot is a real thing and should be avoided when possible. So, with this in mind, let's install some software.

Apache2 on Ubuntu Server 18.04

This is how one would install Apache on an up-to-date Ubuntu 18.04:

  1. Connect to the machine
  2. Update apt:
    sudo apt update
    
  3. Install Apache:
    sudo apt install apache2
    
  4. Allow Apache through the firewall by first listing applications ufw is aware of:
    sudo ufw app list
    
    This will give you something like:
    Available applications:
      Apache
      Apache Full
      Apache Secure
      OpenSSH
    
    Allow Apache:
    sudo ufw allow 'Apache'
    
    Confirm the status:
    sudo ufw status
    
    You should see something similar to this:
    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere                  
    Apache                     ALLOW       Anywhere                  
    OpenSSH (v6)               ALLOW       Anywhere (v6)             
    Apache (v6)                ALLOW       Anywhere (v6)
    
  5. Test the web server works in the browser by entering the server's IP address. You should see a stock Apache page with the Ubuntu logo and some configuration information.

Source: DigitalOcean

Install Tomcat 8.5

Tomcat 8.5 was the version available with Ubuntu 16.04 and Tomcat 9 was the version available for 18.04. That said, if you really must have 8.5 on your 18.04 server, this is how you can do it.

(Optional Steps — To be performed only if you have disconnected from the server after installing Apache)

  1. Connect to the machine
  2. Update apt
    sudo apt update
    

Now let's install Tomcat 8.5:

  1. Install the Java Development Kit:
    sudo apt-get install default-jdk
    
  2. Create a group and user for Tomcat to use:
    sudo groupadd tomcat
    sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat
    
  3. Download Tomcat 8.5 from the Apache Tomcat website. As of this writing, 8.5.65 is the most recent version. You can download this via curl:
    curl -O https://downloads.apache.org/tomcat/tomcat-8/v8.5.65/bin/apache-tomcat-8.5.65.tar.gz
    
  4. Tomcat will be saved to the /opt/tomcat directory, so let's get that set up:
    sudo mkdir /opt/tomcat
    sudo tar xzvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1
    
  5. Now let's set the permissions correctly:
    cd /opt/tomcat
    sudo chgrp -R tomcat /opt/tomcat
    sudo chmod -R g+r conf
    sudo chmod g+x conf
    sudo chown -R tomcat webapps/ work/ temp/ logs/
    
  6. Next we need to get the current location of Java:
    sudo update-java-alternatives -l
    
    You will see something like this:
    java-1.8.0-openjdk-amd64       1081       /usr/lib/jvm/java-1.8.0-openjdk-amd64
    
    The path will be needed for JAVA_HOME, which will be set in the next step.
  7. Create a systemd .service file for Tomcat using an editor of your choice:
    sudo vi /etc/systemd/system/tomcat.service
    
    Paste the following into the file:
    [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=multi-user.target
    
    Remember to change JAVA_HOME to the path from the last step, and keep /jre at the end of the path. Once done, save and close the file.
  8. Reload the systemd daemon:
    sudo systemctl daemon-reload
    
  9. Start Tomcat:
    sudo systemctl start tomcat
    
    Confirm it's working:
    sudo systemctl status tomcat
    
  10. Allow Tomcat through the firewall:
    sudo ufw allow 8080
    
    And then test the installation with http://server_domain_or_IP:8080
  11. Set Tomcat to automatically start at boot:
    sudo systemctl enable tomcat
    
  12. Now to configure the management interface. Open the configuration XML file and set a decent login and password:
    sudo vi /opt/tomcat/conf/tomcat-users.xml
    
    You'll see something like this:
    <tomcat-users ...>
        <user username="crazyTown" password="superSecretPassword!123" roles="manager-gui,admin-gui"/>
    </tomcat-users>
    
    Save the file.
  13. Restart Tomcat:
    sudo service tomcat restart
    
  14. Test the web interface again in the browser.

Source: DigitalOcean

mod_jk for Apache

This is the final step.

(Optional Steps — To be performed only if you have disconnected from the server after installing Apache)

  1. Connect to the machine

  2. Update apt

    sudo apt update
    
  3. Install mod_jk:

    sudo apt install libapache2-mod-jk
    
  4. Enable the redirect port on Tomcat:

    sudo vi /opt/tomcat/server.xml
    
  5. Uncomment the line that looks like this:

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    
  6. Create a workers.properties file for Apache:

    sudo vi /etc/apache2/workers.properties
    
  7. Paste the following into the new file:

    # Define one worker using AJP13
    worker.list=worker1
    
    # Set the properties
    worker.worker1.type=ajp13
    worker.worker1.host=localhost
    worker.worker1.port=8009
    
  8. Instruct Apache to use the file:

    sudo vi /etc/apache2/mods-available/jk.conf
    

    Find the JkWorkersFile property and set it to the file you just created:

    JkWorkersFile /etc/apache2/workers.properties
    
  9. Finally, ensure Apache passes through to Tomcat:

    sudo vi /etc/apache2/sites-enabled/000-default.conf
    

    Then add this to your <VirtualHost *:80> configuration:

    JkMount /api worker1
    
  10. Restart Tomcat and Apache:

    sudo service tomcat restart
    sudo service apache2 restart
    

Source: My endless configuration notes in Evernote ...

This should give you everything you need to get these three pieces of software working together. This was tested in a VirtualBox VM running Ubuntu Server 18.04.5 LTS.

3
  • brilliant, thank you. I will give this a try. (I will need some time implement) May 8, 2021 at 13:53
  • I think I am almost there, but I see this in my apache2 logging. "client denied by server configuration: /var/lib/tomcat8/webapps/ROOT/" And in browser "Forbidden You don't have permission to access this resource. Apache/2.4.29 (Ubuntu) Server at <mydomian> Port 80" What do you think? (my paths are different from the guide but thats ok) May 8, 2021 at 20:01
  • Yeah! "Hello world!".. ha ha. So I got it working. For some reason I had to change "JkMount /api worker1" into "JkMount /* worker1" for it all to click together. I was wondering about this "api". But any way thanks a lot for your help. I don't know if this "api" > "*" needs to be changed in the answer or if this is my situation. Thanks again. May 8, 2021 at 21:49

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .