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
- Update packages:
sudo apt update && sudo apt upgrade -y - 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
- Switch to postgres user:
sudo -u postgres psql - 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
- Download the latest GeoNetwork WAR or bundle from the official releases page (adjust URL/version):
wget https://github.com/geonetwork/core-geonetwork/releases/download/v4.4.0/geonetwork-4.4.0.zipunzip geonetwork-4.4.0.zip -d /opt/ - 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
- Edit GeoNetwork configuration file (application.yml or config.xml depending on version) — example path: /opt/geonetwork/config/application.yml.
- Set datasource:
spring: datasource: url: jdbc:postgresql://localhost:5432/geonetwork username: geonetwork password: ChangeMe - Ensure JDBC driver is present (PostgreSQL driver jar in lib folder).
7. Create Linux service for GeoNetwork
- 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 - Reload systemd and enable service:
sudo systemctl daemon-reloadsudo systemctl enable –now geonetwork
8. Set up reverse proxy and TLS
- Install nginx:
sudo apt install nginx -y - 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 - Backup configuration and data directories (/opt/geonetwork/data or similar).
- 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.
- 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.
- 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.
11. Hardening and monitoring
12. Scaling tips
13. Troubleshooting checklist
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.
Leave a Reply