feat: tileserver-gl fully operational – config+style in config/, PNG tiles confirmed

This commit is contained in:
Conrad Schulz 2026-06-12 09:43:07 +00:00
parent 79bba7ca02
commit 46ac204e03
3 changed files with 458 additions and 7 deletions

432
config/styles/osm-intl.json Normal file
View file

@ -0,0 +1,432 @@
{
"version": 8,
"name": "OSM International (OpenStreetMap)",
"metadata": {
"mapbox:url": "mapbox://styles/mapbox/outdoors-v11",
"maptiler:copyright": "© OpenStreetMap contributors, © MapTiler"
},
"sources": {
"osm": {
"type": "vector",
"url": "mbtiles://{osm}"
}
},
"glyphs": "/fonts/{fontstack}/{range}.pbf",
"layers": [
{
"id": "background",
"type": "background",
"paint": {
"background-color": "#e8e8e8"
}
},
{
"id": "water-area",
"type": "fill",
"source": "osm",
"source-layer": "water",
"paint": {
"fill-color": "#b0d4fc"
}
},
{
"id": "water-line",
"type": "line",
"source": "osm",
"source-layer": "water",
"paint": {
"line-color": "#b0d4fc",
"line-width": 1
},
"filter": [
"==",
"$type",
"LineString"
]
},
{
"id": "landuse-forest",
"type": "fill",
"source": "osm",
"source-layer": "landuse",
"paint": {
"fill-color": "#d4e8c1",
"fill-opacity": 0.8
},
"filter": [
"==",
"class",
"forest"
]
},
{
"id": "landuse-grass",
"type": "fill",
"source": "osm",
"source-layer": "landuse",
"paint": {
"fill-color": "#e8f0e0",
"fill-opacity": 0.6
},
"filter": [
"==",
"class",
"grass"
]
},
{
"id": "landuse-park",
"type": "fill",
"source": "osm",
"source-layer": "landuse",
"paint": {
"fill-color": "#c8e6c9",
"fill-opacity": 0.7
},
"filter": [
"==",
"class",
"park"
]
},
{
"id": "building",
"type": "fill",
"source": "osm",
"source-layer": "building",
"paint": {
"fill-color": "#ddd",
"fill-opacity": 0.6
},
"minzoom": 12
},
{
"id": "building-outline",
"type": "line",
"source": "osm",
"source-layer": "building",
"paint": {
"line-color": "#999",
"line-width": 0.5
},
"minzoom": 12
},
{
"id": "road-motorway",
"type": "line",
"source": "osm",
"source-layer": "road",
"paint": {
"line-color": "#ff9e64",
"line-width": [
"interpolate",
[
"linear"
],
[
"zoom"
],
6,
0.5,
20,
6
]
},
"filter": [
"==",
"class",
"motorway"
]
},
{
"id": "road-trunk",
"type": "line",
"source": "osm",
"source-layer": "road",
"paint": {
"line-color": "#ffb366",
"line-width": [
"interpolate",
[
"linear"
],
[
"zoom"
],
6,
0.4,
20,
5
]
},
"filter": [
"==",
"class",
"trunk"
]
},
{
"id": "road-primary",
"type": "line",
"source": "osm",
"source-layer": "road",
"paint": {
"line-color": "#ffd699",
"line-width": [
"interpolate",
[
"linear"
],
[
"zoom"
],
6,
0.3,
20,
4
]
},
"filter": [
"==",
"class",
"primary"
]
},
{
"id": "road-secondary",
"type": "line",
"source": "osm",
"source-layer": "road",
"paint": {
"line-color": "#fff4cc",
"line-width": [
"interpolate",
[
"linear"
],
[
"zoom"
],
8,
0.1,
20,
3
]
},
"filter": [
"==",
"class",
"secondary"
]
},
{
"id": "road-tertiary",
"type": "line",
"source": "osm",
"source-layer": "road",
"paint": {
"line-color": "#ffffff",
"line-width": [
"interpolate",
[
"linear"
],
[
"zoom"
],
10,
0.05,
20,
2
]
},
"filter": [
"==",
"class",
"tertiary"
]
},
{
"id": "road-path",
"type": "line",
"source": "osm",
"source-layer": "road",
"paint": {
"line-color": "#cccccc",
"line-width": 0.5,
"line-dasharray": [
2,
2
]
},
"filter": [
"in",
"class",
"path",
"footway",
"cycleway"
]
},
{
"id": "railway",
"type": "line",
"source": "osm",
"source-layer": "road",
"paint": {
"line-color": "#999",
"line-width": 1,
"line-dasharray": [
1,
1
]
},
"filter": [
"==",
"class",
"rail"
],
"minzoom": 10
},
{
"id": "poi-icon",
"type": "symbol",
"source": "osm",
"source-layer": "poi",
"layout": {
"text-field": [
"get",
"name_en"
],
"text-font": [
"Open Sans Regular"
],
"text-offset": [
0,
0.5
],
"text-size": 10
},
"paint": {
"text-color": "#333",
"text-halo-color": "#fff",
"text-halo-width": 1
},
"minzoom": 14
},
{
"id": "place-city",
"type": "symbol",
"source": "osm",
"source-layer": "place",
"layout": {
"text-field": [
"get",
"name_en"
],
"text-font": [
"Open Sans Bold"
],
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
5,
12,
14,
20
]
},
"paint": {
"text-color": "#222",
"text-halo-color": "#fff",
"text-halo-width": 2
},
"filter": [
"==",
"class",
"city"
]
},
{
"id": "place-town",
"type": "symbol",
"source": "osm",
"source-layer": "place",
"layout": {
"text-field": [
"get",
"name_en"
],
"text-font": [
"Open Sans Regular"
],
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
7,
10,
14,
14
]
},
"paint": {
"text-color": "#555",
"text-halo-color": "#fff",
"text-halo-width": 1
},
"filter": [
"==",
"class",
"town"
]
},
{
"id": "place-village",
"type": "symbol",
"source": "osm",
"source-layer": "place",
"layout": {
"text-field": [
"get",
"name_en"
],
"text-font": [
"Open Sans Regular"
],
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
10,
8,
14,
12
]
},
"paint": {
"text-color": "#777",
"text-halo-color": "#fff",
"text-halo-width": 0.5
},
"filter": [
"==",
"class",
"village"
],
"minzoom": 10
}
]
}

