GeoNetwork for Spatial Data Management: Best Practices

Deploying GeoNetwork: Step-by-Step Setup and Configuration

1. Overview

GeoNetwork is an open-source catalog application for managing and sharing geospatial metadata and datasets. This guide assumes a Linux server (Ubuntu 22.04 LTS), PostgreSQL/PostGIS, and GeoNetwork 4.x (Java-based). Adjust versions as needed.

2. Prerequisites

  • Ubuntu 22.04 (or similar Linux)
  • 4 GB+ RAM (8 GB recommended for production)
  • Java 11 or 17 (OpenJDK)
  • PostgreSQL 12+ with PostGIS
  • nginx or Apache as reverse proxy (optional)
  • TLS certificate (Let’s Encrypt recommended)

3. Install system packages

  1. Update packages:
    sudo apt update && sudo apt upgrade -y
  2. Install Java, PostgreSQL, PostGIS, unzip, wget:
    sudo apt install openjdk-17-jdk postgresql postgresql-contrib postgis unzip wget -y

4. Create PostgreSQL user and database

  1. Switch to postgres user:
    sudo -u postgres psql
  2. Create database and user (replace password):
    CREATE ROLE geonetwork LOGIN PASSWORD ‘ChangeMe’;CREATE DATABASE geonetwork OWNER geonetwork;\c geonetworkCREATE EXTENSION postgis;\q

5. Download and extract GeoNetwork

  1. Download the latest GeoNetwork WAR or bundle from the official releases page (adjust URL/version):
  2. Move and set ownership:
    sudo mv /opt/geonetwork-4.4.0 /opt/geonetworksudo chown -R geonetworkuser:geonetworkuser /opt/geonetwork

6. Configure GeoNetwork to use PostgreSQL

  1. Edit GeoNetwork configuration file (application.yml or config.xml depending on version) — example path: /opt/geonetwork/config/application.yml.
  2. Set datasource:
    spring: datasource: url: jdbc:postgresql://localhost:5432/geonetwork username: geonetwork password: ChangeMe
  3. Ensure JDBC driver is present (PostgreSQL driver jar in lib folder).

7. Create Linux service for GeoNetwork

  1. Create a systemd unit file /etc/systemd/system/geonetwork.service:
    [Unit]Description=GeoNetworkAfter=network.target [Service]Type=simpleUser=geonetworkuserExecStart=/usr/bin/java -Xms512m -Xmx2g -jar /opt/geonetwork/geonetwork.jarRestart=on-failure [Install]WantedBy=multi-user.target
  2. Reload systemd and enable service:
    sudo systemctl daemon-reloadsudo systemctl enable –now geonetwork

