Compare commits

..

32 Commits

Author SHA1 Message Date
nobohan
7d636bc777 drone: add step for importing
Some checks failed
continuous-integration/drone/tag Build is failing
2023-07-03 15:53:12 +02:00
nobohan
0a9fb88da2 drone: remove destination for downloading pbf
All checks were successful
continuous-integration/drone/tag Build is passing
2023-07-03 15:20:08 +02:00
nobohan
c67dfbeb56 init drone: download pbf with plugin
Some checks failed
continuous-integration/drone/tag Build is failing
2023-07-03 15:12:50 +02:00
nobohan
a62a10552b correct generate_tiles command: adding compilation of style 2023-06-29 08:59:37 +02:00
nobohan
b994c64d6b Cyclosm: add contours in db 2023-06-26 17:19:36 +02:00
nobohan
f5c2022e7f Cyclosm: add hillshade 2023-06-26 15:54:16 +02:00
nobohan
830155628f Cyclosm: change the 'default' name for apache and renderd to 'cyclosm' 2023-06-26 10:27:25 +02:00
nobohan
40a760e941 Cyclosm: remove (deprecated) font warning in mapnik 2023-06-26 10:26:44 +02:00
nobohan
6488beaf79 Cyclosm: Add cyclosm SQL views 2023-06-26 09:22:40 +02:00
nobohan
0fca85665f Cyclosm: factorise compile-style function and change dbname in project.mml 2023-06-26 09:02:43 +02:00
nobohan
ebe7d6b336 Cyclosm: move symbols folder 2023-06-25 22:48:48 +02:00
nobohan
0bbebc0f4a cyclosm: add downloaded shp 2023-06-25 22:29:33 +02:00
nobohan
c2b79805a0 adapt renderd.conf and add compilation of cyclosm style 2023-06-25 17:40:32 +02:00
nobohan
6276d18671 adapt carto mapnik xml compilation and osm2pgsql import for cyclosm 2023-06-25 10:49:01 +02:00
nobohan
c2ce0cdd36 add a generate_tile command 2023-06-22 16:52:25 +02:00
nobohan
9da2918abc upd README about run 2023-06-22 15:30:53 +02:00
nobohan
f0592abb8a FEATURE add an utility for generating tiles 2023-06-22 14:26:41 +02:00
nobohan
fad138600a Add disk for database and tiles, instructions for import 2023-06-22 12:11:43 +02:00
nobohan
291ef08507 FEATURE: add a command for accessing the bash terminal 2023-06-22 11:08:13 +02:00
nobohan
773cf9c60f update README for Champs-Libres 2023-06-22 10:38:09 +02:00
Curtis Yung
61270b8bff Add support to PostgreSQL 15 (#356)
* Update Dockerfile

add support to PostgreSQL 15 and alter encryption method to scram-sha-256 instead of md5

* Update run.sh

add support to PostgreSQL 15
2023-03-18 21:45:25 +01:00
galewis2
f6a6ad846a Fix path for consistency (#314) 2023-03-18 21:14:32 +01:00
Stepan
e144c4873b readme give possibility to copy/paste command into linux terminal (#368) 2023-03-18 21:10:32 +01:00
Robin C. Ladiges
10571b77b7 validate version tags (#308)
so non-semver tags don't trigger a deployment that will fail.

It's not a normal regexp syntax. Dots `.` will only match dots and not any characters.
2022-09-27 10:04:05 -04:00
Mikael Wikstrom
a814c0306a upgrade leaflet from v1.7.1 to v1.8.0 (#315)
Leaflet 1.8.0	Stable version, released on April 18, 2022.
Leaflet 1.7.1	Previous stable version, released on September 3, 2020.

install leaflet localy so server works offline

Co-authored-by: galewis2 <62433564+galewis2@users.noreply.github.com>
2022-09-27 10:03:13 -04:00
Mikael Wikstrom
fdacfe78ef Add favicon.ico (#316) 2022-09-27 10:00:44 -04:00
galewis2
54624a969e Update Dockerfile (#307) 2022-08-03 23:40:03 +02:00
balchen
005fe6968f Added new environment variables for tile expiration to README.md (#299) 2022-07-26 23:10:49 +02:00
galewis2
25a661e3da Actually allow modifying the replication URL (#297) 2022-07-22 09:18:24 -04:00
balchen
67d127b201 Use tile expiration settings from env if set, or default values as be… (#296)
* Use tile expiration settings from env if set, or default values as before.

* Update openstreetmap-tiles-update-expire.sh

Co-authored-by: galewis2 <62433564+galewis2@users.noreply.github.com>
2022-07-22 13:33:07 +02:00
Robin C. Ladiges
afd62f33a0 multiarch build for additional linux/arm64/v8 support (#292)
* multiarch build for additional linux/arm64/v8 and linux/arm/v7 support

This commit fixes issue #291

* print logs of run command

* drop arm/v7 for now (untested)

* build arm64/v8 parallel during the build stage (without testing the image)
2022-07-19 08:59:17 +02:00
galewis2
21b409863e Simplify parsing of timestamp (#294) 2022-07-15 08:19:46 -04:00
15 changed files with 398 additions and 80 deletions

40
.drone.yml Normal file
View File

@@ -0,0 +1,40 @@
---
kind: pipeline
type: docker
name: default
trigger:
event:
- tag
clone:
disable: true
steps:
- name: clone
image: plugins/git
settings:
recursive: true
- name: download_pbf
image: plugins/download
settings:
source: https://download.geofabrik.de/europe/luxembourg-latest.osm.pbf
#destination: /drone/src/
- name: import_pbf
image: plugins/docker
settings:
context: .
dockerfile: Dockerfile
pull_image: true
username:
from_secret: docker_username
password:
from_secret: docker_password
registry: h3m6q87t.gra7.container-registry.ovh.net
repo: h3m6q87t.gra7.container-registry.ovh.net/osm_tile_server/map
tag:
- ${DRONE_TAG:=latest}
commands:
- sh run.sh import

View File

@@ -5,7 +5,7 @@ on:
branches: branches:
- master - master
tags: tags:
- 'v*' - 'v[0-9]+.[0-9]+.[0-9]+'
pull_request: pull_request:
branches: branches:
- master - master
@@ -21,49 +21,65 @@ env:
jobs: jobs:
test: build:
strategy:
matrix:
include:
- arch : amd64
mode : build-and-test
- arch : arm64
variant : v8
mode : build-only
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
VOLUME : osm-db VOLUME : osm-db
CONTAINER : osm-www CONTAINER : osm-www
MOUNT : /data/database/ MOUNT : /data/database/
PLATFORM : linux/${{ matrix.arch }}${{ (matrix.variant != '' && format('/{0}', matrix.variant)) || '' }}
steps: steps:
- -
name: Checkout name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v3
- -
name: Set up QEMU name: Set up QEMU
uses: docker/setup-qemu-action@v1 uses: docker/setup-qemu-action@v2
with:
platforms: ${{ matrix.arch }}
- -
name: Set up Docker Buildx name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1 uses: docker/setup-buildx-action@v2
- -
name: Environment name: Environment
run : | run : |
echo IMAGE=$(echo ${{ env.IMAGE }} | tr '[:upper:]' '[:lower:]') >>$GITHUB_ENV echo IMAGE=$(echo ${{ env.IMAGE }} | tr '[:upper:]' '[:lower:]') >>$GITHUB_ENV
- -
name: Docker build name: Docker build
uses: docker/build-push-action@v2 uses: docker/build-push-action@v3
with: with:
pull : true pull : true
load : true load : ${{ matrix.mode == 'build-and-test' }}
platforms : ${{ env.PLATFORM }}
context : . context : .
file : ./Dockerfile file : ./Dockerfile
tags : ${{env.IMAGE}}:${{env.TAG}} tags : ${{ env.IMAGE }}:${{ env.TAG }}
cache-from : type=gha,scope=${{ github.workflow }} cache-from : type=gha,scope=${{ github.workflow }}:${{ env.PLATFORM }}
cache-to : type=gha,scope=${{ github.workflow }},mode=max cache-to : type=gha,scope=${{ github.workflow }}:${{ env.PLATFORM }},mode=max
- -
name: Import Luxembourg name: Import Luxembourg
if : ${{ matrix.mode == 'build-and-test' }}
run : | run : |
docker volume create ${VOLUME} docker volume create ${VOLUME}
docker run --rm --shm-size=128M -v ${VOLUME}:${MOUNT} -e UPDATES=enabled ${IMAGE}:${TAG} import docker run --rm --shm-size=128M -v ${VOLUME}:${MOUNT} -e UPDATES=enabled ${IMAGE}:${TAG} import
- -
name: Start server name: Start server
if : ${{ matrix.mode == 'build-and-test' }}
run : | run : |
docker run --rm --shm-size=128M -v ${VOLUME}:${MOUNT} -e UPDATES=enabled -p 80:80 -d --name ${CONTAINER} ${IMAGE}:${TAG} run docker run --shm-size=128M -v ${VOLUME}:${MOUNT} -e UPDATES=enabled -p 80:80 -d --name ${CONTAINER} ${IMAGE}:${TAG} run
sleep 30 sleep 30
docker logs ${CONTAINER}
- -
name: Download tiles name: Download tiles
if : ${{ matrix.mode == 'build-and-test' }}
run : | run : |
curl http://localhost/tile/0/0/0.png --fail -o 000.png curl http://localhost/tile/0/0/0.png --fail -o 000.png
curl http://localhost/tile/1/0/0.png --fail -o 100.png curl http://localhost/tile/1/0/0.png --fail -o 100.png
@@ -74,12 +90,14 @@ jobs:
curl http://localhost/tile/18/135536/89345.png --fail -o example.png curl http://localhost/tile/18/135536/89345.png --fail -o example.png
- -
name: Upload tiles name: Upload tiles
if : ${{ matrix.mode == 'build-and-test' }}
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
with: with:
name: tiles name: tiles
path: '*.png' path: '*.png'
- -
name: Verify tiles name: Verify tiles
if : ${{ matrix.mode == 'build-and-test' }}
run : | run : |
sha1sum *.png sha1sum *.png
sha1sum --check <<EOF sha1sum --check <<EOF
@@ -100,6 +118,7 @@ jobs:
done done
- -
name: Cleanup name: Cleanup
if : ${{ matrix.mode == 'build-and-test' }}
run : | run : |
docker rm --force --volumes ${CONTAINER} docker rm --force --volumes ${CONTAINER}
docker volume rm --force ${VOLUME} docker volume rm --force ${VOLUME}
@@ -108,7 +127,7 @@ jobs:
deploy: deploy:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: needs:
- test - build
if: ${{ github.event_name != 'pull_request' }} if: ${{ github.event_name != 'pull_request' }}
steps: steps:
- -
@@ -122,7 +141,7 @@ jobs:
- -
name: Docker meta name: Docker meta
id: meta id: meta
uses: docker/metadata-action@v3 uses: docker/metadata-action@v4
with: with:
images: | images: |
${{ env.DOCKERHUB_IMAGE }} ${{ env.DOCKERHUB_IMAGE }}
@@ -134,33 +153,37 @@ jobs:
type=semver,pattern={{major}} type=semver,pattern={{major}}
- -
name: Set up QEMU name: Set up QEMU
uses: docker/setup-qemu-action@v1 uses: docker/setup-qemu-action@v2
with:
platforms: amd64,arm64
- -
name: Set up Docker Buildx name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1 uses: docker/setup-buildx-action@v2
- -
name: Login to DockerHub name: Login to DockerHub
uses: docker/login-action@v1 uses: docker/login-action@v2
if: ${{ env.DOCKERHUB_IMAGE != '' }} if: ${{ env.DOCKERHUB_IMAGE != '' }}
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }} password: ${{ secrets.DOCKERHUB_PASSWORD }}
- -
name: Login to GHCR name: Login to GHCR
uses: docker/login-action@v1 uses: docker/login-action@v2
with: with:
registry : ghcr.io registry : ghcr.io
username : ${{ github.repository_owner }} username : ${{ github.repository_owner }}
password : ${{ secrets.GITHUB_TOKEN }} password : ${{ secrets.GITHUB_TOKEN }}
- -
name: Build and push name: Build and push
uses: docker/build-push-action@v2 uses: docker/build-push-action@v3
with: with:
pull : true pull : true
push : true push : true
platforms : linux/amd64,linux/arm64/v8
context : . context : .
file : ./Dockerfile file : ./Dockerfile
tags : ${{ steps.meta.outputs.tags }} tags : ${{ steps.meta.outputs.tags }}
labels : ${{ steps.meta.outputs.labels }} labels : ${{ steps.meta.outputs.labels }}
cache-from : type=gha,scope=${{ github.workflow }} cache-from: |
cache-to : type=gha,scope=${{ github.workflow }},mode=max type=gha,scope=${{ github.workflow }}:linux/amd64
type=gha,scope=${{ github.workflow }}:linux/arm64/v8

8
.gitignore vendored Normal file
View File

@@ -0,0 +1,8 @@
pbf/*.pbf
pbf/*.poly
pbf/shp/*
pbf/*.tif
tiles/*
!tiles/.gitkeep
database/*
!database/.gitkeep

View File

@@ -1,11 +1,17 @@
FROM ubuntu:22.04 AS compiler-common FROM ubuntu:22.04 AS compiler-common
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
RUN apt-get update \ RUN apt-get update \
&& apt-get install -y --no-install-recommends \ && apt-get install -y --no-install-recommends \
git-core \ ca-certificates gnupg lsb-release locales \
ca-certificates \ wget curl \
&& apt-get update git-core unzip unrar \
&& locale-gen $LANG && update-locale LANG=$LANG \
&& sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' \
&& wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
&& apt-get update && apt-get -y upgrade
########################################################################################################### ###########################################################################################################
@@ -13,6 +19,10 @@ FROM compiler-common AS compiler-stylesheet
RUN cd ~ \ RUN cd ~ \
&& git clone --single-branch --branch v5.4.0 https://github.com/gravitystorm/openstreetmap-carto.git --depth 1 \ && git clone --single-branch --branch v5.4.0 https://github.com/gravitystorm/openstreetmap-carto.git --depth 1 \
&& cd openstreetmap-carto \ && cd openstreetmap-carto \
&& sed -i 's/, "unifont Medium", "Unifont Upper Medium"//g' style/fonts.mss \
&& sed -i 's/"Noto Sans Tibetan Regular",//g' style/fonts.mss \
&& sed -i 's/"Noto Sans Tibetan Bold",//g' style/fonts.mss \
&& sed -i 's/Noto Sans Syriac Eastern Regular/Noto Sans Syriac Regular/g' style/fonts.mss \
&& rm -rf .git && rm -rf .git
########################################################################################################### ###########################################################################################################
@@ -27,13 +37,17 @@ RUN mkdir -p /home/renderer/src \
########################################################################################################### ###########################################################################################################
FROM ubuntu:22.04 AS final FROM compiler-common AS final
# Based on # Based on
# https://switch2osm.org/serving-tiles/manually-building-a-tile-server-18-04-lts/ # https://switch2osm.org/serving-tiles/manually-building-a-tile-server-18-04-lts/
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV AUTOVACUUM=on ENV AUTOVACUUM=on
ENV UPDATES=disabled ENV UPDATES=disabled
ENV REPLICATION_URL=https://planet.openstreetmap.org/replication/hour/
ENV MAX_INTERVAL_SECONDS=3600
ENV PG_VERSION 15
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Get packages # Get packages
@@ -42,6 +56,7 @@ RUN apt-get update \
apache2 \ apache2 \
cron \ cron \
dateutils \ dateutils \
fonts-hanazono \
fonts-noto-cjk \ fonts-noto-cjk \
fonts-noto-hinted \ fonts-noto-hinted \
fonts-noto-unhinted \ fonts-noto-unhinted \
@@ -55,9 +70,9 @@ RUN apt-get update \
osm2pgsql \ osm2pgsql \
osmium-tool \ osmium-tool \
osmosis \ osmosis \
postgresql-14 \ postgresql-$PG_VERSION \
postgresql-14-postgis-3 \ postgresql-$PG_VERSION-postgis-3 \
postgresql-14-postgis-3-scripts \ postgresql-$PG_VERSION-postgis-3-scripts \
postgis \ postgis \
python-is-python3 \ python-is-python3 \
python3-mapnik \ python3-mapnik \
@@ -67,13 +82,19 @@ RUN apt-get update \
python3-pip \ python3-pip \
renderd \ renderd \
sudo \ sudo \
wget \ vim \
&& apt-get clean autoclean \ && apt-get clean autoclean \
&& apt-get autoremove --yes \ && apt-get autoremove --yes \
&& rm -rf /var/lib/{apt,dpkg,cache,log}/ && rm -rf /var/lib/{apt,dpkg,cache,log}/
RUN adduser --disabled-password --gecos "" renderer RUN adduser --disabled-password --gecos "" renderer
# Get Noto Emoji Regular font, despite it being deprecated by Google
RUN wget https://github.com/googlefonts/noto-emoji/blob/9a5261d871451f9b5183c93483cbd68ed916b1e9/fonts/NotoEmoji-Regular.ttf?raw=true --content-disposition -P /usr/share/fonts/
# For some reason this one is missing in the default packages
RUN wget https://github.com/stamen/terrain-classic/blob/master/fonts/unifont-Medium.ttf?raw=true --content-disposition -P /usr/share/fonts/
# Install python libraries # Install python libraries
RUN pip3 install \ RUN pip3 install \
requests \ requests \
@@ -88,10 +109,19 @@ RUN echo "LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so" >> /etc/a
&& echo "LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so" >> /etc/apache2/conf-available/mod_headers.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 && a2enconf mod_tile && a2enconf mod_headers
COPY apache.conf /etc/apache2/sites-available/000-default.conf COPY apache.conf /etc/apache2/sites-available/000-default.conf
COPY leaflet-demo.html /var/www/html/index.html
RUN ln -sf /dev/stdout /var/log/apache2/access.log \ RUN ln -sf /dev/stdout /var/log/apache2/access.log \
&& ln -sf /dev/stderr /var/log/apache2/error.log && ln -sf /dev/stderr /var/log/apache2/error.log
# leaflet
COPY leaflet-demo.html /var/www/html/index.html
RUN cd /var/www/html/ \
&& wget https://github.com/Leaflet/Leaflet/releases/download/v1.8.0/leaflet.zip \
&& unzip leaflet.zip \
&& rm leaflet.zip
# Icon
RUN wget -O /var/www/html/favicon.ico https://www.openstreetmap.org/favicon.ico
# Copy update scripts # Copy update scripts
COPY openstreetmap-tiles-update-expire.sh /usr/bin/ COPY openstreetmap-tiles-update-expire.sh /usr/bin/
RUN chmod +x /usr/bin/openstreetmap-tiles-update-expire.sh \ RUN chmod +x /usr/bin/openstreetmap-tiles-update-expire.sh \
@@ -101,11 +131,11 @@ RUN chmod +x /usr/bin/openstreetmap-tiles-update-expire.sh \
&& echo "* * * * * renderer openstreetmap-tiles-update-expire.sh\n" >> /etc/crontab && echo "* * * * * renderer openstreetmap-tiles-update-expire.sh\n" >> /etc/crontab
# Configure PosgtreSQL # Configure PosgtreSQL
COPY postgresql.custom.conf.tmpl /etc/postgresql/14/main/ COPY postgresql.custom.conf.tmpl /etc/postgresql/$PG_VERSION/main/
RUN chown -R postgres:postgres /var/lib/postgresql \ RUN chown -R postgres:postgres /var/lib/postgresql \
&& chown postgres:postgres /etc/postgresql/14/main/postgresql.custom.conf.tmpl \ && chown postgres:postgres /etc/postgresql/$PG_VERSION/main/postgresql.custom.conf.tmpl \
&& echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/14/main/pg_hba.conf \ && echo "host all all 0.0.0.0/0 scram-sha-256" >> /etc/postgresql/$PG_VERSION/main/pg_hba.conf \
&& echo "host all all ::/0 md5" >> /etc/postgresql/14/main/pg_hba.conf && echo "host all all ::/0 scram-sha-256" >> /etc/postgresql/$PG_VERSION/main/pg_hba.conf
# Create volume directories # Create volume directories
RUN mkdir -p /run/renderd/ \ RUN mkdir -p /run/renderd/ \
@@ -115,10 +145,10 @@ RUN mkdir -p /run/renderd/ \
&& chown -R renderer: /data/ \ && chown -R renderer: /data/ \
&& chown -R renderer: /home/renderer/src/ \ && chown -R renderer: /home/renderer/src/ \
&& chown -R renderer: /run/renderd \ && chown -R renderer: /run/renderd \
&& mv /var/lib/postgresql/14/main/ /data/database/postgres/ \ && mv /var/lib/postgresql/$PG_VERSION/main/ /data/database/postgres/ \
&& mv /var/cache/renderd/tiles/ /data/tiles/ \ && mv /var/cache/renderd/tiles/ /data/tiles/ \
&& chown -R renderer: /data/tiles \ && chown -R renderer: /data/tiles \
&& ln -s /data/database/postgres /var/lib/postgresql/14/main \ && ln -s /data/database/postgres /var/lib/postgresql/$PG_VERSION/main \
&& ln -s /data/style /home/renderer/src/openstreetmap-carto \ && ln -s /data/style /home/renderer/src/openstreetmap-carto \
&& ln -s /data/tiles /var/cache/renderd/tiles \ && ln -s /data/tiles /var/cache/renderd/tiles \
; ;
@@ -129,7 +159,8 @@ TILEDIR=/var/cache/renderd/tiles \n\
XML=/home/renderer/src/openstreetmap-carto/mapnik.xml \n\ XML=/home/renderer/src/openstreetmap-carto/mapnik.xml \n\
HOST=localhost \n\ HOST=localhost \n\
TILESIZE=256 \n\ TILESIZE=256 \n\
MAXZOOM=20' >> /etc/renderd.conf MAXZOOM=20' >> /etc/renderd.conf \
&& sed -i 's,/usr/share/fonts/truetype,/usr/share/fonts,g' /etc/renderd.conf
# Install helper script # Install helper script
COPY --from=compiler-helper-script /home/renderer/src/regional /home/renderer/src/regional COPY --from=compiler-helper-script /home/renderer/src/regional /home/renderer/src/regional
@@ -138,6 +169,6 @@ COPY --from=compiler-stylesheet /root/openstreetmap-carto /home/renderer/src/ope
# Start running # Start running
COPY run.sh / COPY run.sh /
ENTRYPOINT ["/run.sh"] #ENTRYPOINT ["/run.sh"]
CMD [] CMD []
EXPOSE 80 5432 EXPOSE 80 5432

123
README.md
View File

@@ -1,5 +1,97 @@
# openstreetmap-tile-server # openstreetmap-tile-server
## Champs-libres fork
This is an adaptation of https://github.com/Overv/openstreetmap-tile-server/ for testing different cartoCss styles and generating tiles.
### Use with docker-compose
#### Fresh install
```bash
#docker volume create osm-data
docker-compose build
```
For entering into the container, use the "terminal" argument of the run.sh script:
```bash
docker-compose run --rm map terminal
```
#### Cyclosm data dependencies
##### Shp
Download the 2 following zip files, unzip them, and place them in the `pbf/shp` folder. They are mounted as volume in the docker-compose.yml.
- http://osmdata.openstreetmap.de/download/simplified-land-polygons-complete-3857.zip
- http://osmdata.openstreetmap.de/download/land-polygons-split-3857.zip
Also, rename them as in the zip file, so simplified-land-polygons-complete-3857.shp and land-polygons-split-3857.shp.
##### Contour lines
Download the geopackage from http://opendata.champs-libres.be/beautiful-contour-belgium.zip, convert it to shp and place it into the pbf/shp folder under the name "contours.shp". It will be mounted as written in the `docker-compose.yml` file.
The shp is imported using `shp2pgsql` in the import step, assuming EPSG:31370 as the input shp CRS.
#### Hillshade
Download the hillshade at http://opendata.champs-libres.be/hillshade_belgium_EPSG3857.zip and place the tif file in the pdf folder, as mounted in the `docker-compose.yml` file.
#### Do an import
Download a pbf and a poly file of your choice on https://download.geofabrik.de and put it in the `pbf` folder. Change the lines of the pbf and poly paths in the volumes in the `docker-compose.yml` file
Then, you can import the OSM data by doing this command:
```bash
docker-compose run --rm map import
```
This will take a while, about 15 min for Luxembourg for example.
You should end with :
```
...
INFO:root: Importing into database
INFO:root: Import complete
+ sudo -u renderer touch /data/database/planet-import-complete
+ service postgresql stop
* Stopping PostgreSQL 15 database server [ OK ]
+ exit 0
```
#### Run the server to produce and view tiles
```bash
docker-compose run --rm map run
```
The tiles are available on http://192.168.176.2/ or something like that. Have a look at the docker container to know which is the IP address: there is a message like "Could not reliably determine the server's fully qualified domain name, using 192.168.176.2.". (should be on http://localhost:8080/ though...)
#### Generate tiles from a list
There's a script in utils to generate a list of tiles to be used to generate the tiles.
```bash
python3 generate-tiles-list.py > tiles.list
```
Move this `tiles.list` file in the `/tiles/` directory and then run:
```bash
docker-compose run --rm map generate_tiles
```
## Original README
[![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") [![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")
[![Docker Image Version (latest semver)](https://img.shields.io/docker/v/overv/openstreetmap-tile-server?label=docker%20image)](https://hub.docker.com/r/overv/openstreetmap-tile-server/tags) [![Docker Image Version (latest semver)](https://img.shields.io/docker/v/overv/openstreetmap-tile-server?label=docker%20image)](https://hub.docker.com/r/overv/openstreetmap-tile-server/tags)
@@ -67,10 +159,10 @@ By default the container will use openstreetmap-carto if it is not specified. Ho
docker run \ docker run \
-e DOWNLOAD_PBF=https://download.geofabrik.de/europe/luxembourg-latest.osm.pbf \ -e DOWNLOAD_PBF=https://download.geofabrik.de/europe/luxembourg-latest.osm.pbf \
-e DOWNLOAD_POLY=https://download.geofabrik.de/europe/luxembourg.poly \ -e DOWNLOAD_POLY=https://download.geofabrik.de/europe/luxembourg.poly \
-e NAME_LUA=sample.lua -e NAME_LUA=sample.lua \
-e NAME_STYLE=test.style -e NAME_STYLE=test.style \
-e NAME_MML=project.mml -e NAME_MML=project.mml \
-e NAME_SQL=test.sql -e NAME_SQL=test.sql \
-v /home/user/openstreetmap-carto-modified:/data/style/ \ -v /home/user/openstreetmap-carto-modified:/data/style/ \
-v osm-data:/data/database/ \ -v osm-data:/data/database/ \
overv/openstreetmap-tile-server \ overv/openstreetmap-tile-server \
@@ -137,6 +229,29 @@ docker 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. 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.
### Tile expiration (optional)
Specify custom tile expiration settings to control which zoom level tiles are marked as expired when an update is performed. Tiles can be marked as expired in the cache (TOUCHFROM), but will still be served
until a new tile has been rendered, or deleted from the cache (DELETEFROM), so nothing will be served until a new tile has been rendered.
The example tile expiration values below are the default values.
```
docker run \
-p 8080:80 \
-e REPLICATION_URL=https://planet.openstreetmap.org/replication/minute/ \
-e MAX_INTERVAL_SECONDS=60 \
-e UPDATES=enabled \
-e EXPIRY_MINZOOM=13 \
-e EXPIRY_TOUCHFROM=13 \
-e EXPIRY_DELETEFROM=19 \
-e EXPIRY_MAXZOOM=20 \
-v osm-data:/data/database/ \
-v osm-tiles:/data/tiles/ \
-d overv/openstreetmap-tile-server \
run
```
### Cross-origin resource sharing ### 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`: 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`:

View File

@@ -1,7 +1,7 @@
<VirtualHost *:80> <VirtualHost *:80>
ServerAdmin webmaster@localhost ServerAdmin webmaster@localhost
AddTileConfig /tile/ default AddTileConfig /tile/ cyclosm
LoadTileConfigFile /etc/renderd.conf LoadTileConfigFile /etc/renderd.conf
ModTileRenderdSocketName /run/renderd/renderd.sock ModTileRenderdSocketName /run/renderd/renderd.sock
ModTileRequestTimeout 0 ModTileRequestTimeout 0

21
cyclosm/renderd.conf Normal file
View File

@@ -0,0 +1,21 @@
; BASIC AND SIMPLE CONFIGURATION:
[renderd]
stats_file=/run/renderd/renderd.stats
socketname=/run/renderd/renderd.sock
num_threads=4
tile_dir=/var/cache/renderd/tiles
[mapnik]
plugins_dir=/usr/lib/mapnik/3.1/input
font_dir=/usr/share/fonts
font_dir_recurse=true
; ADD YOUR LAYERS:
[cyclosm]
URI=/tile/
TILEDIR=/var/cache/renderd/tiles
XML=/data/style/mapnik.xml
HOST=localhost
TILESIZE=256
MAXZOOM=20

0
database/.gitkeep Normal file
View File

View File

@@ -4,11 +4,19 @@ services:
map: map:
image: overv/openstreetmap-tile-server image: overv/openstreetmap-tile-server
volumes: volumes:
- osm-data:/data/database/ #- osm-data:/data/database/
- ./database:/data/database/
- ./tiles:/data/tiles/
- ./cyclosm/renderd.conf:/etc/renderd.conf
- ./run.sh:/run.sh # for dev
- ./pbf/luxembourg-latest.osm.pbf:/data/region.osm.pbf # change here your pbf
- ./pbf/luxembourg.poly:/data/region.poly # and your poly
- ./pbf/shp/:/data/shp/
- ./pbf/hillshade.tif:/data/hillshade.tif
ports: ports:
- "8080:80" - "8080:80"
command: "run" command: "run"
volumes: # volumes:
osm-data: # osm-data:
external: true # external: true

View File

@@ -6,8 +6,8 @@
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A==" crossorigin="" /> <link rel="stylesheet" href="leaflet.css"/>
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js" integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA==" crossorigin=""></script> <script src="leaflet.js"></script>
<style> <style>
html, body, #map { html, body, #map {

View File

@@ -56,14 +56,10 @@ RUNLOG=$LOG_DIR/run.log
# Here we expire (but don't immediately rerender) tiles between zoom levels # Here we expire (but don't immediately rerender) tiles between zoom levels
# 13 and 18 and delete between 19 and 20. # 13 and 18 and delete between 19 and 20.
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
EXPIRY_MINZOOM=13 EXPIRY_MINZOOM=${EXPIRY_MINZOOM:="13"}
EXPIRY_TOUCHFROM=13 EXPIRY_TOUCHFROM=${EXPIRY_TOUCHFROM:="13"}
EXPIRY_DELETEFROM=19 EXPIRY_DELETEFROM=${EXPIRY_DELETEFROM:="19"}
EXPIRY_MAXZOOM=20 EXPIRY_MAXZOOM=${EXPIRY_MAXZOOM:="20"}
REPLICATION_URL=${REPLICATION_URL:="https://planet.openstreetmap.org/replication/hour/"}
MAX_INTERVAL_SECONDS=${MAX_INTERVAL_SECONDS:="3600"}
#************************************************************************* #*************************************************************************
#************************************************************************* #*************************************************************************
@@ -195,7 +191,7 @@ m_ok "expiring tiles"
# delete >= $EXPIRY_DELETEFROM and <= $EXPIRY_MAXZOOM. # delete >= $EXPIRY_DELETEFROM and <= $EXPIRY_MAXZOOM.
# The default path to renderd.sock is fixed. # The default path to renderd.sock is fixed.
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
if ! render_expired --map=default --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 if ! render_expired --map=default --min-zoom=$EXPIRY_MINZOOM --touch-from=$EXPIRY_TOUCHFROM --delete-from=$EXPIRY_DELETEFROM --max-zoom=$EXPIRY_MAXZOOM -s /run/renderd/renderd.sock < "$EXPIRY_FILE.$$" 2>&1 | tail -8 >> "$EXPIRYLOG"; then
m_info "Expiry failed" m_info "Expiry failed"
fi fi

0
pbf/.gitkeep Normal file
View File

89
run.sh
View File

@@ -3,15 +3,46 @@
set -euo pipefail set -euo pipefail
function createPostgresConfig() { function createPostgresConfig() {
cp /etc/postgresql/14/main/postgresql.custom.conf.tmpl /etc/postgresql/14/main/conf.d/postgresql.custom.conf cp /etc/postgresql/$PG_VERSION/main/postgresql.custom.conf.tmpl /etc/postgresql/$PG_VERSION/main/conf.d/postgresql.custom.conf
sudo -u postgres echo "autovacuum = $AUTOVACUUM" >> /etc/postgresql/14/main/conf.d/postgresql.custom.conf sudo -u postgres echo "autovacuum = $AUTOVACUUM" >> /etc/postgresql/$PG_VERSION/main/conf.d/postgresql.custom.conf
cat /etc/postgresql/14/main/conf.d/postgresql.custom.conf cat /etc/postgresql/$PG_VERSION/main/conf.d/postgresql.custom.conf
} }
function setPostgresPassword() { function setPostgresPassword() {
sudo -u postgres psql -c "ALTER USER renderer PASSWORD '${PGPASSWORD:-renderer}'" sudo -u postgres psql -c "ALTER USER renderer PASSWORD '${PGPASSWORD:-renderer}'"
} }
function compileStyle() {
cd /data/style/
git clone --single-branch --branch v0.6 https://github.com/cyclosm/cyclosm-cartocss-style.git --depth 1
# mv symbols folder
mkdir /data/style/symbols/
mv /data/style/cyclosm-cartocss-style/symbols/* /data/style/symbols/
# change shp paths
sed -i "s,file: http://osmdata.openstreetmap.de/download,file: /data/shp,g" ./cyclosm-cartocss-style/project.mml
sed -i "s/.zip/.shp/g" ./cyclosm-cartocss-style/project.mml
# change dbname
sed -i 's/dbname: "osm"/dbname: "gis"/g' ./cyclosm-cartocss-style/project.mml
# remove some deprecated fonts
sed -i 's/, "unifont Medium", "Unifont Upper Medium"//g' ./cyclosm-cartocss-style/fonts.mss
sed -i 's/"Noto Sans Tibetan Regular",//g' ./cyclosm-cartocss-style/fonts.mss
sed -i 's/"Noto Sans Tibetan Bold",//g' ./cyclosm-cartocss-style/fonts.mss
sed -i 's/Noto Sans Syriac Eastern Regular/Noto Sans Syriac Regular/g' ./cyclosm-cartocss-style/fonts.mss
# change hillshade
sed -i 's/*extents84/*extents/g' ./cyclosm-cartocss-style/project.mml
sed -i 's,dem/shade.vrt,/data/hillshade.tif,g' ./cyclosm-cartocss-style/project.mml
sed -z 's/status: off\n- id: contours100/status: on\n- id: contours100/' -i ./cyclosm-cartocss-style/project.mml
# change contours
sed -z 's/status: off\n- id: contours50/status: on\n- id: contours50/' -i ./cyclosm-cartocss-style/project.mml
sed -z 's/status: off\n- id: contours20/status: on\n- id: contours20/' -i ./cyclosm-cartocss-style/project.mml
sed -z 's/status: off\n- id: contours10/status: on\n- id: contours10/' -i ./cyclosm-cartocss-style/project.mml
sed -z 's/status: off\n- id: waterway_low/status: on\n- id: waterway_low/' -i ./cyclosm-cartocss-style/project.mml
sed -i 's/dbname: "contours"/dbname: "gis"/g' ./cyclosm-cartocss-style/project.mml
# carto build
carto cyclosm-cartocss-style/project.mml > mapnik.xml
}
if [ "$#" -ne 1 ]; then if [ "$#" -ne 1 ]; then
echo "usage: <import|run>" echo "usage: <import|run>"
echo "commands:" echo "commands:"
@@ -29,24 +60,20 @@ fi
set -x set -x
# if there is no custom style mounted, then use osm-carto if [ "$1" == "terminal" ]; then
if [ ! "$(ls -A /data/style/)" ]; then bash
mv /home/renderer/src/openstreetmap-carto-backup/* /data/style/
fi
# carto build
if [ ! -f /data/style/mapnik.xml ]; then
cd /data/style/
carto ${NAME_MML:-project.mml} > mapnik.xml
fi fi
if [ "$1" == "import" ]; then if [ "$1" == "import" ]; then
compileStyle
# Ensure that database directory is in right state # Ensure that database directory is in right state
mkdir -p /data/database/postgres/ mkdir -p /data/database/postgres/
chown renderer: /data/database/ chown renderer: /data/database/
chown -R postgres: /var/lib/postgresql /data/database/postgres/ chown -R postgres: /var/lib/postgresql /data/database/postgres/
if [ ! -f /data/database/postgres/PG_VERSION ]; then if [ ! -f /data/database/postgres/PG_VERSION ]; then
sudo -u postgres /usr/lib/postgresql/14/bin/pg_ctl -D /data/database/postgres/ initdb -o "--locale C.UTF-8" sudo -u postgres /usr/lib/postgresql/$PG_VERSION/bin/pg_ctl -D /data/database/postgres/ initdb -o "--locale C.UTF-8"
fi fi
# Initialize PostgreSQL # Initialize PostgreSQL
@@ -78,10 +105,10 @@ if [ "$1" == "import" ]; then
if [ "${UPDATES:-}" == "enabled" ] || [ "${UPDATES:-}" == "1" ]; then if [ "${UPDATES:-}" == "enabled" ] || [ "${UPDATES:-}" == "1" ]; then
# determine and set osmosis_replication_timestamp (for consecutive updates) # determine and set osmosis_replication_timestamp (for consecutive updates)
REPLICATION_TIMESTAMP=`osmium fileinfo /data/region.osm.pbf | grep 'osmosis_replication_timestamp=' | cut -d "=" -f 2` REPLICATION_TIMESTAMP=`osmium fileinfo -g header.option.osmosis_replication_timestamp /data/region.osm.pbf`
# initial setup of osmosis workspace (for consecutive updates) # initial setup of osmosis workspace (for consecutive updates)
sudo -u renderer openstreetmap-tiles-update-expire.sh $REPLICATION_TIMESTAMP sudo -E -u renderer openstreetmap-tiles-update-expire.sh $REPLICATION_TIMESTAMP
fi fi
# copy polygon file if available # copy polygon file if available
@@ -97,9 +124,6 @@ if [ "$1" == "import" ]; then
# Import data # Import data
sudo -u renderer osm2pgsql -d gis --create --slim -G --hstore \ sudo -u renderer osm2pgsql -d gis --create --slim -G --hstore \
--tag-transform-script /data/style/${NAME_LUA:-openstreetmap-carto.lua} \
--number-processes ${THREADS:-4} \
-S /data/style/${NAME_STYLE:-openstreetmap-carto.style} \
/data/region.osm.pbf \ /data/region.osm.pbf \
${OSM2PGSQL_EXTRA_ARGS:-} \ ${OSM2PGSQL_EXTRA_ARGS:-} \
; ;
@@ -115,11 +139,12 @@ if [ "$1" == "import" ]; then
sudo -u postgres psql -d gis -f /data/style/${NAME_SQL:-indexes.sql} sudo -u postgres psql -d gis -f /data/style/${NAME_SQL:-indexes.sql}
fi fi
#Import external data # Create cyclosm special views
chown -R renderer: /home/renderer/src/ /data/style/ sudo -u renderer psql -d gis -f "/data/style/cyclosm-cartocss-style/views.sql"
if [ -f /data/style/scripts/get-external-data.py ] && [ -f /data/style/external-data.yml ]; then
sudo -E -u renderer python3 /data/style/scripts/get-external-data.py -c /data/style/external-data.yml -D /data/style/data # Import contour files
fi shp2pgsql -s 31370:3857 -c -g geometry -I /data/shp/contours.shp public.contours | sudo -u renderer psql -d gis
sudo -u renderer psql -d gis -c "ALTER TABLE public.contours RENAME COLUMN elev TO height;"
# Register that data has changed for mod_tile caching purposes # Register that data has changed for mod_tile caching purposes
sudo -u renderer touch /data/database/planet-import-complete sudo -u renderer touch /data/database/planet-import-complete
@@ -133,6 +158,8 @@ if [ "$1" == "run" ]; then
# Clean /tmp # Clean /tmp
rm -rf /tmp/* rm -rf /tmp/*
compileStyle
# migrate old files # migrate old files
if [ -f /data/database/PG_VERSION ] && ! [ -d /data/database/postgres/ ]; then if [ -f /data/database/PG_VERSION ] && ! [ -d /data/database/postgres/ ]; then
mkdir /data/database/postgres/ mkdir /data/database/postgres/
@@ -168,7 +195,7 @@ if [ "$1" == "run" ]; then
setPostgresPassword setPostgresPassword
# Configure renderd threads # Configure renderd threads
sed -i -E "s/num_threads=[0-9]+/num_threads=${THREADS:-4}/g" /etc/renderd.conf #sed -i -E "s/num_threads=[0-9]+/num_threads=${THREADS:-4}/g" /etc/renderd.conf
# start cron job to trigger consecutive updates # start cron job to trigger consecutive updates
if [ "${UPDATES:-}" == "enabled" ] || [ "${UPDATES:-}" == "1" ]; then if [ "${UPDATES:-}" == "enabled" ] || [ "${UPDATES:-}" == "1" ]; then
@@ -195,5 +222,19 @@ if [ "$1" == "run" ]; then
exit 0 exit 0
fi fi
if [ "$1" == "generate_tiles" ]; then
compileStyle
service postgresql start
service apache2 restart
sudo -u renderer renderd -c /etc/renderd.conf
cat /data/tiles/cyclosm/tiles.list | render_list --map cyclosm
bash
fi
echo "invalid command" echo "invalid command"
exit 1 exit 1

0
tiles/.gitkeep Normal file
View File

View File

@@ -0,0 +1,35 @@
# usage: python3 generate-tiles-list.py > tiles.list
import math
def deg2num(lat_deg, lon_deg, zoom):
lat_rad = math.radians(lat_deg)
n = 2.0 ** zoom
xtile = int((lon_deg + 180.0) / 360.0 * n)
ytile = int((1.0 - math.asinh(math.tan(lat_rad)) / math.pi) / 2.0 * n)
return (xtile, ytile)
# GD lux coordinates
max_x = 6.531
max_y = 50.184
min_x = 5.735
min_y = 49.452
min_z = 9
max_z = 17
for z in range(min_z, max_z+1):
x1_tile, y1_tile = deg2num(max_y, max_x, z)
x2_tile, y2_tile = deg2num(min_y, min_x, z)
min_x_tile = x1_tile if x1_tile < x2_tile else x2_tile
max_x_tile = x1_tile if x1_tile > x2_tile else x2_tile
min_y_tile = y1_tile if y1_tile < y2_tile else y2_tile
max_y_tile = y1_tile if y1_tile > y2_tile else y2_tile
for tx in range(min_x_tile, max_x_tile):
if tx % 8 != 0:
continue
for ty in range(min_y_tile, max_y_tile):
if ty % 8 != 0:
continue
print("{} {} {}".format(tx, ty, z))