GNU/Linux >> Linux Esercitazione >  >> Debian

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

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 10 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

Se riscontri i seguenti errori,

perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_MONETARY = "zh_CN.UTF-8",
	LC_ADDRESS = "zh_CN.UTF-8",
	LC_TELEPHONE = "zh_CN.UTF-8",
	LC_NAME = "zh_CN.UTF-8",
	LC_MEASUREMENT = "zh_CN.UTF-8",
	LC_IDENTIFICATION = "zh_CN.UTF-8",
	LC_NUMERIC = "zh_CN.UTF-8",
	LC_PAPER = "zh_CN.UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").

Ciò significa che il tuo computer locale sta tentando di inviare la variabile di ambiente locale al VPS debian, ma Debian non ha la locale installata. Per risolvere questo problema, modifica il file di configurazione del demone SSH.

sudo nano /etc/ssh/sshd_config

Scorri verso il basso fino alla fine, troverai la riga seguente, che dice al demone SSH di accettare le variabili di ambiente dal client SSH.

AcceptEnv LANG LC_*

Modificalo come segue, in modo che il demone SSH non accetti le variabili di ambiente.

AcceptEnv no

Salva e chiudi il file. Quindi riavvia il demone SSH.

sudo systemctl restart ssh

Esci e accedi nuovamente. Non vedrai più l'errore di localizzazione.

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-11-postgis-2.5

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 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/11/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/11/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 /etc/sysctl.conf file.

sudo nano /etc/sysctl.conf

Aggiungi la riga seguente 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
Hugetlb:        16281600 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 10:

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.buster]

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.buster	(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.

Passaggio 6:installa mod_tile e Rendering

mod_tile è un modulo Apache necessario per servire riquadri e renderd è il demone di rendering per il rendering di tile OpenStreetMap. Il repository Debian Buster predefinito non include mod_tile e renderd , quindi dobbiamo compilare il codice sorgente.

Innanzitutto, installa la dipendenza di build.

sudo apt install git autoconf libtool libmapnik-dev apache2-dev

Quindi clona il repository da Github.

git clone https://github.com/openstreetmap/mod_tile.git

cd mod_tile/

Modifica un file.

nano debian/compat

Per impostazione predefinita, il livello di compatibilità è impostato su 7. Tuttavia, dovresti utilizzare il livello di compatibilità 9, quindi cambia il numero 7 in 9. Salva e chiudi il file.

Quindi modifica un altro file.

nano debian/changelog

Individua la prima riga.

libapache2-mod-tile (0.4-12~precise2) precise; urgency=low

Cambialo come segue. 0.4-12 dovrebbe essere cambiato in 0.4.12 e precise2 dovrebbe essere cambiato in buster .

libapache2-mod-tile (0.4.12~buster) precise; urgency=low

Salva e chiudi il file. Quindi compila il pacchetto sorgente.

./autogen.sh

sudo dpkg-buildpackage -uc -us

Ora ci saranno due .deb pacchetti nella directory superiore. Installali con apt .

cd .. 

sudo apt install ./libapache2-mod-tile_0.4.12~buster_amd64.deb ./renderd_0.4.12~buster_amd64.deb

Durante l'installazione, installerà il server Web Apache e chiederà se si desidera abilitare mod_tile nella configurazione di Apache. Selezionare Sì e premere Invio. Questo creerà un file di configurazione Apache per mod_tile (/etc/apache2/sites-available/tileserver_site.conf ).

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 python3-psycopg2

Abbiamo anche bisogno di installare nodejs e npm dal repository upstream con i seguenti comandi.

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

Quindi installa il pacchetto carto con npm.

sudo npm install -g carto

Installa yaml Modulo Python.

sudo -H pip3 install pyyaml

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 ttf-dejavu pacchetto.

sudo apt install ttf-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 il file di configurazione renderizzato.

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

Nel [default] sezione, modificare il valore di XML e HOST come segue. Nota che le righe che iniziano con punto e virgola (;) sono commenti.

XML=/home/osm/openstreetmap-carto/style.xml
HOST=tile.your-domain.com

In [mapnik] sezione, cambia il valore di plugins_dir al seguente.

plugins_dir=/usr/lib/mapnik/3.0/input/

Puoi stampare la directory dei plugin di input predefinita con il seguente comando.

mapnik-config --input-plugins

Se desideri visualizzare caratteri non latini, è meglio modificare le impostazioni dei caratteri come segue.

font_dir=/usr/share/fonts/truetype
font_dir_recurse=true

Salva e chiudi il file. Quindi modifica il file dello script di inizializzazione

sudo nano /etc/init.d/renderd

Trova la riga seguente.

RUNASUSER=www-data

Cambia l'utente in osm . Questo è necessario per caricare i dati della mappa dal database PostgreSQL.

RUNASUSER=osm

Imposta anche il percorso del file di configurazione renderizzato.

DAEMON_ARGS="-c etc/renderd.conf"

Salva e chiudi il file. Imposta osm come proprietario di /var/lib/mod_tile/ directory, che conterrà i file tile renderizzati.

sudo chown osm /var/lib/mod_tile/ -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:Configura Apache

Modifica il file dell'host virtuale OSM.

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

Cambia ServerName con il tuo nome di dominio come tile.your-domain.com . Devi anche creare un record DNS A per questo sottodominio.

ServerName tile.your-domain.com

Salva e chiudi il file. Riavvia Apache.

sudo systemctl restart apache2

Quindi 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

La 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/

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/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/

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

sudo unzip leaflet.zip

Quindi, crea il index.html file.

sudo nano /var/www/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,8],5);
    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. Innanzitutto, installa il client Let's Encrypt (certbot) su Debian 10.

sudo apt install certbot

Dato che stiamo usando il server web Apache, dobbiamo anche installare il plugin Apache.

sudo apt install python3-certbot-apache

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

sudo 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 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/11/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/11/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

Passaggio successivo

Spero che questo tutorial ti abbia aiutato a configurare il server di tile OpenStreetMap su Debian 10. Potresti anche voler configurare il server di geocodifica Nominatim per fornire funzionalità di ricerca.

  • Imposta OSM Nominatim Geocoding Server su Debian 10

Come sempre, se hai trovato utile questo post, iscriviti alla nostra newsletter gratuita per ricevere ulteriori suggerimenti e trucchi. Abbi cura di 🙂


Debian
  1. Come impostare un indirizzo IP statico su Debian 10 Buster

  2. Come configurare un server Samba su Debian 10 Buster

  3. Come configurare un server LAMP su Debian 10 Buster

  4. Come configurare un server SFTP su Debian 11 Server

  5. Come installare MySQL Server su Debian 10 Buster

Configura OpenConnect VPN Server (ocserv) su Debian 10 Buster

Configura il server DNS autorevole BIND su Debian 10 Buster

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