20
config/tileserver.json Normal file
View file

@ -0,0 +1,20 @@
{
"options": {
"paths": {
"fonts": "/data/fonts",
"sprites": "/data/sprites",
"styles": "/data/styles",
"mbtiles": "/data"
}
},
"styles": {
"osm-intl": {
"style": "osm-intl.json"
}
},
"data": {
"osm": {
"mbtiles": "osm.mbtiles"
}
}
}

View file

@ -17,23 +17,22 @@ services:
start_period: 10s
tileserver:
image: ghcr.io/maptiler/tileserver-gl:latest
image: maptiler/tileserver-gl:latest
container_name: rd13_tileserver
ports:
- "9983:8080"
volumes:
- ./data/styles:/data/styles:ro
- ./config/tileserver.json:/data/config.json:ro
- ./config/styles:/data/styles:ro
- ./data/fonts:/data/fonts:ro
- ./data/sprites:/data/sprites:ro
environment:
- PMTILES_CACHE_DIR=/tmp/pmtiles-cache
- NODE_ENV=production
- ./data/osm.mbtiles:/data/osm.mbtiles:ro
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8080/health"]
test: ["CMD", "node", "-e", "require('http').get('http://localhost:8080/health', r => process.exit(r.statusCode === 200 ? 0 : 1))"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
start_period: 30s
depends_on:
- martin