Compare commits

...

154 Commits
v1.0 ... v1.7.4

Author SHA1 Message Date
Andrey Prih
0a4d079b08 fix naciscdn.org (#212)
* fix naciscdn.org

* fix

Co-authored-by: prih <prih@prihhost.com>
2021-09-07 21:39:35 +02:00
Alexander Overvoorde
60ac7657d1 Don't clutter output of usage instructions 2021-09-03 12:51:45 +02:00
Alexander Overvoorde
ce176ae32e Fix erroneous quotes around WGET_ARGS (fixes #210) 2021-09-03 12:46:37 +02:00
Alexander Overvoorde
7b82bcae9d Use indexes.sql included with openstreetmap-carto instead of own copy (fixes #204) (#205) 2021-07-19 22:05:18 +02:00
Jason Montleon
85eaca5c79 Install python-is-python3 for openstreetmap-tiles-update-expire (#201) 2021-07-03 15:28:40 +02:00
Alexander Overvoorde
9679b29b50 Update NodeJS to 14 LTS (#185) 2021-05-13 14:44:24 +02:00
ruhepuls
8f2c575ad6 Carto 5.3.1 integrated (#183) 2021-05-13 14:41:01 +02:00
Alexander Overvoorde
75e7714f20 Merge pull request #168 from Overv/ubuntu-20.04
Upgrade to Ubuntu 20.04
2021-03-07 16:34:51 +01:00
Alexander Overvoorde
ec500a2cde Upgrade to Ubuntu 20.04 2021-03-07 16:34:21 +01:00
Alexander Overvoorde
affae5a92d Merge pull request #169 from mhajder/feature/update-components
Update PostGIS, OpenStreetMap Carto stylesheet and trim_osc.py helper
2021-03-01 21:47:13 +01:00
Mateusz Hajder
a204fb85fd Update PostGIS, OpenStreetMap Carto stylesheet and trim_osc.py helper 2021-02-21 15:37:07 +01:00
Alexander Overvoorde
7636079b4d Merge pull request #164 from jdmonin/readme-switch-url-moved 2021-02-10 21:09:28 +01:00
Jeremy D Monin
2ae828c52b Dockerfile: Update same switch2osm.org url as readme 2021-02-07 15:56:36 -05:00
Jeremy D Monin
6fb62935f3 README: Update link to switch2osm.org tile server guide 2021-02-06 16:20:46 -05:00
Alexander Overvoorde
953232051f Show progress output for wget by default (fixes #156) 2020-10-27 20:55:02 +01:00
Alexander Overvoorde
bedff2a880 Merge pull request #150 from ph1ll/patch-1
Fix Osmosis configuration change
2020-09-17 21:40:58 +02:00
Ph1ll
e79901b7dd Fix Osmosis configuration change 2020-09-16 10:05:33 +01:00
Alexander Overvoorde
5a059ab0a5 Merge pull request #140 from Floyddotnet/master
small improvement of build time and image size
2020-06-03 18:46:28 +02:00
Peter Becker
bcf2cfcada combine several apt install calls 2020-06-03 09:24:05 +00:00
Peter Becker
0e1db36457 fix shallow fetch for osm2pgsql and mod-tile 2020-06-03 09:24:05 +00:00
Peter Becker
677b52468e execute all make calls in parallel 2020-06-03 09:23:54 +00:00
Alexander Overvoorde
1093734e1b Merge branch 'Mou97-master' 2020-06-01 14:12:30 +02:00
Alexander Overvoorde
9fb0743c51 Fix shallow fetch for openstreetmap-carto 2020-06-01 14:11:52 +02:00
Mou97
19cb75baa4 removed git command thats fetches the whole history after a shallow clone 2020-05-31 01:21:42 +01:00
Mou97
82bc6a35a3 renamed Dockerfile-badInternet to Dockerfile 2020-05-29 18:58:57 +01:00
Mou97
44490df8c5 added a dockerfile version to avoid 'connection closed: RPC failed' error when cloning big repos 2020-05-29 14:23:36 +01:00
Alexander Overvoorde
6dc84f1d26 Merge pull request #135 from Istador/patch-1 2020-05-15 18:50:46 +02:00
Robin C. Ladiges
26a4b9f239 OSM2PGSQL_EXTRA_ARGS inside quotes
This commit fixes issue #133.
2020-05-15 16:24:01 +02:00
Alexander Overvoorde
2754592d1c Rearrange OSM2PGSQL_EXTRA_ARGS to allow overriding of existing parameters (fixes #112) 2020-04-26 19:00:59 +02:00
Alexander Overvoorde
e838310073 Merge pull request #119 from Sohalt/master
Use https everywhere and remove `--allow-unauthenticated`
2020-04-07 21:26:36 +02:00
sohalt
cca2d00a78 Remove --allow-unauthenticated 2020-04-07 04:30:10 +02:00
sohalt
cc5b50b050 http -> https 2020-04-07 04:29:18 +02:00
Alexander Overvoorde
d8f2fc14e4 Merge pull request #116 from atychang/master
Fix font_dir of mapnik
2020-04-02 20:44:53 +02:00
Allen Chang
1b437e143f Fix font_dir of mapnik
OpenType fonts (OTF) are located in `/usr/share/fonts/opentype`,
however, the font_dir of mapnik is `/usr/share/fonts/truetype` and
mapnik is support OTF, it will cause mapnik can't find the OTFs
(OTFs are used by openstreetmap-carto, e.g., Noto CJK JP).
2020-04-02 13:28:24 +08:00
Alexander Overvoorde
acedcce53d Improve consistency of parameter naming and document PBF/POLY download parameters 2020-02-20 20:29:14 +01:00
Alexander Overvoorde
e15dee4665 Merge pull request #105 from skydiablo/master
allow external PBF file with auto-downloader
2020-02-20 20:18:05 +01:00
Volker von Hoesslin
83f26e1abe fix indent 2020-02-20 08:46:46 +01:00
Alexander Overvoorde
5a1b2a6b06 Add support for host mounts (fixes #94) 2020-02-19 21:04:24 +01:00
Volker von Hoesslin
6d0e8070f5 fix bash syntax 2020-02-19 12:01:17 +01:00
Volker von Hoesslin
2a69c977c9 allow external PBF file with auto-downloader 2020-02-14 11:59:27 +01:00
Alexander Overvoorde
5300472417 Accept both the values enabled and 1 for boolean flags for backwards compatibility 2020-02-12 20:18:19 +01:00
Alexander Overvoorde
f9a29fb23b Merge pull request #104 from darekzbik/cors_property
fix configuration values inconsistency
2020-02-12 20:18:06 +01:00
Dariusz Zbik
52c89b4775 fix configuration values inconsistency 2020-02-10 22:24:34 +01:00
Alexander Overvoorde
0bb62b77d3 Merge pull request #101 from pandel/master
Get nodejs from source because of apt package conflict
2020-02-10 22:09:50 +01:00
Holger Pandel
0a5ac2a018 Get nodejs from source 2020-02-09 21:13:22 +01:00
Alexander Overvoorde
f0f36a6c9b Merge pull request #99 from irexiz/master
Remove unnecessary shapefile archives to reduce final image size
2020-02-04 19:58:55 +01:00
irekzagan
b192fabac3 remove unnecessary shapefile archives 2020-01-23 16:25:24 +01:00
Alexander Overvoorde
f2971fa97e Fix badge URL some more and change badge layout 2019-12-27 15:07:05 +01:00
Alexander Overvoorde
0d789b883d Fix Docker badge URL and update ports in test code 2019-12-27 15:04:21 +01:00
Alexander Overvoorde
99484a505b Update Travis config 2019-12-27 14:58:56 +01:00
Alexander Overvoorde
ac609febcc Merge pull request #98 from Gjacquenot/master
Add CI for openstreetmap-tile-server
2019-12-27 14:52:46 +01:00
Guillaume Jacquenot
dafb4610cd 🐛 Fixed removed symbolic link 2019-12-25 21:49:31 +01:00
Guillaume Jacquenot
a90f8f1d8c 🔧 Updated .travis.yml 2019-12-24 00:02:49 +01:00
Guillaume Jacquenot
515dd2a18c 🔧 Updated .travis.yml 2019-12-23 23:36:30 +01:00
Guillaume Jacquenot
18c97f52bf 🔨 Updated .travis.yml 2019-12-23 23:10:33 +01:00
Guillaume Jacquenot
e9a26ddded 🔨 Updated .travis.yml 2019-12-23 22:47:53 +01:00
Guillaume Jacquenot
d0428523b5 🔧 Switched from postgis-3.0.0rc2 to postgis-3.0.0 2019-12-23 22:08:41 +01:00
Guillaume Jacquenot
4ca2e8f1e5 🔧 Removed build directory /home/renderer/src/osm2pgsql 2019-12-23 22:07:06 +01:00
Guillaume Jacquenot
17a2c6d631 🔧 Removed boost libraries 2019-12-23 21:51:41 +01:00
Guillaume Jacquenot
d7922429f3 Added badges in main Readme.md 2019-12-23 21:38:20 +01:00
Guillaume Jacquenot
837a38df04 🐛 Fixed remove directory /home/renderer/src 2019-12-23 21:38:20 +01:00
Guillaume Jacquenot
f69bcd2540 🔨 Switched from python-mapnik -> python3-mapnik 2019-12-23 21:38:20 +01:00
Guillaume Jacquenot
f77c926ee5 🔧 Tag docker image so that it can be pushed to dockerhub 2019-12-23 21:38:20 +01:00
Guillaume Jacquenot
bae840f240 🔧 Added sleep command before we stop everything 2019-12-23 21:38:20 +01:00
Guillaume Jacquenot
e0f7438dab 🔨 Updated Makefile 2019-12-23 21:35:45 +01:00
Guillaume Jacquenot
637e821888 🔨 Removed .git directory 2019-12-23 21:35:45 +01:00
Guillaume Jacquenot
e8e95c6001 🔨 Refactored Dockerfile 2019-12-23 21:35:45 +01:00
Guillaume Jacquenot
d8ccc2c026 🔧 Removed clang 2019-12-23 21:35:45 +01:00
Guillaume Jacquenot
b71e7a6aba 🔨 Refactored regional instruction 2019-12-23 21:35:45 +01:00
Guillaume Jacquenot
62a972736a 🔨 Updated user command 2019-12-23 21:35:45 +01:00
Guillaume Jacquenot
f9f1047400 📝 Updated .travis.yml 2019-12-23 21:35:45 +01:00
Guillaume Jacquenot
fa4b0eba0b 📝 Typo update 2019-12-22 21:01:18 +01:00
Guillaume Jacquenot
69cb804609 📝 Typo update 2019-12-22 21:01:18 +01:00
Guillaume Jacquenot
efc2cb1e2a 🔨 Refactored PosgtreSQL install 2019-12-22 21:01:18 +01:00
Guillaume Jacquenot
6de21a4595 🔨 Refactored PosgtreSQL install 2019-12-22 21:01:18 +01:00
Guillaume Jacquenot
868d2fae0a 🔨 Refactored openstreetmap-carto install 2019-12-22 21:01:18 +01:00
Guillaume Jacquenot
0527120c30 🔨 Refactored mod_tile install 2019-12-22 21:01:18 +01:00
Guillaume Jacquenot
8bac516eb1 🔨 Refactored osm2pgsql install 2019-12-22 21:01:18 +01:00
Guillaume Jacquenot
c8a79a19e4 🔨 Refactored PostGIS install 2019-12-22 21:01:18 +01:00
Guillaume Jacquenot
92708df534 🔨 Reorder ubuntu packages 2019-12-22 21:01:18 +01:00
Guillaume Jacquenot
879e5f25ab Create .travis.yml 2019-12-22 21:01:18 +01:00
Alexander Overvoorde
010f87d711 Change example server port to 8080 and include Docker Compose example 2019-12-22 13:53:12 +01:00
Alexander Overvoorde
789ff772be Change custom config to be overridable 2019-12-05 21:27:46 +01:00
Alexander Overvoorde
64c66a7d0b Make setup for automatic updates optional through UPDATES variable 2019-11-07 21:12:29 +01:00
Alexander Overvoorde
626158f677 Fix remaining references to PostgreSQL 10 2019-10-22 23:11:50 +02:00
Alexander Overvoorde
ca1626a9fc Merge branch 'Y0ngg4n-postgresql-12-upgrade' 2019-10-20 21:49:03 +02:00
Yonggan
101bb62e45 Fix README.md 2019-10-16 18:18:22 +02:00
root
e249f30d40 Upgrade to postgresql 12 2019-10-14 23:40:49 +02:00
Alexander Overvoorde
6e5f4f485d Add proper handling of docker stop 2019-10-12 12:35:16 +02:00
Alexander Overvoorde
ca4b1acb04 Add planet-import-complete file during imports 2019-10-12 12:21:10 +02:00
Alexander Overvoorde
40ebaf7934 Merge pull request #73 from stevo01/master
use tag v4.23.0 from openstreetmap-carto instead to use master
2019-10-04 19:48:38 +02:00
Steffen Volkmann
bfcc7d7c44 use tag v4.23.0 from openstreetmap-carto instead to use master 2019-10-03 18:15:41 +02:00
Alexander Overvoorde
598a48145a Merge pull request #71 from stevo01/master
use carto version 0.18.2 to solve carto conflicts / warnings
2019-09-29 16:46:17 +02:00
Steffen Volkmann
d106610e05 use carto version 0.18.2 to solve carto conflicts / warnings 2019-09-27 05:55:13 +02:00
Alexander Overvoorde
ff8655701e Update instructions for flat node usage 2019-09-26 20:09:02 +02:00
Alexander Overvoorde
a2eceb6bb5 Merge pull request #66 from stevo01/master
pull request solves issues #63 #64 #65
2019-09-26 20:06:48 +02:00
Steffen Volkmann
bea77eb8bf Dockerfile: create directory for flatnodes
and change owner of directory to renderer
2019-09-24 11:36:13 +02:00
Steffen Volkmann
33cd142850 make option -C of command osm2psql adjustable 2019-09-24 11:36:13 +02:00
Steffen Volkmann
c5a6462263 add OSM2PGSQL_EXTRA_ARGS to arguments of osm2psql call insight openstreetmap-tiles-update-expire script 2019-09-24 11:36:13 +02:00
Alexander Overvoorde
80586aff5f Fix Postgres not being reachable from outside container 2019-09-22 16:39:56 +02:00
Alexander Overvoorde
b82e37b9b5 Improve compatibility of Apache logging locations 2019-09-17 22:03:03 +02:00
Alexander Overvoorde
451f335bc5 Add ALLOW_CORS parameter 2019-08-31 13:44:23 +02:00
Alexander Overvoorde
8744ab2792 Fix flat nodes explanation 2019-08-22 22:05:45 +02:00
Alexander Overvoorde
31bf2d718b Add a way to enable options like --flat-nodes (fixes #53) 2019-08-20 19:40:24 +02:00
Alexander Overvoorde
fcc6168253 Fix updating by moving to latest version of regional extract tool 2019-08-08 21:39:20 +02:00
Alexander Overvoorde
2313b00d1e Merge pull request #46 from Istador/patch-1
README.md use the named data volume everywhere
2019-07-12 23:28:12 +02:00
Robin C. Ladiges
6834a20707 README.md use the named data volume everywhere 2019-07-11 22:26:18 +02:00
Alexander Overvoorde
4953b4f0c5 Merge pull request #44 from Istador/master
README.md consistent indentation and error in docker run command
2019-07-10 20:52:59 +02:00
Robin C. Ladiges
ce15672ca1 README.md fix: line break after command 2019-07-10 14:09:12 +02:00
Robin C. Ladiges
a21931792a README.md fix: docker run options order
docker run options must be before the image declaration
2019-07-10 14:00:08 +02:00
Robin C. Ladiges
1cca710a02 README.md consistent indentation 2019-07-10 13:58:18 +02:00
Alexander Overvoorde
2be4107bb1 Merge pull request #41 from vpithart/fix-update-script
Fix openstreetmap-tiles-update-expire - libraries for trim_osc.py
2019-07-02 23:15:43 +02:00
Vojtech Pithart
1beb5fb1e8 Fix updater - libraries for trim_osc.py 2019-07-02 13:37:57 +02:00
Alexander Overvoorde
ef1660c22c Merge branch 'stevo01-issue2' 2019-06-19 21:43:26 +02:00
Alexander Overvoorde
f9611b4cd8 Improve clarity of the automatic updating process in the README 2019-06-19 21:40:52 +02:00
Alexander Overvoorde
77e7157807 Merge branch 'issue2' of https://github.com/stevo01/openstreetmap-tile-server into stevo01-issue2 2019-06-18 19:30:07 +02:00
Alexander Overvoorde
4b062b6ce2 Merge pull request #38 from vpithart/fix-container-restarts
Fix: proper startup after docker and/or container restarts
2019-06-18 18:34:41 +02:00
Vojtech Pithart
52d5f0b4b2 Fix: postgresql (not) starts after container restart 2019-06-18 12:55:51 +02:00
Vojtech Pithart
db5f6799f0 Fix: apache (not) starts after container restart 2019-06-18 12:26:15 +02:00
Steffen Volkmann
4e5828e749 error correction wrong usage of environment variable
inside script openstreetmap-tiles-update-expire
2019-06-16 08:34:04 +02:00
Steffen Volkmann
a9392359b9 integration of update and tile expire procedure
see https://ircama.github.io/osm-carto-tutorials/updating-data/

Implements https://github.com/Overv/openstreetmap-tile-server/issues/2
2019-06-16 07:55:13 +02:00
Alexander Overvoorde
9b2b67b076 Add recommended indexes for Carto style (thanks @souladm) 2019-06-14 23:24:11 +02:00
Alexander Overvoorde
d7c2817f9f Extend troubleshooting section 2019-04-26 21:43:07 +02:00
Alexander Overvoorde
554707fc46 Add reference to benchmark by @steveo01 2019-04-23 21:44:26 +02:00
Alexander Overvoorde
564c753011 Fix work_mem being duplicated 2019-04-23 21:40:49 +02:00
Alexander Overvoorde
174bbd5fa2 Update instructions based on new embedded demo map 2019-04-23 21:39:38 +02:00
Alexander Overvoorde
5805f89698 Merge pull request #28 from stevo01/stevo-autovacuum
stevo autovacuum
2019-04-23 21:37:14 +02:00
Alexander Overvoorde
095c3badc3 Merge branch 'master' into stevo-autovacuum 2019-04-23 21:37:06 +02:00
Alexander Overvoorde
2186981cba Merge pull request #25 from pot-gov-pl/master
A lot of changes, please review and choose
2019-04-23 21:36:13 +02:00
Steffen Volkmann
a02daac961 environment variable AUTOVACUUM added
The postgressql autovacuum feature is by default active. The environment variable AUTOVACUUM allows you to switch off this feature during start of docker container.
2019-04-16 07:45:10 +02:00
Grzegorz Adam Kowalski
c99368d160 Info about shared memory error
issue #3
2019-03-19 16:47:57 +01:00
Grzegorz Adam Kowalski
c8f8d0fd71 verify SSL 2019-03-17 20:33:06 +01:00
Grzegorz Adam Kowalski
42b5783486 revert changes 2019-03-17 01:01:52 +01:00
Grzegorz Adam Kowalski
662ce85cb8 turn off autovacuum; fix psql errors 2019-03-16 23:35:15 +01:00
Grzegorz Adam Kowalski
ca32b809ea fix for lost extension scripts 2019-03-16 22:14:41 +01:00
Grzegorz Adam Kowalski
87a5ba0672 Update postgresql.custom.conf 2019-03-15 19:34:38 +01:00
Grzegorz Adam Kowalski
6b1ef3fe22 Update postgresql.custom.conf 2019-03-15 19:29:40 +01:00
Grzegorz Adam Kowalski
ab0f62d08d Custom PostgreSQL conf with minimal settings 2019-03-15 19:20:59 +01:00
Grzegorz Adam Kowalski
ad366e7c87 Fix for wrong ownership of postgres data 2019-03-15 18:33:40 +01:00
Grzegorz Adam Kowalski
1681d33635 forgotten \ 2019-03-15 18:13:02 +01:00
Grzegorz Adam Kowalski
48d257763e redirect apache server logs to stdout & stderr 2019-03-15 17:33:07 +01:00
Grzegorz Adam Kowalski
16b85cb9e2 latest postgres 10; multithread make 2019-03-15 16:50:46 +01:00
Grzegorz Adam Kowalski
7e87c26e0e Removed munin from apt-get 2019-03-14 23:20:06 +01:00
Grzegorz Adam Kowalski
a0728026b2 Remove carto -v as not needed
npm install prints out version anyway
2019-03-14 16:17:49 +01:00
Grzegorz Adam Kowalski
7875c4492e Timezone setup before apt-get tzdata 2019-03-14 15:56:07 +01:00
Grzegorz Adam Kowalski
dbbe98aaed apt-get dependency cleanup 2019-03-14 15:45:25 +01:00
Grzegorz Adam Kowalski
95e5fa8a96 cache-busting
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#apt-get
2019-03-14 12:24:17 +01:00
Grzegorz Adam Kowalski
c8a5c771ac Expose webserver and DB ports 2019-03-14 11:52:16 +01:00
Grzegorz Adam Kowalski
e37c31d2f0 stop postgresql to prevent database corruption 2019-03-14 10:42:58 +01:00
Grzegorz Adam Kowalski
18066e910f Merge pull request #2 from weissdanny/patch-2
Update Dockerfile
2019-03-14 10:22:11 +01:00
Grzegorz Adam Kowalski
2c5368f9bf Merge pull request #1 from weissdanny/patch-1
Update leaflet-demo.html
2019-03-14 10:21:16 +01:00
hhansen06
6d57819daa Update Dockerfile 2019-01-11 20:37:31 +01:00
hhansen06
cefc97edd3 Update leaflet-demo.html 2019-01-11 20:36:30 +01:00
Alexander Overvoorde
67a1bf2ded Clarify that custom .OSM.PBF file path needs to be absolute 2018-05-23 22:29:15 +02:00
10 changed files with 748 additions and 99 deletions

28
.travis.yml Normal file
View File

@@ -0,0 +1,28 @@
os: linux
language: minimal
services:
- docker
# DOCKER_USERNAME/DOCKER_PASSWORD have been configured in Travis CI
# env:
before_install:
- echo "Before install"
before_script:
- docker pull overv/openstreetmap-tile-server || true
script:
- docker build --pull --cache-from overv/openstreetmap-tile-server --tag overv/openstreetmap-tile-server .
- docker volume create openstreetmap-data
- docker run --rm -v openstreetmap-data:/var/lib/postgresql/12/main overv/openstreetmap-tile-server import
- docker run --rm -v openstreetmap-data:/var/lib/postgresql/12/main -p 8080:80 -d overv/openstreetmap-tile-server run
- sleep 30
- make DOCKER_IMAGE=overv/openstreetmap-tile-server stop
after_script:
- docker images
after_success:
- if [[ "$TRAVIS_BRANCH" == "master" ]];
then
docker images ;
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin ;
docker push overv/openstreetmap-tile-server ;
fi
notifications:
email: true

View File

@@ -1,98 +1,185 @@
FROM ubuntu:18.04
FROM ubuntu:20.04
# Based on
# https://switch2osm.org/manually-building-a-tile-server-18-04-lts/
# https://switch2osm.org/serving-tiles/manually-building-a-tile-server-18-04-lts/
# Set up environment
ENV TZ=UTC
ENV AUTOVACUUM=on
ENV UPDATES=disabled
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Install dependencies
RUN apt-get update
RUN apt-get install -y libboost-all-dev git-core tar unzip wget bzip2 build-essential autoconf libtool libxml2-dev libgeos-dev libgeos++-dev libpq-dev libbz2-dev libproj-dev munin-node munin libprotobuf-c0-dev protobuf-c-compiler libfreetype6-dev libtiff5-dev libicu-dev libgdal-dev libcairo-dev libcairomm-1.0-dev apache2 apache2-dev libagg-dev liblua5.2-dev ttf-unifont lua5.1 liblua5.1-dev libgeotiff-epsg
RUN apt-get update \
&& apt-get install -y wget gnupg2 lsb-core apt-transport-https ca-certificates curl \
&& wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
&& echo "deb [ trusted=yes ] https://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list \
&& wget --quiet -O - https://deb.nodesource.com/setup_14.x | bash - \
&& apt-get update \
&& apt-get install -y nodejs
# Set up environment and renderer user
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get install -y --no-install-recommends \
apache2 \
apache2-dev \
autoconf \
build-essential \
bzip2 \
cmake \
cron \
fonts-noto-cjk \
fonts-noto-hinted \
fonts-noto-unhinted \
gcc \
gdal-bin \
git-core \
libagg-dev \
libboost-filesystem-dev \
libboost-system-dev \
libbz2-dev \
libcairo-dev \
libcairomm-1.0-dev \
libexpat1-dev \
libfreetype6-dev \
libgdal-dev \
libgeos++-dev \
libgeos-dev \
libicu-dev \
liblua5.3-dev \
libmapnik-dev \
libpq-dev \
libproj-dev \
libprotobuf-c-dev \
libtiff5-dev \
libtool \
libxml2-dev \
lua5.3 \
make \
mapnik-utils \
osmium-tool \
osmosis \
postgis \
postgresql-12 \
postgresql-contrib-12 \
postgresql-server-dev-12 \
protobuf-c-compiler \
python-is-python3 \
python3-mapnik \
python3-lxml \
python3-psycopg2 \
python3-shapely \
python3-pip \
sudo \
tar \
ttf-unifont \
unzip \
wget \
zlib1g-dev \
&& apt-get clean autoclean \
&& apt-get autoremove --yes \
&& rm -rf /var/lib/{apt,dpkg,cache,log}/
# Install python libraries
RUN pip3 install requests \
&& pip3 install pyyaml
# Set up PostGIS
RUN wget https://download.osgeo.org/postgis/source/postgis-3.1.1.tar.gz -O postgis.tar.gz \
&& mkdir -p postgis_src \
&& tar -xvzf postgis.tar.gz --strip 1 -C postgis_src \
&& rm postgis.tar.gz \
&& cd postgis_src \
&& ./configure \
&& make -j $(nproc) \
&& make -j $(nproc) install \
&& cd .. && rm -rf postgis_src
# Set up renderer user
RUN adduser --disabled-password --gecos "" renderer
USER renderer
# Install latest osm2pgsql
RUN mkdir /home/renderer/src
WORKDIR /home/renderer/src
RUN git clone https://github.com/openstreetmap/osm2pgsql.git
WORKDIR /home/renderer/src/osm2pgsql
USER root
RUN apt-get install -y make cmake g++ libboost-dev libboost-system-dev libboost-filesystem-dev libexpat1-dev zlib1g-dev libbz2-dev libpq-dev libgeos-dev libgeos++-dev libproj-dev lua5.2 liblua5.2-dev
USER renderer
RUN mkdir build
WORKDIR /home/renderer/src/osm2pgsql/build
RUN cmake ..
RUN make
USER root
RUN make install
USER renderer
# Install and test Mapnik
USER root
RUN apt-get -y install autoconf apache2-dev libtool libxml2-dev libbz2-dev libgeos-dev libgeos++-dev libproj-dev gdal-bin libmapnik-dev mapnik-utils python-mapnik
USER renderer
RUN python -c 'import mapnik'
RUN mkdir -p /home/renderer/src \
&& cd /home/renderer/src \
&& git clone -b master https://github.com/openstreetmap/osm2pgsql.git --depth 1 \
&& cd /home/renderer/src/osm2pgsql \
&& rm -rf .git \
&& mkdir build \
&& cd build \
&& cmake .. \
&& make -j $(nproc) \
&& make -j $(nproc) install \
&& mkdir /nodes \
&& chown renderer:renderer /nodes \
&& rm -rf /home/renderer/src/osm2pgsql
# Install mod_tile and renderd
WORKDIR /home/renderer/src
RUN git clone -b switch2osm https://github.com/SomeoneElseOSM/mod_tile.git
WORKDIR /home/renderer/src/mod_tile
RUN ./autogen.sh
RUN ./configure
RUN make
USER root
RUN make install
RUN make install-mod_tile
RUN ldconfig
USER renderer
RUN mkdir -p /home/renderer/src \
&& cd /home/renderer/src \
&& git clone -b switch2osm https://github.com/SomeoneElseOSM/mod_tile.git --depth 1 \
&& cd mod_tile \
&& rm -rf .git \
&& ./autogen.sh \
&& ./configure \
&& make -j $(nproc) \
&& make -j $(nproc) install \
&& make -j $(nproc) install-mod_tile \
&& ldconfig \
&& cd ..
# Configure stylesheet
WORKDIR /home/renderer/src
RUN git clone https://github.com/gravitystorm/openstreetmap-carto.git
WORKDIR /home/renderer/src/openstreetmap-carto
USER root
RUN apt-get install -y npm nodejs
RUN npm install -g carto
USER renderer
RUN carto -v
RUN carto project.mml > mapnik.xml
# Load shapefiles
WORKDIR /home/renderer/src/openstreetmap-carto
RUN scripts/get-shapefiles.py
# Install fonts
USER root
RUN apt-get install -y fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted ttf-unifont
USER renderer
RUN mkdir -p /home/renderer/src \
&& cd /home/renderer/src \
&& git clone --single-branch --branch v5.3.1 https://github.com/gravitystorm/openstreetmap-carto.git --depth 1 \
&& cd openstreetmap-carto \
&& rm -rf .git \
&& sed -ie 's#https:\/\/naciscdn.org\/naturalearth\/110m\/cultural\/ne_110m_admin_0_boundary_lines_land.zip#https:\/\/naturalearth.s3.amazonaws.com\/110m_cultural\/ne_110m_admin_0_boundary_lines_land.zip#g' external-data.yml \
&& npm install -g carto@0.18.2 \
&& carto project.mml > mapnik.xml
# Configure renderd
USER root
RUN sed -i 's/renderaccount/renderer/g' /usr/local/etc/renderd.conf
RUN sed -i 's/hot/tile/g' /usr/local/etc/renderd.conf
USER renderer
RUN sed -i 's/renderaccount/renderer/g' /usr/local/etc/renderd.conf \
&& sed -i 's/\/truetype//g' /usr/local/etc/renderd.conf \
&& sed -i 's/hot/tile/g' /usr/local/etc/renderd.conf
# Configure Apache
USER root
RUN mkdir /var/lib/mod_tile
RUN chown renderer /var/lib/mod_tile
RUN mkdir /var/run/renderd
RUN chown renderer /var/run/renderd
RUN echo "LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so" >> /etc/apache2/conf-available/mod_tile.conf
RUN a2enconf mod_tile
RUN mkdir /var/lib/mod_tile \
&& chown renderer /var/lib/mod_tile \
&& mkdir /var/run/renderd \
&& chown renderer /var/run/renderd \
&& echo "LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so" >> /etc/apache2/conf-available/mod_tile.conf \
&& echo "LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so" >> /etc/apache2/conf-available/mod_headers.conf \
&& a2enconf mod_tile && a2enconf mod_headers
COPY apache.conf /etc/apache2/sites-available/000-default.conf
USER renderer
COPY leaflet-demo.html /var/www/html/index.html
RUN ln -sf /dev/stdout /var/log/apache2/access.log \
&& ln -sf /dev/stderr /var/log/apache2/error.log
# Install PostgreSQL
USER root
RUN apt-get install -y postgresql postgresql-contrib postgis postgresql-10-postgis-2.4
USER renderer
# Configure PosgtreSQL
COPY postgresql.custom.conf.tmpl /etc/postgresql/12/main/
RUN chown -R postgres:postgres /var/lib/postgresql \
&& chown postgres:postgres /etc/postgresql/12/main/postgresql.custom.conf.tmpl \
&& echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/12/main/pg_hba.conf \
&& echo "host all all ::/0 md5" >> /etc/postgresql/12/main/pg_hba.conf
# Copy update scripts
COPY openstreetmap-tiles-update-expire /usr/bin/
RUN chmod +x /usr/bin/openstreetmap-tiles-update-expire \
&& mkdir /var/log/tiles \
&& chmod a+rw /var/log/tiles \
&& ln -s /home/renderer/src/mod_tile/osmosis-db_replag /usr/bin/osmosis-db_replag \
&& echo "* * * * * renderer openstreetmap-tiles-update-expire\n" >> /etc/crontab
# Install trim_osc.py helper script
RUN mkdir -p /home/renderer/src \
&& cd /home/renderer/src \
&& git clone https://github.com/zverik/regional \
&& cd regional \
&& git checkout 889d630a1e1a1bacabdd1dad6e17b49e7d58cd4b \
&& rm -rf .git \
&& chmod u+x /home/renderer/src/regional/trim_osc.py
# Start running
USER root
RUN apt-get install -y sudo
COPY run.sh /
ENTRYPOINT ["/run.sh"]
CMD []
EXPOSE 80 5432

View File

@@ -1,12 +1,18 @@
.PHONY: build push test
DOCKER_IMAGE=overv/openstreetmap-tile-server
build:
docker build -t overv/openstreetmap-tile-server .
docker build -t ${DOCKER_IMAGE} .
push: build
docker push overv/openstreetmap-tile-server:latest
docker push ${DOCKER_IMAGE}:latest
test: build
docker volume create openstreetmap-data
docker run -v openstreetmap-data:/var/lib/postgresql/10/main overv/openstreetmap-tile-server import
docker run -v openstreetmap-data:/var/lib/postgresql/10/main -p 80:80 -d overv/openstreetmap-tile-server run
docker run --rm -v openstreetmap-data:/var/lib/postgresql/12/main ${DOCKER_IMAGE} import
docker run --rm -v openstreetmap-data:/var/lib/postgresql/12/main -p 8080:80 -d ${DOCKER_IMAGE} run
stop:
docker rm -f `docker ps | grep '${DOCKER_IMAGE}' | awk '{ print $$1 }'` || true
docker volume rm -f openstreetmap-data

216
README.md
View File

@@ -1,6 +1,8 @@
# openstreetmap-tile-server
This container allows you to easily set up an OpenStreetMap PNG tile server given a `.osm.pbf` file. It is based on the [latest Ubuntu 18.04 LTS guide](https://switch2osm.org/manually-building-a-tile-server-18-04-lts/) from [switch2osm.org](https://switch2osm.org/) and therefore uses the default OpenStreetMap style.
[![Build Status](https://travis-ci.org/Overv/openstreetmap-tile-server.svg?branch=master)](https://travis-ci.org/Overv/openstreetmap-tile-server) [![](https://images.microbadger.com/badges/image/overv/openstreetmap-tile-server.svg)](https://microbadger.com/images/overv/openstreetmap-tile-server "openstreetmap-tile-server")
This container allows you to easily set up an OpenStreetMap PNG tile server given a `.osm.pbf` file. It is based on the [latest Ubuntu 18.04 LTS guide](https://switch2osm.org/serving-tiles/manually-building-a-tile-server-18-04-lts/) from [switch2osm.org](https://switch2osm.org/) and therefore uses the default OpenStreetMap style.
## Setting up the server
@@ -10,41 +12,233 @@ First create a Docker volume to hold the PostgreSQL database that will contain t
Next, download an .osm.pbf extract from geofabrik.de for the region that you're interested in. You can then start importing it into PostgreSQL by running a container and mounting the file as `/data.osm.pbf`. For example:
docker run -v luxembourg.osm.pbf:/data.osm.pbf -v openstreetmap-data:/var/lib/postgresql/10/main overv/openstreetmap-tile-server import
```
docker run \
-v /absolute/path/to/luxembourg.osm.pbf:/data.osm.pbf \
-v openstreetmap-data:/var/lib/postgresql/12/main \
overv/openstreetmap-tile-server \
import
```
If the container exits without errors, then your data has been successfully imported and you are now ready to run the tile server.
### Automatic updates (optional)
If your import is an extract of the planet and has polygonal bounds associated with it, like those from geofabrik.de, then it is possible to set your server up for automatic updates. Make sure to reference both the OSM file and the polygon file during the import process to facilitate this, and also include the `UPDATES=enabled` variable:
```
docker run \
-e UPDATES=enabled \
-v /absolute/path/to/luxembourg.osm.pbf:/data.osm.pbf \
-v /absolute/path/to/luxembourg.poly:/data.poly \
-v openstreetmap-data:/var/lib/postgresql/12/main \
overv/openstreetmap-tile-server \
import
```
Refer to the section *Automatic updating and tile expiry* to actually enable the updates while running the tile server.
### Letting the container download the file
It is also possible to let the container download files for you rather than mounting them in advance by using the `DOWNLOAD_PBF` and `DOWNLOAD_POLY` parameters:
```
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 openstreetmap-data:/var/lib/postgresql/12/main \
overv/openstreetmap-tile-server \
import
```
## Running the server
Run the server like this:
docker run -p 80:80 -v openstreetmap-data:/var/lib/postgresql/10/main -d overv/openstreetmap-tile-server run
```
docker run \
-p 8080:80 \
-v openstreetmap-data:/var/lib/postgresql/12/main \
-d overv/openstreetmap-tile-server \
run
```
Your tiles will now be available at http://localhost:80/tile/{z}/{x}/{y}.png. If you open `leaflet-demo.html` in your browser, you should be able to see the tiles served by your own machine. Note that it will initially quite a bit of time to render the larger tiles for the first time.
Your tiles will now be available at `http://localhost:8080/tile/{z}/{x}/{y}.png`. The demo map in `leaflet-demo.html` will then be available on `http://localhost:8080`. Note that it will initially take quite a bit of time to render the larger tiles for the first time.
## Preserving rendered tiles
### Using Docker Compose
The `docker-compose.yml` file included with this repository shows how the aforementioned command can be used with Docker Compose to run your server.
### Preserving rendered tiles
Tiles that have already been rendered will be stored in `/var/lib/mod_tile`. To make sure that this data survives container restarts, you should create another volume for it:
docker volume create openstreetmap-rendered-tiles
docker run -p 80:80 -v openstreetmap-data:/var/lib/postgresql/10/main -v openstreetmap-rendered-tiles:/var/lib/mod_tile -d overv/openstreetmap-tile-server run
```
docker volume create openstreetmap-rendered-tiles
docker run \
-p 8080:80 \
-v openstreetmap-data:/var/lib/postgresql/12/main \
-v openstreetmap-rendered-tiles:/var/lib/mod_tile \
-d overv/openstreetmap-tile-server \
run
```
## Performance tuning
**If you do this, then make sure to also run the import with the `openstreetmap-rendered-tiles` volume to make sure that caching works properly across updates!**
### Enabling automatic updating (optional)
Given that you've set up your import as described in the *Automatic updates* section during server setup, you can enable the updating process by setting the `UPDATES` variable while running your server as well:
```
docker run \
-p 8080:80 \
-e UPDATES=enabled \
-v openstreetmap-data:/var/lib/postgresql/12/main \
-v openstreetmap-rendered-tiles:/var/lib/mod_tile \
-d overv/openstreetmap-tile-server \
run
```
This will enable a background process that automatically downloads changes from the OpenStreetMap server, filters them for the relevant region polygon you specified, updates the database and finally marks the affected tiles for rerendering.
### Cross-origin resource sharing
To enable the `Access-Control-Allow-Origin` header to be able to retrieve tiles from other domains, simply set the `ALLOW_CORS` variable to `enabled`:
```
docker run \
-p 8080:80 \
-v openstreetmap-data:/var/lib/postgresql/12/main \
-e ALLOW_CORS=enabled \
-d overv/openstreetmap-tile-server \
run
```
### Connecting to Postgres
To connect to the PostgreSQL database inside the container, make sure to expose port 5432:
```
docker run \
-p 8080:80 \
-p 5432:5432 \
-v openstreetmap-data:/var/lib/postgresql/12/main \
-d overv/openstreetmap-tile-server \
run
```
Use the user `renderer` and the database `gis` to connect.
```
psql -h localhost -U renderer gis
```
The default password is `renderer`, but it can be changed using the `PGPASSWORD` environment variable:
```
docker run \
-p 8080:80 \
-p 5432:5432 \
-e PGPASSWORD=secret \
-v openstreetmap-data:/var/lib/postgresql/12/main \
-d overv/openstreetmap-tile-server \
run
```
## Performance tuning and tweaking
Details for update procedure and invoked scripts can be found here [link](https://ircama.github.io/osm-carto-tutorials/updating-data/).
### THREADS
The import and tile serving processes use 4 threads by default, but this number can be changed by setting the `THREADS` environment variable. For example:
```
docker run \
-p 8080:80 \
-e THREADS=24 \
-v openstreetmap-data:/var/lib/postgresql/12/main \
-d overv/openstreetmap-tile-server \
run
```
docker run -p 80:80 -e THREADS=24 -v openstreetmap-data:/var/lib/postgresql/10/main -d overv/openstreetmap-tile-server run
### CACHE
The import and tile serving processes use 800 MB RAM cache by default, but this number can be changed by option -C. For example:
```
docker run \
-p 8080:80 \
-e "OSM2PGSQL_EXTRA_ARGS=-C 4096" \
-v openstreetmap-data:/var/lib/postgresql/12/main \
-d overv/openstreetmap-tile-server \
run
```
### AUTOVACUUM
The database use the autovacuum feature by default. This behavior can be changed with `AUTOVACUUM` environment variable. For example:
```
docker run \
-p 8080:80 \
-e AUTOVACUUM=off \
-v openstreetmap-data:/var/lib/postgresql/12/main \
-d overv/openstreetmap-tile-server \
run
```
### Flat nodes
If you are planning to import the entire planet or you are running into memory errors then you may want to enable the `--flat-nodes` option for osm2pgsql. You can then use it during the import process as follows:
```
docker run \
-v /absolute/path/to/luxembourg.osm.pbf:/data.osm.pbf \
-v openstreetmap-nodes:/nodes \
-v openstreetmap-data:/var/lib/postgresql/12/main \
-e "OSM2PGSQL_EXTRA_ARGS=--flat-nodes /nodes/flat_nodes.bin" \
overv/openstreetmap-tile-server \
import
```
>Note that if you use a folder other than `/nodes` then you must make sure that you manually set the owner to `renderer`!
### Benchmarks
You can find an example of the import performance to expect with this image on the [OpenStreetMap wiki](https://wiki.openstreetmap.org/wiki/Osm2pgsql/benchmarks#debian_9_.2F_openstreetmap-tile-server).
## Troubleshooting
### ERROR: could not resize shared memory segment / No space left on device
If you encounter such entries in the log, it will mean that the default shared memory limit (64 MB) is too low for the container and it should be raised:
```
renderd[121]: ERROR: failed to render TILE ajt 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
```
To raise it use `--shm-size` parameter. For example:
```
docker run \
-p 8080:80 \
-v openstreetmap-data:/var/lib/postgresql/12/main \
--shm-size="192m" \
-d overv/openstreetmap-tile-server \
run
```
For too high values you may notice excessive CPU load and memory usage. It might be that you will have to experimentally find the best values for yourself.
### The import process unexpectedly exits
You may be running into problems with memory usage during the import. Have a look at the "Flat nodes" section in this README.
## License
```
Copyright 2018 Alexander Overvoorde
Copyright 2019 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
https://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,

View File

@@ -10,4 +10,8 @@
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<IfDefine ALLOW_CORS>
Header set Access-Control-Allow-Origin "*"
</IfDefine>
</VirtualHost>

14
docker-compose.yml Normal file
View File

@@ -0,0 +1,14 @@
version: '3'
services:
map:
image: overv/openstreetmap-tile-server
volumes:
- openstreetmap-data:/var/lib/postgresql/12/main
ports:
- "8080:80"
command: "run"
volumes:
openstreetmap-data:
external: true

View File

@@ -25,7 +25,7 @@
<script>
var map = L.map('map').setView([0, 0], 3);
L.tileLayer('http://localhost/tile/{z}/{x}/{y}.png', {
L.tileLayer('/tile/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
id: 'base'

View File

@@ -0,0 +1,206 @@
#!/bin/sh
set -e
#------------------------------------------------------------------------------
# AJT - change directory to mod_tile directory so that we can run replag
# and other things directly from this script when run from cron.
# Change the actual location to wherever installed locally.
#------------------------------------------------------------------------------
export PATH=.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ACCOUNT=renderer
cd /home/$ACCOUNT/src/mod_tile/
#------------------------------------------------------------------------------
# Extra OSM2PGSQL_OPTIONS may need setting if a tag transform script is
# in use. See https://github.com/SomeoneElseOSM/SomeoneElse-style and
# http://wiki.openstreetmap.org/wiki/User:SomeoneElse/Ubuntu_1404_tileserver_load
# The database name always needs setting.
#------------------------------------------------------------------------------
OSMOSIS_BIN=osmosis
OSM2PGSQL_BIN=osm2pgsql
TRIM_BIN=/home/$ACCOUNT/src/regional/trim_osc.py
DBNAME=gis
OSM2PGSQL_OPTIONS="-d $DBNAME -G --hstore --tag-transform-script /home/renderer/src/openstreetmap-carto/openstreetmap-carto.lua --number-processes ${THREADS:-4} -S /home/renderer/src/openstreetmap-carto/openstreetmap-carto.style ${OSM2PGSQL_EXTRA_ARGS}"
#------------------------------------------------------------------------------
# When using trim_osc.py we can define either a bounding box (such as this
# example for England and Wales) or a polygon.
# See https://github.com/zverik/regional .
# This area will usually correspond to the data originally loaded.
#------------------------------------------------------------------------------
TRIM_POLY_FILE="/var/lib/mod_tile/data.poly"
TRIM_OPTIONS="-d $DBNAME"
#TRIM_REGION_OPTIONS="-b -14.17 48.85 2.12 61.27"
TRIM_REGION_OPTIONS="-p $TRIM_POLY_FILE"
BASE_DIR=/var/lib/mod_tile
LOG_DIR=/var/log/tiles/
WORKOSM_DIR=$BASE_DIR/.osmosis
LOCK_FILE=/tmp/openstreetmap-update-expire-lock.txt
CHANGE_FILE=$BASE_DIR/changes.osc.gz
EXPIRY_FILE=$BASE_DIR/dirty_tiles
STOP_FILE=$BASE_DIR/stop.txt
OSMOSISLOG=$LOG_DIR/osmosis.log
PGSQLLOG=$LOG_DIR/osm2pgsql.log
EXPIRYLOG=$LOG_DIR/expiry.log
RUNLOG=$LOG_DIR/run.log
#------------------------------------------------------------------------------
# The tile expiry section below can re-render, delete or dirty expired tiles.
# By default, tiles between EXPIRY_MINZOOM and EXPIRY_MAXZOOM are rerendered.
# "render_expired" can optionally delete (and/or dirty) tiles above a certail
# threshold rather than rendering them.
# Here we expire (but don't immediately rerender) tiles between zoom levels
# 13 and 18 and delete between 19 and 20.
#------------------------------------------------------------------------------
EXPIRY_MINZOOM=13
EXPIRY_TOUCHFROM=13
EXPIRY_DELETEFROM=19
EXPIRY_MAXZOOM=20
#*************************************************************************
#*************************************************************************
m_info()
{
echo "[`date +"%Y-%m-%d %H:%M:%S"`] $$ $1" >> "$RUNLOG"
}
m_error()
{
echo "[`date +"%Y-%m-%d %H:%M:%S"`] $$ [error] $1" >> "$RUNLOG"
m_info "resetting state"
/bin/cp $WORKOSM_DIR/last.state.txt $WORKOSM_DIR/state.txt || true
rm "$CHANGE_FILE" || true
rm "$EXPIRY_FILE.$$" || true
rm "$LOCK_FILE"
exit
}
m_ok()
{
echo "[`date +"%Y-%m-%d %H:%M:%S"`] $$ $1" >> "$RUNLOG"
}
getlock()
{
if [ -s $1 ]; then
if [ "$(ps -p `cat $1` | wc -l)" -gt 1 ]; then
return 1 #false
fi
fi
echo $$ >"$1"
return 0 #true
}
freelock()
{
rm "$1"
rm "$CHANGE_FILE"
}
if [ $# -eq 1 ] ; then
m_info "Initialising Osmosis replication system to $1"
mkdir $WORKOSM_DIR
$OSMOSIS_BIN --read-replication-interval-init workingDirectory=$WORKOSM_DIR 1>&2 2> "$OSMOSISLOG"
wget "https://replicate-sequences.osm.mazdermind.de/?"$1"T00:00:00Z" -O $WORKOSM_DIR/state.txt
mv $WORKOSM_DIR/configuration.txt $WORKOSM_DIR/configuration_orig.txt
sed "s!baseUrl=http://planet.openstreetmap.org/replication/minute!baseUrl=https://planet.openstreetmap.org/replication/minute!" $WORKOSM_DIR/configuration_orig.txt > $WORKOSM_DIR/configuration.txt
else
# make sure the lockfile is removed when we exit and then claim it
if ! getlock "$LOCK_FILE"; then
m_info "pid `cat $LOCK_FILE` still running"
exit 3
fi
if [ -e $STOP_FILE ]; then
m_info "stopped"
exit 2
fi
# -----------------------------------------------------------------------------
# Add disk space check from https://github.com/zverik/regional
# -----------------------------------------------------------------------------
MIN_DISK_SPACE_MB=500
if `python -c "import os, sys; st=os.statvfs('$BASE_DIR'); sys.exit(1 if st.f_bavail*st.f_frsize/1024/1024 > $MIN_DISK_SPACE_MB else 0)"`; then
m_info "there is less than $MIN_DISK_SPACE_MB MB left"
exit 4
fi
seq=`cat $WORKOSM_DIR/state.txt | grep sequenceNumber | cut -d= -f2`
m_ok "start import from seq-nr $seq, replag is `osmosis-db_replag -h`"
/bin/cp $WORKOSM_DIR/state.txt $WORKOSM_DIR/last.state.txt
m_ok "downloading diff"
if ! $OSMOSIS_BIN --read-replication-interval workingDirectory=$WORKOSM_DIR --simplify-change --write-xml-change $CHANGE_FILE 1>&2 2> "$OSMOSISLOG"; then
m_error "Osmosis error"
fi
if [ -f $TRIM_POLY_FILE ] ; then
m_ok "filtering diff"
if ! $TRIM_BIN $TRIM_OPTIONS $TRIM_REGION_OPTIONS -z $CHANGE_FILE $CHANGE_FILE 1>&2 2>> "$RUNLOG"; then
m_error "Trim_osc error"
fi
else
m_ok "filtering diff skipped"
fi
m_ok "importing diff"
#------------------------------------------------------------------------------
# Previously openstreetmap-tiles-update-expire tried to dirty layer
# "$EXPIRY_MAXZOOM - 3" (which was 15) only. Instead we write all expired
# tiles in range to the list (note the "-" rather than ":" in the "-e"
# parameter).
#------------------------------------------------------------------------------
if ! $OSM2PGSQL_BIN -a --slim -e$EXPIRY_MINZOOM-$EXPIRY_MAXZOOM $OSM2PGSQL_OPTIONS -o "$EXPIRY_FILE.$$" $CHANGE_FILE 1>&2 2> "$PGSQLLOG"; then
m_error "osm2pgsql error"
fi
#------------------------------------------------------------------------------
# The lockfile is normally removed before we expire tiles because that is
# something thatcan be done in parallel with further processing. In order to
# avoid rework, if actually rerendering is done rather than just deleting or
# dirtying, it makes sense to move it lower down.
#------------------------------------------------------------------------------
# m_ok "Import complete; removing lock file"
# freelock "$LOCK_FILE"
m_ok "expiring tiles"
#------------------------------------------------------------------------------
# When expiring tiles we need to define the style sheet if it's not "default".
# In this case it's "ajt".
# Previously all tiles on the "dirty" list between $EXPIRY_MINZOOM and
# $EXPIRY_MAXZOOM were dirtied. We currently re-render
# tiles >= $EXPIRY_MINZOOM and < $EXPIRY_DELETEFROM, expiry from 14 and
# delete >= $EXPIRY_DELETEFROM and <= $EXPIRY_MAXZOOM.
# The default path to renderd.sock is fixed.
#------------------------------------------------------------------------------
if ! render_expired --map=ajt --min-zoom=$EXPIRY_MINZOOM --touch-from=$EXPIRY_TOUCHFROM --delete-from=$EXPIRY_DELETEFROM --max-zoom=$EXPIRY_MAXZOOM -s /var/run/renderd/renderd.sock < "$EXPIRY_FILE.$$" 2>&1 | tail -8 >> "$EXPIRYLOG"; then
m_info "Expiry failed"
fi
rm "$EXPIRY_FILE.$$"
#------------------------------------------------------------------------------
# Only remove the lock file after expiry (if system is slow we want to delay
# the next import, not have multiple render_expired processes running)
#------------------------------------------------------------------------------
freelock "$LOCK_FILE"
m_ok "Done with import"
fi

View File

@@ -0,0 +1,25 @@
# Suggested minimal settings from
# https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/
shared_buffers = 128MB
min_wal_size = 1GB
max_wal_size = 2GB
maintenance_work_mem = 256MB
# Suggested settings from
# https://github.com/openstreetmap/chef/blob/master/roles/tile.rb#L38-L45
max_connections = 250
temp_buffers = 32MB
work_mem = 128MB
wal_buffers = 1024kB
wal_writer_delay = 500ms
commit_delay = 10000
# checkpoint_segments = 60 # unrecognized in psql 10.7.1
max_wal_size = 2880MB
random_page_cost = 1.1
track_activity_query_size = 16384
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.02
listen_addresses = '*'

95
run.sh
View File

@@ -1,5 +1,15 @@
#!/bin/bash
function createPostgresConfig() {
cp /etc/postgresql/12/main/postgresql.custom.conf.tmpl /etc/postgresql/12/main/conf.d/postgresql.custom.conf
sudo -u postgres echo "autovacuum = $AUTOVACUUM" >> /etc/postgresql/12/main/conf.d/postgresql.custom.conf
cat /etc/postgresql/12/main/conf.d/postgresql.custom.conf
}
function setPostgresPassword() {
sudo -u postgres psql -c "ALTER USER renderer PASSWORD '${PGPASSWORD:-renderer}'"
}
if [ "$#" -ne 1 ]; then
echo "usage: <import|run>"
echo "commands:"
@@ -7,11 +17,21 @@ if [ "$#" -ne 1 ]; then
echo " run: Runs Apache and renderd to serve tiles at /tile/{z}/{x}/{y}.png"
echo "environment variables:"
echo " THREADS: defines number of threads used for importing / tile rendering"
echo " UPDATES: consecutive updates (enabled/disabled)"
exit 1
fi
set -x
if [ "$1" = "import" ]; then
# Ensure that database directory is in right state
chown postgres:postgres -R /var/lib/postgresql
if [ ! -f /var/lib/postgresql/12/main/PG_VERSION ]; then
sudo -u postgres /usr/lib/postgresql/12/bin/pg_ctl -D /var/lib/postgresql/12/main/ initdb -o "--locale C.UTF-8"
fi
# Initialize PostgreSQL
createPostgresConfig
service postgresql start
sudo -u postgres createuser renderer
sudo -u postgres createdb -E UTF8 -O renderer gis
@@ -19,29 +39,94 @@ if [ "$1" = "import" ]; then
sudo -u postgres psql -d gis -c "CREATE EXTENSION hstore;"
sudo -u postgres psql -d gis -c "ALTER TABLE geometry_columns OWNER TO renderer;"
sudo -u postgres psql -d gis -c "ALTER TABLE spatial_ref_sys OWNER TO renderer;"
setPostgresPassword
# Download Luxembourg as sample if no data is provided
if [ ! -f /data.osm.pbf ]; then
if [ ! -f /data.osm.pbf ] && [ -z "$DOWNLOAD_PBF" ]; then
echo "WARNING: No import file at /data.osm.pbf, so importing Luxembourg as example..."
wget -nv http://download.geofabrik.de/europe/luxembourg-latest.osm.pbf -O /data.osm.pbf
DOWNLOAD_PBF="https://download.geofabrik.de/europe/luxembourg-latest.osm.pbf"
DOWNLOAD_POLY="https://download.geofabrik.de/europe/luxembourg.poly"
fi
if [ -n "$DOWNLOAD_PBF" ]; then
echo "INFO: Download PBF file: $DOWNLOAD_PBF"
wget $WGET_ARGS "$DOWNLOAD_PBF" -O /data.osm.pbf
if [ -n "$DOWNLOAD_POLY" ]; then
echo "INFO: Download PBF-POLY file: $DOWNLOAD_POLY"
wget $WGET_ARGS "$DOWNLOAD_POLY" -O /data.poly
fi
fi
if [ "$UPDATES" = "enabled" ]; then
# determine and set osmosis_replication_timestamp (for consecutive updates)
osmium fileinfo /data.osm.pbf > /var/lib/mod_tile/data.osm.pbf.info
osmium fileinfo /data.osm.pbf | grep 'osmosis_replication_timestamp=' | cut -b35-44 > /var/lib/mod_tile/replication_timestamp.txt
REPLICATION_TIMESTAMP=$(cat /var/lib/mod_tile/replication_timestamp.txt)
# initial setup of osmosis workspace (for consecutive updates)
sudo -u renderer openstreetmap-tiles-update-expire $REPLICATION_TIMESTAMP
fi
# copy polygon file if available
if [ -f /data.poly ]; then
sudo -u renderer cp /data.poly /var/lib/mod_tile/data.poly
fi
# Import data
sudo -u renderer osm2pgsql -d gis --create --slim -G --hstore --tag-transform-script /home/renderer/src/openstreetmap-carto/openstreetmap-carto.lua -C 2048 --number-processes ${THREADS:-4} -S /home/renderer/src/openstreetmap-carto/openstreetmap-carto.style /data.osm.pbf
sudo -u renderer osm2pgsql -d gis --create --slim -G --hstore --tag-transform-script /home/renderer/src/openstreetmap-carto/openstreetmap-carto.lua --number-processes ${THREADS:-4} -S /home/renderer/src/openstreetmap-carto/openstreetmap-carto.style /data.osm.pbf ${OSM2PGSQL_EXTRA_ARGS}
# Create indexes
sudo -u postgres psql -d gis -f /home/renderer/src/openstreetmap-carto/indexes.sql
#Import external data
sudo chown -R renderer: /home/renderer/src
sudo -u renderer python3 /home/renderer/src/openstreetmap-carto/scripts/get-external-data.py -c /home/renderer/src/openstreetmap-carto/external-data.yml -D /home/renderer/src/openstreetmap-carto/data
# Register that data has changed for mod_tile caching purposes
touch /var/lib/mod_tile/planet-import-complete
service postgresql stop
exit 0
fi
if [ "$1" = "run" ]; then
# Clean /tmp
rm -rf /tmp/*
# Fix postgres data privileges
chown postgres:postgres /var/lib/postgresql -R
# Configure Apache CORS
if [ "$ALLOW_CORS" == "enabled" ] || [ "$ALLOW_CORS" == "1" ]; then
echo "export APACHE_ARGUMENTS='-D ALLOW_CORS'" >> /etc/apache2/envvars
fi
# Initialize PostgreSQL and Apache
createPostgresConfig
service postgresql start
service apache2 restart
setPostgresPassword
# Configure renderd threads
sed -i -E "s/num_threads=[0-9]+/num_threads=${THREADS:-4}/g" /usr/local/etc/renderd.conf
# Run
sudo -u renderer renderd -f -c /usr/local/etc/renderd.conf
# start cron job to trigger consecutive updates
if [ "$UPDATES" = "enabled" ] || [ "$UPDATES" = "1" ]; then
/etc/init.d/cron start
fi
# Run while handling docker stop's SIGTERM
stop_handler() {
kill -TERM "$child"
}
trap stop_handler SIGTERM
sudo -u renderer renderd -f -c /usr/local/etc/renderd.conf &
child=$!
wait "$child"
service postgresql stop
exit 0
fi