GNU/Linux >> Linux Esercitazione >  >> Debian

Configura il server di tile OpenStreetMap (OSM) su Debian 11 Bullseye

OpenStreetMap (OSM) è una mappa del mondo liberamente modificabile e fornita dall'utente. Puoi pensarlo come un'alternativa open source e self-hosted a Google Maps. Questo tutorial ti mostrerà come creare il tuo server di tile OpenStreetMap su Debian 11 in modo da non dover utilizzare un servizio di mappe proprietario.

Caratteristiche di OpenStreetMap

  • I dati di OpenStreetMap coprono il mondo intero, rendendo facile supportare gli utenti in qualsiasi paese o in ogni paese.
  • OpenStreetMap viene aggiornato ogni minuto, ogni ora di ogni giorno e questi aggiornamenti sono disponibili in tempo reale.
  • I dati di OpenStreetMap sono gratuiti e aperti:non ci sono costi di abbonamento né costi di visualizzazione delle pagine.
  • I dati di OpenStreetMap sono ricchi e dettagliati e contengono enormi quantità di dati rilevanti per le persone sul campo, le persone che li hanno raccolti.

Prerequisiti/Requisiti hardware

La RAM e lo spazio su disco richiesti dipendono dalla mappa del paese che utilizzerai. Ad esempio,

  • La mappa del Regno Unito richiede almeno 12 GB di RAM e 100 GB di spazio su disco.
  • L'intera mappa del pianeta richiede almeno 32 GB di RAM e 1 TB di SSD (Solid State Drive). Non è possibile utilizzare un disco rigido rotante per l'intera mappa del pianeta.

Avrai bisogno di più spazio su disco se intendi eseguire il pre-rendering dei riquadri per accelerare il caricamento della mappa nel browser Web, il che è altamente raccomandato. Controlla questa pagina sull'utilizzo del disco tile per vedere quanto spazio su disco è necessario per il pre-rendering dei tile. Ad esempio, se intendi eseguire il pre-rendering di riquadri dal livello di zoom 0 al livello di zoom 15 per la mappa del pianeta, sono necessari 460 GB di spazio su disco aggiuntivo.

Un'altra cosa da notare è che l'importazione di dati di mappe di grandi dimensioni, come l'intero pianeta, nel database PostgreSQL richiede molto tempo. Prendi in considerazione l'aggiunta di più RAM e soprattutto l'utilizzo di SSD invece di girare il disco rigido per velocizzare il processo di importazione.

Se hai intenzione di ospitare l'intera mappa del mondo, ti consiglio di acquistare il VPS extra large di Contabo, che vanta

  • Una CPU a 10 core
  • 60 GB di RAM
  • SSD Intel Optane da 1,6 TB

Costa solo 26,99 €/mese.

Fase 1:aggiorna il software

È sempre buona norma aggiornare il software del server prima di eseguire qualsiasi lavoro importante sul server. Accedi al tuo server tramite SSH ed esegui il seguente comando.

sudo apt update; sudo apt upgrade

Fase 2:installa il server di database PostgreSQL e l'estensione PostGIS

Useremo PostgreSQL per memorizzare i dati delle mappe. PostGIS è un'estensione geospaziale di PostgreSQL. Esegui i seguenti comandi per installarli.

sudo apt install postgresql postgresql-contrib postgis postgresql-13-postgis-3

Il server di database PostgreSQL si avvierà automaticamente e sarà in ascolto su 127.0.0.1:5432 . Il postgres l'utente verrà creato sul sistema operativo durante il processo di installazione. È il super utente per il server di database PostgreSQL. Per impostazione predefinita, questo utente non ha password e non è necessario impostarne una perché puoi utilizzare sudo per passare a postgres utente e accedi al server PostgreSQL.

sudo -u postgres -i

Ora puoi creare un utente del database PostgreSQL osm .

createuser osm

Quindi crea un database chiamato gis e allo stesso tempo fare osm come proprietario del database. -E UTF8 specifica che lo schema di codifica dei caratteri da utilizzare nel database è UTF8.

