feat: docker-compose.build.yml – Europa z16 Build-Config, 12 CPUs 28GB RAM

This commit is contained in:
Conrad Schulz 2026-06-13 10:41:49 +00:00
parent 83492ff96a
commit c01ddeed31
4 changed files with 69 additions and 34 deletions

View file

@ -4,17 +4,28 @@
# Voraussetzung: Docker Desktop (macOS/Windows) oder Docker Engine (Linux) # Voraussetzung: Docker Desktop (macOS/Windows) oder Docker Engine (Linux)
# #
# ══════════════════════════════════════════════════════════════════════ # ══════════════════════════════════════════════════════════════════════
# DISK-ANFORDERUNGEN (auf dem Host-Rechner)
# ══════════════════════════════════════════════════════════════════════
#
# AREA=germany MAX_ZOOM=16: ~30 GB temp + ~12 GB output = ~50 GB frei
# AREA=europe MAX_ZOOM=16: ~200 GB temp + ~80 GB output = ~350 GB frei
# AREA=planet MAX_ZOOM=15: ~200 GB temp + ~80 GB output = ~350 GB frei
# AREA=planet MAX_ZOOM=16: ~500 GB temp + ~300 GB output = ~900 GB frei
#
# ══════════════════════════════════════════════════════════════════════
# SCHRITT 1: Build starten # SCHRITT 1: Build starten
# ══════════════════════════════════════════════════════════════════════ # ══════════════════════════════════════════════════════════════════════
# #
# # Germany z0-16 (~12 GB Output, ~2h, 8 GB RAM) # # Germany z0-16 (empfohlen als Einstieg)
# AREA=germany MAX_ZOOM=16 RAM=8g docker compose -f docker-compose.build.yml up # AREA=germany MAX_ZOOM=16 RAM=8g docker compose -f docker-compose.build.yml up
# #
# # Austria z0-16 (~2 GB Output, ~20min, 4 GB RAM) # # Planet z0-15 (~80 GB Output, ~8h, 28 GB RAM, ~350 GB Temp+Output Disk)
# AREA=austria MAX_ZOOM=16 RAM=4g docker compose -f docker-compose.build.yml up # AREA=planet MAX_ZOOM=15 RAM=28g BUILD_CPUS=12 BUILD_MEM=30g \
# docker compose -f docker-compose.build.yml up
# #
# # Europe z0-16 (~80 GB Output, ~12h, 16 GB RAM) # # Planet z0-16 (~300 GB Output, ~15h, 28 GB RAM, ~900 GB Temp+Output Disk)
# AREA=europe MAX_ZOOM=16 RAM=16g docker compose -f docker-compose.build.yml up # AREA=planet MAX_ZOOM=16 RAM=28g BUILD_CPUS=12 BUILD_MEM=30g \
# docker compose -f docker-compose.build.yml up
# #
# Status verfolgen (zweites Terminal): # Status verfolgen (zweites Terminal):
# docker compose -f docker-compose.build.yml logs -f # docker compose -f docker-compose.build.yml logs -f
@ -23,8 +34,8 @@
# SCHRITT 2: Ergebnis auf Server übertragen # SCHRITT 2: Ergebnis auf Server übertragen
# ══════════════════════════════════════════════════════════════════════ # ══════════════════════════════════════════════════════════════════════
# #
# rsync -avh --progress \ # rsync -avh --progress --partial \
# ./build/<AREA>.mbtiles \ # ./build/output/<AREA>.mbtiles \
# rd13server@192.168.178.6:/mnt/services-data/rd13_tile_server/data/osm-<AREA>.mbtiles # rd13server@192.168.178.6:/mnt/services-data/rd13_tile_server/data/osm-<AREA>.mbtiles
# #
# ══════════════════════════════════════════════════════════════════════ # ══════════════════════════════════════════════════════════════════════
@ -35,32 +46,31 @@
# "cd /mnt/services-data/rd13_tile_server && docker compose restart martin" # "cd /mnt/services-data/rd13_tile_server && docker compose restart martin"
# #
# # Neue Source prüfen: # # Neue Source prüfen:
# curl https://tiles.rd13server.de/catalog | grep osm-<AREA> # curl https://tiles.rd13server.de/catalog | python3 -m json.tool | grep -i area
#
# ══════════════════════════════════════════════════════════════════════
# UMGEBUNGSVARIABLEN (Defaults)
# ══════════════════════════════════════════════════════════════════════
# AREA = germany (germany | austria | switzerland | europe | planet)
# MAX_ZOOM = 16 (14 = Planet-Level, 16 = Detail)
# RAM = 8g (Java Heap: 8g für DE, 16g für EU)
services: services:
planetiler-build: planetiler-build:
image: ghcr.io/onthegomap/planetiler:latest image: ghcr.io/onthegomap/planetiler:latest
container_name: rd13_planetiler_build container_name: rd13_planetiler_build
volumes: volumes:
- ./build:/data # Output: fertige MBTiles
- ./build/output:/output
# Source-Cache: OSM-PBF wird hier gecacht (verhindert Re-Download bei Neustart)
- ./build/sources:/data/sources
# Temp: sehr viel Platz nötig (siehe Tabelle oben)
- ./build/tmp:/data/tmp
environment: environment:
- JAVA_TOOL_OPTIONS=-Xmx${RAM:-8g} - JAVA_TOOL_OPTIONS=-Xmx${RAM:-8g} -Xms2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200
command: command:
- "--download" - "--download"
- "--area=${AREA:-germany}" - "--area=${AREA:-germany}"
- "--output=/data/${AREA:-germany}.mbtiles" - "--output=/output/${AREA:-germany}.mbtiles"
- "--maxzoom=${MAX_ZOOM:-16}" - "--maxzoom=${MAX_ZOOM:-16}"
- "--nodemap-type=sortedtable"
- "--force" - "--force"
restart: "no" restart: "no"
deploy: deploy:
resources: resources:
limits: limits:
cpus: "${BUILD_CPUS:-8.0}" cpus: "${BUILD_CPUS:-4.0}"
memory: ${BUILD_MEM:-12g} memory: ${BUILD_MEM:-12g}

View file

@ -66,30 +66,34 @@ curl -s "http://localhost:9983/osm-intl/0/0/0.png" > /tmp/test.png && file /tmp/
Planetiler läuft in einem eigenen Container auf dem **Host-Rechner** (MacBook, Desktop-PC Planetiler läuft in einem eigenen Container auf dem **Host-Rechner** (MacBook, Desktop-PC
etc.) mit genug RAM. Das Ergebnis wird per `rsync` auf den Server übertragen. etc.) mit genug RAM. Das Ergebnis wird per `rsync` auf den Server übertragen.
**Europa z16 (empfohlen):** ~280 GB Host-Disk, ~812h, 12 CPUs / 28 GB RAM
```bash ```bash
# Auf dem HOST-RECHNER ausführen (nicht auf dem Server): # Auf dem HOST-RECHNER ausführen (im geklonten Repo-Verzeichnis):
cd /path/to/rd13_tile_server
# Germany z0-16 (~12 GB, ~2h, 8 GB RAM) # Europa z0-16 (~80 GB Output, ~8-12h, ~280 GB Disk nötig)
AREA=germany MAX_ZOOM=16 RAM=8g docker compose -f docker-compose.build.yml up AREA=europe MAX_ZOOM=16 RAM=28g BUILD_CPUS=12 BUILD_MEM=30g \
docker compose -f docker-compose.build.yml up
# Europe z0-16 (~80 GB, ~12h, 16 GB RAM) # Germany z0-16 (kleiner Test: ~12 GB Output, ~2h, ~50 GB Disk)
AREA=europe MAX_ZOOM=16 RAM=16g docker compose -f docker-compose.build.yml up AREA=germany MAX_ZOOM=16 RAM=8g \
docker compose -f docker-compose.build.yml up
# Fertige Datei auf Server übertragen (resume-fähig via rsync): # Fertiges MBTiles auf Server übertragen (resume-fähig):
rsync -avh --progress \ rsync -avh --progress --partial \
./build/germany.mbtiles \ ./build/output/europe.mbtiles \
rd13server@192.168.178.6:/mnt/services-data/rd13_tile_server/data/osm-germany.mbtiles rd13server@192.168.178.6:/mnt/services-data/rd13_tile_server/data/osm-europe.mbtiles
# Martin auf dem Server neu starten: # Martin auf dem Server neu starten:
ssh rd13server@192.168.178.6 \ ssh rd13server@192.168.178.6 \
"cd /mnt/services-data/rd13_tile_server && docker compose restart martin" "cd /mnt/services-data/rd13_tile_server && docker compose restart martin"
# Neue Source prüfen: # Neue Source prüfen:
curl https://tiles.rd13server.de/catalog | python3 -m json.tool | grep osm-germany curl https://tiles.rd13server.de/catalog | python3 -m json.tool | grep osm-europe
``` ```
Output liegt lokal unter `./build/<AREA>.mbtiles` (gitignored). Build-Output liegt lokal unter `./build/output/<AREA>.mbtiles` (gitignored).
Sources-Cache unter `./build/sources/` bei Rebuild nicht löschen (spart Re-Download).
### Satellit-Tiles herunterladen (einmalig, ~38 GB, ~24h) ### Satellit-Tiles herunterladen (einmalig, ~38 GB, ~24h)

View file

@ -66,8 +66,29 @@ Lösung: eigenständiger Docker-Container für Downloads.
`docker-compose.download.yml` erstellt, Script mit `flush=True` robuster gemacht. `docker-compose.download.yml` erstellt, Script mit `flush=True` robuster gemacht.
Überreste bereinigt: satellite.mbtiles (4 KB stub), satellite.mbtiles-shm/wal, satellite.log. Überreste bereinigt: satellite.mbtiles (4 KB stub), satellite.mbtiles-shm/wal, satellite.log.
### Prompt 10 ### Prompt 11
Starte nochmal alle neu ich habe nochmal etwas mehr Ressourcen bereitgestellt. Lass uns gleich planet bauen wenn das geht. Und achte wieder auf Robustheit und Ressourcenverbrauch. Du kannst bis zu 12 CPUs und 32 GB RAM verwenden auf meinem Host-Rechner.
### Antwort 11
Disk-Analyse: Server hat 555 GB frei, Planet z16 bräuchte ~900 GB auf dem Host → nicht empfohlen.
docker-compose.build.yml robuster gemacht: Volumes aufgeteilt (output/sources/tmp getrennt), `--nodemap-type=sortedtable` für weniger RAM, G1GC-JVM-Flags, Disk-Anforderungen in Kommentaren.
### Prompt 12
Ok dann lass uns das nur für Europa in z16 bauen. Wie viel wären es dann?
### Antwort 12
Europa z16: ~25 GB Sources + ~150 GB Temp + ~80 GB Output = ~280 GB auf Host. Server: +80 GB (555 GB frei → kein Problem). Buildzeit: ~812h mit 12 CPUs.
### Prompt 13
Ok ja so bauen wir es!
### Antwort 13
docker-compose.build.yml committed. Startbefehl für Host:
```bash
AREA=europe MAX_ZOOM=16 RAM=28g BUILD_CPUS=12 BUILD_MEM=30g \
docker compose -f docker-compose.build.yml up
```
### Antwort 10 ### Antwort 10
OOM-Ursache identifiziert: Script submittete alle 5,5 Mio Futures gleichzeitig in eine Liste → Memory-Spike beim Aufbau. OOM-Ursache identifiziert: Script submittete alle 5,5 Mio Futures gleichzeitig in eine Liste → Memory-Spike beim Aufbau.

View file

@ -1,6 +1,6 @@
# PROJECT_CONTEXT rd13_tile_server # PROJECT_CONTEXT rd13_tile_server
**Letzte Aktualisierung:** 2026-06-13 Satellit-Download läuft stabil (16 Threads, 2GB RAM-Limit, OOM-Fix). Download-Container eigenständig. **Letzte Aktualisierung:** 2026-06-13 Satellit-Download läuft (~372 MB, stabil). Europa z16 Build-Container vorbereitet für Host-Rechner.
--- ---