Setup GeoServer¶
Let’s install Tomcat and edit the default startup script.
sudo apt install tomcat9 -y
sudo systemctl edit tomcat9
Edit the startup script with the following content:
[Unit]
Description=Apache Tomcat Server
After=syslog.target network.target
RequiresMountsFor=/var/log/geoserver /opt/data/geoserver_data /opt/data/geoserver_cache
[Service]
# Configuration
Environment="JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/"
Environment="GEOSERVER_DATA_DIR=/opt/data/geoserver_data"
Environment="GEOSERVER_LOG_LOCATION=/var/log/geoserver/geoserver.log"
Environment="GEOWEBCACHE_CACHE_DIR=/opt/data/geoserver_cache"
Environment="GEOFENCE_DIR=${GEOSERVER_DATA_DIR}/geofence"
Environment="TIMEZONE=UTC"
Environment="JAVA_OPTS='-server \
-Djava.awt.headless=true \
-Dorg.geotools.shapefile.datetime=false \
-XX:+UseParallelGC \
-XX:ParallelGCThreads=4 \
-Dfile.encoding=UTF8 \
-Duser.timezone=${TIMEZONE} \
-Xms1024m \
-Xmx2048m \
-Djavax.servlet.request.encoding=UTF-8 \
-Djavax.servlet.response.encoding=UTF-8 \
-DGEOSERVER_CSRF_DISABLED=true \
-DPRINT_BASE_URL=http://localhost:8080/geoserver/pdf \
-DGEOSERVER_DATA_DIR=${GEOSERVER_DATA_DIR} \
-DGEOSERVER_LOG_LOCATION=${GEOSERVER_LOG_LOCATION} \
-Dgeofence.dir=${GEOFENCE_DIR} \
-DGEOWEBCACHE_CACHE_DIR=${GEOWEBCACHE_CACHE_DIR}'"
# Security
ReadWritePaths=/opt/data/geoserver_data
ReadWritePaths=/var/log/geoserver
ReadWritePaths=/opt/data/geoserver_cache
[Install]
WantedBy=multi-user.target
Create the Directory Structure and Install Needed Packages
Stop running tomcat for geoserver provisioning
systemctl stop tomcat9
Create the geoserver directories
sudo mkdir -p /opt/data/geoserver_data
sudo mkdir -p /var/log/geoserver
sudo mkdir -p /opt/data/geoserver_cache
Set the directory permissions
sudo chmod 0755 /opt/data/geoserver_data
sudo chmod 2750 /var/log/geoserver
sudo chmod 0750 /opt/data/geoserver_cache
Install the data directory template
cd /opt/data/geoserver_data
sudo wget --no-check-certificate "https://artifacts.geonode.org/geoserver/2.18.x/geonode-geoserver-ext-web-app-data.zip" -O data-2.18.3.zip
sudo unzip data-2.18.3.zip
Set geoserver directory ownership
sudo chown -R tomcat:tomcat /opt/data/geoserver_data
sudo chown -R tomcat:adm /var/log/geoserver
sudo chown -R tomcat:tomcat /opt/data/geoserver_cache
Temporary placeholder for download war file
cd /opt && sudo mkdir -p geoserver && cd geoserver
Install geoserver war
sudo wget --no-check-certificate "https://artifacts.geonode.org/geoserver/2.18.x/geoserver.war" -O geoserver.war
sudo mv geoserver.war /var/lib/tomcat9/webapps
Start Tomcat9
sudo systemctl start tomcat9
Check if GeoServer started by pointing the browser to http://localhost:8080/geoserver
Troubleshooting¶
If tomcat is not starting GeoServer due to an error containing this snipped of stacktrace
Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/geoserver] due to a StackOverflowError.
Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies.
The class hierarchy being processed was [org.bouncycastle.asn1.ASN1EncodableVector>org.bouncycastle.asn1.DEREncodableVector->org.bouncycastle.asn1.ASN1EncodableVector]
you may need to edit the catalina.properties
file:
sudo sed -i -e 's/xom-\*\.jar/xom-\*\.jar,bcprov\*\.jar/g' /var/lib/tomcat9/conf/catalina.properties
and restart tomcat.