createdb -E UTF8 -O osm gis

Quindi, crea il postgis e hstore estensione per gis banca dati.

psql -c "CREATE EXTENSION postgis;" -d gis

psql -c "CREATE EXTENSION hstore;" -d gis

Imposta osm come proprietario del tavolo.

psql -c "ALTER TABLE spatial_ref_sys OWNER TO osm;" -d gis

Esci da postgres utente.

exit

Crea osm utente sul tuo sistema operativo in modo che il server tile possa essere eseguito come osm utente. Il comando seguente creerà un utente di sistema senza password.

sudo adduser --system --group osm

Fase 3:scarica il foglio di stile della mappa e i dati della mappa

Passa alla home directory di osm.

cd /home/osm/

Scarica gli ultimi fogli di stile delle mappe CartoCSS su osm home directory dell'utente con git.

sudo apt install git

git clone https://github.com/gravitystorm/openstreetmap-carto.git

Se visualizzi l'errore "permesso negato" durante l'esecuzione del comando precedente, puoi concedere le autorizzazioni con il comando seguente. Sostituisci username con il tuo vero nome utente.

sudo apt install acl
sudo setfacl -R -m u:username:rwx /home/osm/

Quindi, esegui il comando seguente per scaricare i dati della mappa dell'intero pianeta (50G) in formato PBF (ProtoBufBinary).

wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf

Nota che le velocità di download per openstreetmap.org sono attualmente limitate a 2048 KB/s. Puoi scaricare la mappa dell'impianto da un altro mirror, come

wget -c https://download.bbbike.org/osm/planet/planet-latest.osm.pbf

Se desideri una mappa del singolo paese/stato/provincia/città, vai su http://download.geofabrik.de. Inoltre, BBBike.org fornisce estratti di oltre 200 città e regioni in tutto il mondo in diversi formati. Ad esempio, scarica i dati della mappa della Gran Bretagna (1.1G) con il seguente comando.

wget -c http://download.geofabrik.de/europe/great-britain-latest.osm.pbf

Passaggio 4:ottimizzazione delle prestazioni di PostgreSQL Server

Il processo di importazione può richiedere del tempo. Per accelerare questo processo, possiamo ottimizzare alcune impostazioni del server PostgreSQL per migliorare le prestazioni. Modifica il file di configurazione principale di PostgreSQL.

sudo nano /etc/postgresql/13/main/postgresql.conf

Per prima cosa, dovremmo cambiare il valore di shared_buffer . L'impostazione predefinita è:

shared_buffers = 128MB

Questo è troppo piccolo. La regola pratica è impostarla al 25% della RAM totale (escluso lo spazio di scambio). Ad esempio, il mio VPS ha 60 GB di RAM, quindi l'ho impostato su:

shared_buffers = 15GB

Trova la riga seguente.

#work_mem = 4MB
#maintenance_work_mem = 64MB

Ancora una volta, il valore è troppo piccolo. Uso le seguenti impostazioni.

work_mem = 1GB
maintenance_work_mem = 8GB

Quindi trova la riga seguente.

#effective_cache_size = 4GB

Se hai molta RAM come me, puoi impostare un valore più alto per la dimensione_cache_effettiva come 20G.

effective_cache_size = 20GB

Salva e chiudi il file. Riavvia PostgreSQL per rendere effettive le modifiche.

sudo systemctl restart postgresql

Per impostazione predefinita, PostgreSQL proverebbe a utilizzare pagine enormi nella RAM. Tuttavia, Linux per impostazione predefinita non alloca pagine enormi. Controlla l'ID del processo di PostgreSQL.

sudo head -1 /var/lib/postgresql/13/main/postmaster.pid

Esempio di output:

7031

Quindi controlla il valore VmPeak di questo ID processo.

grep ^VmPeak /proc/7031/status

Esempio di output:

VmPeak: 16282784 kB

Questa è la dimensione massima della memoria che verrà utilizzata da PostgreSQL. Ora controlla le dimensioni di una pagina enorme in Linux.

