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.
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 .
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.
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.
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.
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.
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!
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
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.
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.