# Setup GeoServer Let’s install Tomcat and edit the default startup script. ``` sudo apt install tomcat9 -y sudo vim /etc/systemd/system/tomcat9.service ``` 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] Type=forking User=tomcat Group=tomcat Environment="JAVA_HOME=/usr/lib/jvm/default-java" Environment="CATALINA_BASE=/var/lib/tomcat9" Environment="CATALINA_HOME=/usr/share/tomcat9" Environment="CATALINA_PID=/tmp/tomcat.pid" # Security ReadWritePaths=/opt/data/geoserver_data ReadWritePaths=/var/log/geoserver ReadWritePaths=/opt/data/geoserver_cache ExecStart=/usr/share/tomcat9/bin/startup.sh ExecStop=/usr/share/tomcat9/bin/shutdown.sh [Install] WantedBy=multi-user.target ``` Reload the service ``` sudo rm -Rf /etc/systemd/system/tomcat9.service.d sudo systemctl daemon-reload ``` Create the setenv script as follows ``` sudo vim /usr/share/tomcat9/bin/setenv.sh ``` Edit the setenv script with the following content: ``` GEOSERVER_DATA_DIR="/opt/data/geoserver_data/data" GEOSERVER_LOG_LOCATION="/var/log/geoserver/geoserver.log" GEOWEBCACHE_CACHE_DIR="/opt/data/geoserver_cache" GEOFENCE_DIR="${GEOSERVER_DATA_DIR}/geofence" TIMEZONE="UTC" JAVA_OPTS="-server -Xms1024m -Xmx1024m -Djava.awt.headless=true -Dgwc.context.suffix=gwc -Dfile.encoding=UTF8 -Duser.timezone=${TIMEZONE} -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}" ``` Make the setenv script executable: ``` sudo chmod +x /usr/share/tomcat9/bin/setenv.sh ``` Create the Directory Structure and Install the needed packages Stop running Tomcat for GeoServer provisioning ``` sudo 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.24.4/geonode-geoserver-ext-web-app-data.zip" -O data-2.24.4.zip sudo unzip data-2.24.4.zip ``` Set the GeoServer directory ownership ``` sudo chown -R tomcat: /var/lib/tomcat9 sudo chown -R tomcat: /usr/share/tomcat9 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 downloading the war file ``` cd /opt && sudo mkdir -p geoserver && cd geoserver ``` Install the GeoServer war ``` sudo wget --no-check-certificate "https://artifacts.geonode.org/geoserver/2.24.4/geoserver.war" -O geoserver.war sudo mv geoserver.war /var/lib/tomcat9/webapps ``` Update the tomcat shutdown port ``` sudo vim /var/lib/tomcat9/conf/server.xml ``` ```xml ``` Start Tomcat9 ``` sudo systemctl start tomcat9 ``` Check if GeoServer has started by going to http://localhost:8080/geoserver in the browser. ## Troubleshooting If Tomcat is not starting GeoServer due to an error containing this snippet 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.