cat /proc/meminfo | grep -i huge

Esempio di output:

AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB

Possiamo calcolare quante pagine enormi abbiamo bisogno. Dividi il valore di VmPeak per la dimensione della pagina enorme:16282784 kB / 2048 kB =7950. Modifica il file /etc/sysctl.conf.

sudo nano /etc/sysctl.conf

Aggiungi la seguente riga alla fine di questo file per allocare 7950 pagine enormi.

vm.nr_hugepages = 7950

Salva e chiudi il file. Quindi applica le modifiche.

sudo sysctl -p

Se controlli di nuovo le meminfo,

cat /proc/meminfo | grep -i huge

Possiamo vedere che ci sono 7950 enormi pagine disponibili.

AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:    7950
HugePages_Free:     7950
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

Riavvia PostgreSQL per utilizzare pagine enormi.

sudo systemctl restart postgresql

Utilizza lo schermo su server remoti

Poiché il processo di importazione può richiedere molto tempo e il computer potrebbe essere disconnesso da Internet, si consiglia di utilizzare l'utilità dello schermo per mantenere attiva la sessione. Schermata di installazione sul server Debian 11:

sudo apt install screen

Quindi schermata iniziale:

screen

Al primo avvio, vedrai un testo introduttivo, premi semplicemente Enter finire. Quindi sarai in grado di eseguire i comandi come al solito.

Fase 5:importa i dati della mappa in PostgreSQL

Per importare i dati della mappa, dobbiamo installare osm2pgsql che converte i dati di OpenStreetMap in database PostgreSQL abilitati per PostGIS.

sudo apt install osm2pgsql

Concedi le autorizzazioni all'utente postgres.

sudo setfacl -R -m u:postgres:rwx /home/osm/

Passa a postgres utente.

sudo -u postgres -i

Esegui il comando seguente per caricare il foglio di stile della mappa e mappare i dati nel gis Banca dati. Sostituisci great-britain-latest.osm.pbf con il tuo file di dati mappa.

osm2pgsql --slim -d gis --hstore --multi-geometry --number-processes 10 --tag-transform-script /home/osm/openstreetmap-carto/openstreetmap-carto.lua --style /home/osm/openstreetmap-carto/openstreetmap-carto.style -C 32000 /home/osm/great-britain-latest.osm.pbf

dove

  • --slim :esegui in modalità slim anziché in modalità normale. Questa opzione è necessaria se in futuro desideri aggiornare i dati della mappa utilizzando i file di modifica OSM (OSC).
  • -d gis :seleziona database.
  • --hstore :aggiungi tag senza colonna a una colonna hstore aggiuntiva (chiave/valore) alle tabelle PostgreSQL
  • --multi-geometry :genera funzionalità multi-geometria nelle tabelle postgresql.
  • --style :specifica la posizione del file di stile
  • --number-processes :numero di core della CPU sul tuo server. ne ho 10.
  • -C flag specifica la dimensione della cache in MegaByte. Dovrebbe essere circa il 70% della RAM libera sulla tua macchina. Una maggiore dimensione della cache si traduce in una maggiore velocità di importazione. Ad esempio, il mio server ha 60 GB di RAM libera, quindi posso specificare -C 32000 . Tieni presente che PostgreSQL avrà bisogno di RAM per shared_buffers. Usa questa formula per calcolare quanto dovrebbe essere grande la dimensione della cache:(Total RAM - PostgreSQL shared_buffers) * 70%
  • Infine, devi specificare la posizione del file di dati della mappa.

Uscita comando:

Se intendi importare i dati completi della mappa del pianeta, usa il --drop opzione e il --flat-nodes opzione per aumentare la velocità di importazione. Nota che il --flat-nodes l'opzione non è adatta per mappe piccole.

osm2pgsql --slim -d gis --drop --flat-nodes /home/osm/nodes.cache --hstore --multi-geometry --number-processes 10 --tag-transform-script /home/osm/openstreetmap-carto/openstreetmap-carto.lua --style /home/osm/openstreetmap-carto/openstreetmap-carto.style -C 32000 /home/osm/planet-latest.osm.pbf

L'utilizzo della RAM aumenterà gradualmente durante il processo di importazione.

Ora probabilmente non hai bisogno di fare altre cose sul tuo server. Dato che stai usando Screen, puoi premere Ctrl+A , rilascia quei tasti, quindi premi D tasto per disconnettersi dalla sessione Screen corrente. Vedrai un messaggio come di seguito.

[detached from 32113.pts-1.focal]

Questo mi dice che l'ID della sessione dello schermo precedente è 32113. Puoi disconnetterti dalla sessione SSH e persino spegnere il computer. Non preoccuparti, il processo di importazione di OSM è ancora in esecuzione. Quando devi tornare indietro e controllare l'avanzamento dell'importazione, SSH nel tuo server ed esegui il comando seguente per ottenere l'ID della sessione dello schermo precedente.

screen -ls

Esempio di output:

There is a screen on:
	32113.pts-1.focal	(05/19/2020 03:45:29 PM)	(Detached)
1 Socket in /run/screen/S-linuxbabe.

Quindi puoi ricollegarti alla precedente sessione di Screen.

screen -r 32113

E potrai continuare il tuo lavoro. Una volta completata l'importazione, concedi tutti i privilegi del gis database nel osm utente.

psql -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" -d gis

Esci da postgres utente.

exit

Nota :Se l'importazione di osm2pgsql non è ancora terminata, non continuare con il passaggio 6.

Risoluzione dei problemi

Se si verifica il seguente errore durante l'importazione dei dati della mappa dal file PBF,

PBF error : invalid Blobheader size (> max_blob_header_size)

probabilmente è perché il tuo file PBF è corrotto. Verifica l'md5sum del file PBF come di seguito.

md5sum great-britain-latest.osm.pbf

Confronta il risultato con il valore md5sum nella pagina di download del file PBF.

Passaggio 6:installa Rendering e mod_tile

  • renderd è un demone per il rendering di tile OpenStreetMap dal database PostgreSQL.
  • mod_tile è un modulo Apache che viene utilizzato per fornire riquadri ai client (ad es. browser Web)

Possiamo installarli dal repository del software Debian 11 predefinito.

sudo apt install apache2 libapache2-mod-tile renderd

Un file di configurazione per renderd verrà creato in /etc/apache2/conf-available/renderd.conf . Abilita il tile modulo.

sudo a2enmod tile

Quindi, crea un host virtuale per il server tile.

sudo nano /etc/apache2/sites-available/tileserver_site.conf

Aggiungi le seguenti righe in questo file. Sostituisci tile.your-domain.com con il tuo vero nome di dominio. Non dimenticare il record DNS A.

<VirtualHost *:80>
    ServerName tile.your-domain.com
    LogLevel info
    Include /etc/apache2/conf-available/renderd.conf

</VirtualHost>

Salva e chiudi il file. Abilita questo host virtuale.

sudo a2ensite tileserver_site.conf

Riavvia Apache per rendere effettive le modifiche.

sudo systemctl restart apache2

Il demone di rendering si avvierà automaticamente, come si può vedere con:

systemctl status renderd

Passaggio 7:genera il foglio di stile di Mapnik

Installa i pacchetti richiesti.

sudo apt install curl unzip gdal-bin mapnik-utils libmapnik-dev python3-pip nodejs npm

Quindi installa il carto pacchetto con npm .

sudo npm install -g carto

Installa yaml e psycopg2 Modulo Python.

sudo -H pip3 install pyyaml psycopg2==2.8.5

Passa a postgres utente.

sudo -u postgres -i

Cd nella directory stile carto.

cd /home/osm/openstreetmap-carto/

Ottieni shapefile.

scripts/get-external-data.py

Se si verifica il seguente messaggio di errore durante l'esecuzione del comando precedente, si verificano problemi con il DNS. Attendi semplicemente alcuni minuti ed esegui di nuovo lo script Python.