8. Set up reverse proxy and TLS

  1. Install nginx:
    sudo apt install nginx -y
  2. Create site config /etc/nginx/sites-available/geonetwork:
    server { listen 80; server_name geonetwork.example.com; location / { proxy_pass http://127.0.0.1:8080/; proxy_set_header Host \(host; proxy_set_header X-Real-IP \)remote_addr; proxy_set_header X-Forwarded-For \(proxy_add_x_forwarded_for; }}</code></pre></div></div></li><li>Enable site and reload nginx: <div><div></div><div><div><button title="Download file" type="button"><svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" width="14" height="14" color="currentColor"><path fill="currentColor" d="M8.375 0C8.72 0 9 .28 9 .625v9.366l2.933-2.933a.625.625 0 0 1 .884.884l-2.94 2.94c-.83.83-2.175.83-3.005 0l-2.939-2.94a.625.625 0 0 1 .884-.884L7.75 9.991V.625C7.75.28 8.03 0 8.375 0m-4.75 13.75a.625.625 0 1 0 0 1.25h9.75a.625.625 0 1 0 0-1.25z"></path></svg></button><button title="Copy Code" type="button"><svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" width="14" height="14" color="currentColor"><path fill="currentColor" d="M11.049 5c.648 0 1.267.273 1.705.751l1.64 1.79.035.041c.368.42.571.961.571 1.521v4.585A2.31 2.31 0 0 1 12.688 16H8.311A2.31 2.31 0 0 1 6 13.688V7.312A2.31 2.31 0 0 1 8.313 5zM9.938-.125c.834 0 1.552.496 1.877 1.208a4 4 0 0 1 3.155 3.42c.082.652-.777.968-1.22.484a2.75 2.75 0 0 0-1.806-2.57A2.06 2.06 0 0 1 9.937 4H6.063a2.06 2.06 0 0 1-2.007-1.584A2.75 2.75 0 0 0 2.25 5v7a2.75 2.75 0 0 0 2.66 2.748q.054.17.123.334c.167.392-.09.937-.514.889l-.144-.02A4 4 0 0 1 1 12V5c0-1.93 1.367-3.54 3.185-3.917A2.06 2.06 0 0 1 6.063-.125zM8.312 6.25c-.586 0-1.062.476-1.062 1.063v6.375c0 .586.476 1.062 1.063 1.062h4.374c.587 0 1.063-.476 1.063-1.062V9.25h-1.875a1.125 1.125 0 0 1-1.125-1.125V6.25zM12 8h1.118L12 6.778zM6.063 1.125a.813.813 0 0 0 0 1.625h3.875a.813.813 0 0 0 0-1.625z"></path></svg></button></div></div><div><pre><code>sudo ln -s /etc/nginx/sites-available/geonetwork /etc/nginx/sites-enabled/sudo nginx -t && sudo systemctl reload nginx</code></pre></div></div></li><li>Obtain TLS with Certbot: <div><div></div><div><div><button title="Download file" type="button"><svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" width="14" height="14" color="currentColor"><path fill="currentColor" d="M8.375 0C8.72 0 9 .28 9 .625v9.366l2.933-2.933a.625.625 0 0 1 .884.884l-2.94 2.94c-.83.83-2.175.83-3.005 0l-2.939-2.94a.625.625 0 0 1 .884-.884L7.75 9.991V.625C7.75.28 8.03 0 8.375 0m-4.75 13.75a.625.625 0 1 0 0 1.25h9.75a.625.625 0 1 0 0-1.25z"></path></svg></button><button title="Copy Code" type="button"><svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" width="14" height="14" color="currentColor"><path fill="currentColor" d="M11.049 5c.648 0 1.267.273 1.705.751l1.64 1.79.035.041c.368.42.571.961.571 1.521v4.585A2.31 2.31 0 0 1 12.688 16H8.311A2.31 2.31 0 0 1 6 13.688V7.312A2.31 2.31 0 0 1 8.313 5zM9.938-.125c.834 0 1.552.496 1.877 1.208a4 4 0 0 1 3.155 3.42c.082.652-.777.968-1.22.484a2.75 2.75 0 0 0-1.806-2.57A2.06 2.06 0 0 1 9.937 4H6.063a2.06 2.06 0 0 1-2.007-1.584A2.75 2.75 0 0 0 2.25 5v7a2.75 2.75 0 0 0 2.66 2.748q.054.17.123.334c.167.392-.09.937-.514.889l-.144-.02A4 4 0 0 1 1 12V5c0-1.93 1.367-3.54 3.185-3.917A2.06 2.06 0 0 1 6.063-.125zM8.312 6.25c-.586 0-1.062.476-1.062 1.063v6.375c0 .586.476 1.062 1.063 1.062h4.374c.587 0 1.063-.476 1.063-1.062V9.25h-1.875a1.125 1.125 0 0 1-1.125-1.125V6.25zM12 8h1.118L12 6.778zM6.063 1.125a.813.813 0 0 0 0 1.625h3.875a.813.813 0 0 0 0-1.625z"></path></svg></button></div></div><div><pre><code>sudo apt install certbot python3-certbot-nginx -ysudo certbot --nginx -d geonetwork.example.com</code></pre></div></div></li></ol><h3>9. Initial web setup and admin account</h3><ul><li>Open <a href="https://geonetwork.example.com/" rel="noopener noreferrer" target="_blank">https://geonetwork.example.com</a> in browser.</li><li>Complete setup wizard: configure default metadata profile, CRS, harvesting settings.</li><li>Create admin user and set strong password.</li></ul><h3>10. Configure harvesting, indexing, and backups</h3><ul><li>Configure CSW/Atom/FTP harvesters via admin UI to ingest remote catalogs.</li><li>Tune Lucene/Elasticsearch settings (if using external search) for indexing performance.</li><li>Schedule regular PostgreSQL dumps: <div><div></div><div><div><button title="Download file" type="button"><svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" width="14" height="14" color="currentColor"><path fill="currentColor" d="M8.375 0C8.72 0 9 .28 9 .625v9.366l2.933-2.933a.625.625 0 0 1 .884.884l-2.94 2.94c-.83.83-2.175.83-3.005 0l-2.939-2.94a.625.625 0 0 1 .884-.884L7.75 9.991V.625C7.75.28 8.03 0 8.375 0m-4.75 13.75a.625.625 0 1 0 0 1.25h9.75a.625.625 0 1 0 0-1.25z"></path></svg></button><button title="Copy Code" type="button"><svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" width="14" height="14" color="currentColor"><path fill="currentColor" d="M11.049 5c.648 0 1.267.273 1.705.751l1.64 1.79.035.041c.368.42.571.961.571 1.521v4.585A2.31 2.31 0 0 1 12.688 16H8.311A2.31 2.31 0 0 1 6 13.688V7.312A2.31 2.31 0 0 1 8.313 5zM9.938-.125c.834 0 1.552.496 1.877 1.208a4 4 0 0 1 3.155 3.42c.082.652-.777.968-1.22.484a2.75 2.75 0 0 0-1.806-2.57A2.06 2.06 0 0 1 9.937 4H6.063a2.06 2.06 0 0 1-2.007-1.584A2.75 2.75 0 0 0 2.25 5v7a2.75 2.75 0 0 0 2.66 2.748q.054.17.123.334c.167.392-.09.937-.514.889l-.144-.02A4 4 0 0 1 1 12V5c0-1.93 1.367-3.54 3.185-3.917A2.06 2.06 0 0 1 6.063-.125zM8.312 6.25c-.586 0-1.062.476-1.062 1.063v6.375c0 .586.476 1.062 1.063 1.062h4.374c.587 0 1.063-.476 1.063-1.062V9.25h-1.875a1.125 1.125 0 0 1-1.125-1.125V6.25zM12 8h1.118L12 6.778zM6.063 1.125a.813.813 0 0 0 0 1.625h3.875a.813.813 0 0 0 0-1.625z"></path></svg></button></div></div><div><pre><code>pg_dump -U geonetwork -F c geonetwork > /var/backups/geonetwork_\)(date +%F).dump
  3. Backup configuration and data directories (/opt/geonetwork/data or similar).
  4. 11. Hardening and monitoring

    • Enforce strong passwords and HTTPS-only.
    • Limit access with firewall (ufw allow 80,443).
    • Configure log rotation for GeoNetwork logs.
    • Use monitoring (Prometheus, Grafana) or simple health checks and alerting.

    12. Scaling tips

    • Use a dedicated database server for large catalogs.
    • Offload search to Elasticsearch for faster search at scale.
    • Run GeoNetwork behind a load balancer with multiple app instances for high availability.

    13. Troubleshooting checklist

    • Check systemd journal: sudo journalctl -u geonetwork -f
    • Confirm DB connectivity from server: psql -h localhost -U geonetwork -d geonetwork
    • Review GeoNetwork logs in /opt/geonetwork/logs for errors.

    If you want, I can generate config file templates (systemd unit, nginx site, application.yml) customized with your domain, DB credentials, and Java memory settings.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *