Skip to content

Kontener pozwalający na szybkie uruchomienie serwera kafelków OSM

Notifications You must be signed in to change notification settings

pot-gov-pl/openstreetmap-tile-server

 
 

Repository files navigation

openstreetmap-tile-server

Kontener pozwalający na łatwe i szybkie uruchomienie serwera kafelków OpenStreetMap w domyślnym stylu graficznym dla Polski, innego regionu lub dla dostarczonego pliku PBF.

Uwaga!

Zwróć uwagę, że to repozytorium ma dwie główne gałęzie:

  • master - uniwersalny kontener do obsługi dowolnych map obecnie mocno nieaktualny;
  • poland - kontener modyfikowany pod kątem serwowania mapy Polski z terenu Polski, czyli np. ustawiona jest polska stefa czasowa.

Budowa kontenera

Kontener ten powstał jako specjalna wersja uniwersalnego kontenera overv/openstreetmap-tile-server i na chwilę obecną nie jest dostępny poprzez Docker Hub. Stąd należy go zbudować, aby z niego korzystać.

git clone https://github.com/pot-gov-pl/openstreetmap-tile-server
cd openstreetmap-tile-server
sudo docker build --tag=openstreetmap-tile-server .

Import danych dla Polski

Utwórz wolumin dockerowy do przechowywania danych OpenStreetMap w bazie PosgtreSQL.

docker volume create osm-data

Następnie uruchom import:

docker run \
    -v osm-data:/data/database/ \
    openstreetmap-tile-server \
    import

Jeżeli kontener zakończy pracę bez błędów, będzie to oznaczać, że Twoje dane zostały poprawnie zaimportowane i wszystko jest gotowe, aby uruchomić serwer.

Import danych dla innego regionu

Utwórz wolumin dockerowy do przechowywania danych OpenStreetMap w bazie PosgtreSQL.

docker volume create osm-data

Następnie uruchom import wskazując docelowy region w repozytorium online (np. geofabrik.de). Przykładowo dla Luxemburga:

docker run \
    -e DOWNLOAD_PBF=https://download.geofabrik.de/europe/luxembourg-latest.osm.pbf \
    -e DOWNLOAD_POLY=https://download.geofabrik.de/europe/luxembourg.poly \
    -v osm-data:/data/database/ \
    openstreetmap-tile-server \
    import

Jeżeli kontener zakończy pracę bez błędów, będzie to oznaczać, że Twoje dane zostały poprawnie zaimportowane i wszystko jest gotowe, aby uruchomić serwer.

Import danych z pliku PBF

Utwórz wolumin dockerowy do przechowywania danych OpenStreetMap w bazie PosgtreSQL.

docker volume create osm-data

Przygotuj własny plik PBF lub pobierz .osm.pbf np. z geofabrik.de dla interesującego Cię regionu. Przykładowo, najświeższe dane o Polsce:

wget http://download.geofabrik.de/europe/poland-latest.osm.pbf

Teraz zaimportuj je do PostgreSQL uruchamiając kontener z parametrem import z podmontowanym pobranym plikiem jako /region.osm.pbf.

docker run \
    -v /absolute/path/to/poland.osm.pbf:/data/region.osm.pbf \
    -v osm-data:/data/database/ \
    openstreetmap-tile-server \
    import

Jeżeli kontener zakończy pracę bez błędów, będzie to oznaczać, że Twoje dane zostały poprawnie zaimportowane i wszystko jest gotowe, aby uruchomić serwer.

Uruchomienie serwera

Uruchom serwer następującym wywołaniem z parametrem run oraz przypisaniem go do portu 80:

docker run \
    -p 8080:80 \
    -v osm-data:/data/database/ \
    -d openstreetmap-tile-server \
    run

Kafelki będą dostępne pod adresem http://localhost:8080/tile/{z}/{x}/{y}.png (gdzie z,x,y to liczby wskazujące zoom i współrzędne) a pod adresem http://localhost:8080/ będzie dostępna prosta demonstracyjna aplikacja internetowa wyświetlająca mapę na pełnym ekranie.

Przy pierwszym uruchomieniu pojawienie się pierwszych kafelków może zająć chwilę, bo muszą zostać przygotowane.

Zachowanie wyrenderowanych kafelków

Aby pracowicie wytworzone kafelki przetrwały restart kontenera, najpierw utwórz dla nich wolumin osm-tiles i uruchamiaj serwer z dodatkowym parametrem wskazującym na ten wolumin;

docker volume create osm-tiles
docker run \
    -p 8080:80 \
    -v osm-data:/data/database/ \
    -v osm-tiles:/data/tiles/ \
    -d openstreetmap-tile-server \
    run

If you do this, then make sure to also run the import with the osm-tiles volume to make sure that caching works properly across updates!

Optymalizacja wydajności

Domyślnie proces importowy oraz serwer korzystają z 4 wątków, ale wartość tę można zmienić ustawiając zmienną środowiskową THREADS, np. tak:

docker run \
    -p 8080:80 \
    -e THREADS=24 \
    -v osm-data:/data/database/ \
    -d openstreetmap-tile-server \
    run

Rozwiązywanie problemów

ERROR: could not resize shared memory segment / No space left on device

Jeżeli trafisz na takie coś w logu, to znaczy to, że domyślny dockerowy limit pamiędzi współdzielonej (równy 64 MB) jest zbyt niski i trzeba go zwiększyć:

renderd[121]: ERROR: failed to render TILE default 2 0-3 0-3
renderd[121]: reason: Postgis Plugin: ERROR: could not resize shared memory segment "/PostgreSQL.790133961" to 12615680 bytes: ### No space left on device

Nową wartość należy ustawć parametrem --shm-size. Przykład:

docker run \
    -p 8080:80 \
    -v osm-data:/data/database/ \
    --shm-size="192m" \
    -d openstreetmap-tile-server \
    run

Zbyt wysokie wartości mogą sprawić, że znacząco wzrośnie użycie CPU oraz pamięci. Możliwe, że trzeba będzie eksperymentalnie określić odpowiednią wartość limitu.

Licencja

Copyright 2018 Alexander Overvoorde

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

Kontener pozwalający na szybkie uruchomienie serwera kafelków OSM

Topics

Resources

Stars

Watchers

Forks

Languages

  • Shell 75.2%
  • Dockerfile 19.3%
  • HTML 5.5%