Failed to establish a new connection: [Errno -3] Temporary failure in name resolution

Ora costruisci il foglio di stile XML di Mapnik con il carto compilatore di fogli di stile della mappa.

carto project.mml > style.xml

Concedi tutti i privilegi di gis database nel osm utente.

psql -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" -d gis

Esci da postgres utente.

exit

Passaggio 8:installa i caratteri

Devi installare fonts-dejavu pacchetto.

sudo apt install fonts-dejavu

Per visualizzare i caratteri non latini, installa i seguenti pacchetti.

sudo apt install fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-hinted fonts-noto-unhinted ttf-unifont

Fase 9:configura il rendering

Modifica renderd file di configurazione.

sudo nano /etc/renderd.conf

Nel [renderd] sezione, cambia il numero di thread in base al numero di core della CPU sul tuo server.

num_threads=10

Aggiungi un default strato. Le righe che iniziano con punto e virgola (;) sono commenti.

; ADD YOUR LAYERS:
[default]
URI=/osm/
XML=/home/osm/openstreetmap-carto/style.xml
HOST=tile.your-domain.com

Salva e chiudi il file. Quindi crea una nuova directory per il servizio di rendering.

sudo mkdir /etc/systemd/system/renderd.service.d/

Crea un file di configurazione personalizzato in questa directory.

sudo nano /etc/systemd/system/renderd.service.d/custom.conf

Aggiungi le seguenti righe in questo file.

[Service]
User=osm

Salva e chiudi il file. Modifica la proprietà di /run/renderd/ e /var/cache/renderd/tiles/ directory.

sudo chown osm /run/renderd/ -R
sudo chown osm /var/cache/renderd/tiles/ -R

Quindi riavvia il servizio renderizzato.

sudo systemctl daemon-reload

sudo systemctl restart renderd

Devi controllare il log di rendering.

sudo journalctl -eu renderd

Assicurati che il rendering non produca alcun errore nel registro dopo il riavvio, altrimenti la mappa non verrà visualizzata.

Fase 10:prova

Nella barra degli indirizzi del browser web, digita

tile.your-domain.com/osm/0/0/0.png

Dovresti vedere la tessera della mappa del mondo. Congratulazioni! Hai appena creato con successo il tuo server di tile OSM.

Se hai abilitato il firewall UFW, assicurati di aprire le porte 80 e 443 con il seguente comando.

sudo ufw allow 80,443/tcp

Se vedi 404 non trovato errore, aspetta semplicemente qualche minuto, aggiorna la pagina nel tuo browser e dovrebbe essere in grado di caricare il riquadro della mappa del mondo. Se ancora non si carica, riavvia il servizio di rendering (sudo systemctl restart renderd ).

Passaggio 11:mostra la tua mappa web affiancata

Ora che hai un server tile OSM funzionante, devi usare una libreria di mappe JavaScript per visualizzare la mappa sugli altri tuoi server. In questo tutorial creo la mappa web sul server tile, ma puoi farlo su qualsiasi altro server.

Una mappa web affiancata è anche nota come mappa scivolosa nella terminologia di OpenStreetMap. Esistono due librerie di mappe JavaScript gratuite e open source che puoi utilizzare per il tuo server di tile:OpenLayer e Volantino . Il vantaggio di Leaflet è che è semplice da usare e la tua mappa sarà ottimizzata per i dispositivi mobili.

OpenLayer

Per visualizzare la tua mappa slippy con OpenLayer, scarica JavaScript e CSS da openlayer.org ed estrailo nella cartella webroot.

cd /var/www/html/

sudo wget https://github.com/openlayers/openlayers/releases/download/v5.3.0/v5.3.0.zip

sudo unzip v5.3.0.zip

Quindi, crea il index.html file.

sudo nano /var/www/html/index.html

Incolla il seguente codice HTML nel file. Sostituisci il testo di colore rosso e regola la longitudine, la latitudine e il livello di zoom in base alle tue esigenze.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Accessible Map</title>
<link rel="stylesheet" href="http://tile.your-domain.com/v5.3.0/css/ol.css" type="text/css">
<script src="http://tile.your-domain.com/v5.3.0/build/ol.js"></script>
<style>
  a.skiplink {
    position: absolute;
    clip: rect(1px, 1px, 1px, 1px);
    padding: 0;
    border: 0;
    height: 1px;
    width: 1px;
    overflow: hidden;
  }
  a.skiplink:focus {
    clip: auto;
    height: auto;
    width: auto;
    background-color: #fff;
    padding: 0.3em;
  }
  #map:focus {
    outline: #4A74A8 solid 0.15em;
  }
</style>
</head>
<body>
  <a class="skiplink" href="#map">Go to map</a>
  <div id="map" class="map" tabindex="0"></div>
  <button id="zoom-out">Zoom out</button>
  <button id="zoom-in">Zoom in</button>
  <script>
    var map = new ol.Map({
      layers: [
        new ol.layer.Tile({
          source: new ol.source.OSM({
             url: 'http://tile.your-domain.com/osm/{z}/{x}/{y}.png'
          })
       })
     ],
     target: 'map',
     controls: ol.control.defaults({
        attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
          collapsible: false
        })
     }),
    view: new ol.View({
       center: [244780.24508882355, 7386452.183179816],
       zoom:5
    })
 });

  document.getElementById('zoom-out').onclick = function() {
    var view = map.getView();
    var zoom = view.getZoom();
    view.setZoom(zoom - 1);
  };

  document.getElementById('zoom-in').onclick = function() {
     var view = map.getView();
     var zoom = view.getZoom();
     view.setZoom(zoom + 1);
  };
</script>
</body>
</html>

Salva e chiudi il file. Ora puoi visualizzare la tua mappa slippy digitando il tuo sottodominio nella barra degli indirizzi del browser.

tile.your-domain.com

o

tile.your-domain.com/index.html

Volantino

Per visualizzare la tua mappa scivolosa con Leftlet, scarica JavaScript e CSS da leftletjs.com ed estrailo nella cartella webroot.

cd /var/www/html/

sudo wget http://cdn.leafletjs.com/leaflet/v1.7.1/leaflet.zip

sudo unzip leaflet.zip

Quindi, crea il index.html file. Se esiste già un index.html file, quindi elimina il contenuto originale.

sudo nano /var/www/html/index.html

Incolla il seguente codice HTML nel file. Sostituisci il testo di colore rosso e regola la longitudine, la latitudine e il livello di zoom in base alle tue esigenze.

<html>
<head>
<meta charset="UTF-8">
<title>My first osm</title>
<link rel="stylesheet" type="text/css" href="leaflet.css"/>
<script type="text/javascript" src="leaflet.js"></script>
<style>
   #map{width:100%;height:100%}
</style>
</head>

<body>
  <div id="map"></div>
  <script>
    var map = L.map('map').setView([55,0.8],6);
    L.tileLayer('http://tile.your-domain.com/osm/{z}/{x}/{y}.png',{maxZoom:18}).addTo(map);
</script>
</body>
</html>

Salva e chiudi il file. Ora puoi visualizzare la tua mappa scivolosa digitando l'indirizzo IP del tuo server nel browser.

tile.your-domain.com

o

tile.your-domain.com/index.html

Fase 12:pre-rendering delle tessere

Il rendering dei riquadri al volo aumenterà il tempo di caricamento della mappa nel browser web. Per eseguire il pre-rendering delle tessere invece di renderizzare al volo, usa il seguente render_list comando. Usa -z e -Z flag specifica il livello di zoom e sostituisci il numero di thread in base al numero di core della CPU sul tuo server. Render_list esegue il rendering di un elenco di riquadri della mappa inviando richieste al demone di rendering. I riquadri pre-renderizzati verranno memorizzati nella cache in /var/lib/mod_tile directory.

render_list -m default -a -z 0 -Z 19 --num-threads=10

Se in seguito hai aggiornato i dati della mappa, puoi prerenderizzare nuovamente tutti i riquadri utilizzando il --force opzione.

render_list -m default -a -z 0 -Z 19 --num-threads=10 --force

Per eseguire il rendering dei riquadri della mappa sullo sfondo, aggiungi il & simbolo alla fine.

render_list -m default -a -z 0 -Z 19 --num-threads=10 &

Ora puoi chiudere la finestra del terminale. Per controllare l'avanzamento del rendering, apri un'altra sessione SSH ed esegui il comando seguente.

sudo journalctl -eu renderd

Il comando precedente mostrerà l'ultimo registro del renderd servizio. Le righe seguenti mostrano che il mio server OSM sta ora visualizzando i riquadri della mappa al livello di zoom 12.

 renderd[20838]: DEBUG: START TILE default 12 1008-1015 4056-4063, new metatile
 renderd[20838]: Rendering projected coordinates 12 1008 4056 -> -10175297.205328|-19724422.274944 -10097025.688364|-19646150.757980 to a 8 x 8 tile
 renderd[20838]: DEBUG: DONE TILE default 12 1008-1015 3984-3991 in 0.799 seconds
 renderd[20838]: DEBUG: Sending render cmd(3 default 12/1008/3984) with protocol version 2 to fd 18
 renderd[20838]: DEBUG: Got incoming request with protocol version 2
 renderd[20838]: DEBUG: Got command RenderBulk fd(18) xml(default), z(12), x(1008), y(4064), mime(image/png), options()
 renderd[20838]: DEBUG: START TILE default 12 1008-1015 4064-4071, new metatile
 renderd[20838]: Rendering projected coordinates 12 1008 4064 -> -10175297.205328|-19802693.791908 -10097025.688364|-19724422.274944 to a 8 x 8 tile

Passaggio 13:abilita HTTPS

Per crittografare il traffico HTTP, possiamo ottenere e installare un certificato TLS gratuito da Let's Encrypt. Consiglio di installare l'ultima versione di certbot dal negozio Snap.

sudo apt install snapd

sudo snap install --classic certbot

Quindi esegui il comando seguente per ottenere e installare il certificato TLS.

sudo /snap/bin/certbot --apache --agree-tos --redirect --hsts --staple-ocsp --must-staple --email [email protected] -d tile.your-domain.com

Una volta installato il certificato, aggiorna la pagina web e vedrai un lucchetto nella barra degli indirizzi.

Se vedi un triangolo giallo nella barra degli indirizzi di Firefox, significa che gli URL del riquadro stanno ancora utilizzando HTTP. Devi modificare il file index.html e sostituire tutti i protocolli HTTP con HTTPS con il comando seguente.

sudo sed -i 's/http/https/g' /var/www/index.html

Passaggio 14:abilita HTTP2

Per migliorare ulteriormente le prestazioni di caricamento delle mappe, puoi abilitare il protocollo HTTP2. Innanzitutto, devi abilitare il modulo HTTP2.

sudo a2enmod http2

Quindi apri il file dell'host virtuale SSL.

sudo nano /etc/apache2/sites-enabled/tileserver_site-le-ssl.conf

Inserisci la seguente direttiva dopo l'apertura <VirtualHost *:443> tag.

Protocols h2 http/1.1

Salva e chiudi il file. Quindi riavvia Apache per rendere effettive le modifiche.

sudo systemctl restart apache2

Limita l'accesso al tuo server Tile OSM con intestazione referrer HTTP

Per impostazione predefinita, chiunque può utilizzare OpenLayer o Leaflet per creare una mappa scivolosa con l'URL del tuo server tile. Per limitare l'accesso al tuo server tile, modifica il file dell'host virtuale Apache.

sudo nano /etc/apache2/sites-enabled/tileserver_site-le-ssl.conf

Aggiungi le seguenti righe in <VirtualHost> tag.

    <Location /osm>
        SetEnvIf Referer example\.com trusted_referer
        Order deny,allow
        Deny from all
        Allow from env=trusted_referer
    </Location>

Il codice sopra controlla se l'intestazione del referer HTTP include il tuo dominio. In caso contrario, accedi a /osm la directory verrà negata. La barra rovesciata viene utilizzata per sfuggire al carattere punto. Per aggiungere più nomi host come referrer affidabili, utilizza la seguente sintassi.

SetEnvIf Referer (example\.com|www\.example\.com|map\.example\.com) trusted_referer

Salva e chiudi il file. Quindi verifica la sintassi.

sudo apache2ctl -t

Se la sintassi è ok, ricarica Apache per rendere effettive le modifiche.

sudo systemctl reload apache2

Rinnovo automatico del certificato TLS

Puoi creare un lavoro Cron per rinnovare automaticamente il certificato TLS. Basta aprire il file crontab dell'utente root.

sudo crontab -e

Aggiungi la seguente riga in fondo al file.

@daily /snap/bin/certbot renew --quiet && systemctl reload apache2

Database PostgreSQL e server Web su host diversi

Se il tuo server Web PostgreSQL e Apache risiedono su host diversi, devi modificare il project.mml file sull'host Apache.

nano /home/osm/openstreetmap-carto-4.20.0/project.mml

Trova le seguenti righe:

osm2pgsql: &osm2pgsql
  type: "postgis"
  dbname: "gis"
  key_field: ""
  geometry_field: "way"
  extent: "-20037508,-20037508,20037508,20037508"

Specificare l'indirizzo IP del server di database PostgreSQL.

osm2pgsql: &osm2pgsql
  type: "postgis"
  host: "10.0.0.2"
  dbname: "gis"
  key_field: ""
  geometry_field: "way"
  extent: "-20037508,-20037508,20037508,20037508"

Salva e chiudi il file. Quindi costruisci il foglio di stile XML di Mapnik con il carto compilatore di fogli di stile della mappa.

carto project.mml > style.xml

Sul server del database PostgreSQL, modifica il file di configurazione principale.

sudo nano /etc/postgresql/12/main/postgresql.conf

Aggiungi la riga seguente per impostare PostgreSQL in ascolto su tutte le interfacce.

listen_addresses = '*'

Salva e chiudi il file. Quindi modifica il file di configurazione dell'autenticazione del client PostgreSQL.

sudo nano /etc/postgresql/12/main/pg_hba.conf

Aggiungi la riga seguente alla fine del file per consentire osm utente per accedere dall'host Apache. Sostituisci 10.0.0.1 con l'indirizzo IP dell'host Apache.

host   gis   osm   10.0.0.1/32   trust

Salva e chiudi il file. Quindi riavvia PostgreSQL.

sudo systemctl restart postgresql

Riavvia il demone di rendering sull'host Apache.

sudo systemctl restart renderd

Devi controllare il log di rendering. Assicurati che il rendering non produca alcun errore nel registro, altrimenti la mappa non verrà visualizzata.

sudo journalctl -eu renderd

Dovresti anche limitare l'accesso alla porta 5432 del server di database PostgreSQL. Ad esempio, puoi utilizzare il seguente comando UFW per consentire solo l'indirizzo IP dell'host Apache.

sudo ufw allow in from 10.0.0.1 to any port 5432

Debian
  1. Come configurare un server Samba su Debian 10 Buster

  2. Come configurare un server NFS su Debian 10 Buster

  3. Come configurare un server SFTP su Debian 11 Server

  4. Come configurare un server OpenVPN su Debian 10

  5. Configura un server di posta con PostfixAdmin su Debian 9

Configura il server di tile OpenStreetMap (OSM) su Debian 10 Buster

Come configurare OpenStreetMap Tile Server su Ubuntu 18.04

Come configurare OpenStreetMap Tile Server su Ubuntu 20.04

Come configurare Tegola Vector Tile Server su Ubuntu 20.04 per OpenStreetMap

Installa Plex Media Server su Debian 11 Bullseye

Come installare MySQL 8.0 Server su Debian 11 Bullseye