122 lines
4.7 KiB
Bash
122 lines
4.7 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
# =============================================================================
|
|||
|
|
# build-host.sh -- OSM Vektor-Tiles auf Host-Rechner bauen + auf Server deployen
|
|||
|
|
#
|
|||
|
|
# Dieses Script läuft auf dem HOST-RECHNER (nicht auf dem Server).
|
|||
|
|
# Voraussetzung: Docker Desktop (macOS/Windows) oder Docker (Linux)
|
|||
|
|
#
|
|||
|
|
# Verwendung:
|
|||
|
|
# ./scripts/build-host.sh [germany|europe|planet] [SERVER_USER@SERVER_HOST]
|
|||
|
|
#
|
|||
|
|
# Beispiele:
|
|||
|
|
# ./scripts/build-host.sh germany rd13server@192.168.178.6
|
|||
|
|
# ./scripts/build-host.sh europe rd13server@192.168.178.6
|
|||
|
|
#
|
|||
|
|
# Das fertige MBTiles wird per rsync auf den Server übertragen und Martin
|
|||
|
|
# automatisch neu gestartet.
|
|||
|
|
#
|
|||
|
|
# Hardware-Anforderungen:
|
|||
|
|
# germany: ≥ 8 GB RAM, ≥ 30 GB freier Disk, ~2h
|
|||
|
|
# europe: ≥ 16 GB RAM, ≥ 200 GB freier Disk, ~8-12h
|
|||
|
|
# planet: ≥ 32 GB RAM, ≥ 500 GB freier Disk, ~24h
|
|||
|
|
# =============================================================================
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
AREA="${1:-germany}"
|
|||
|
|
REMOTE="${2:-}"
|
|||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||
|
|
BUILD_DIR="${SCRIPT_DIR}/../data/build"
|
|||
|
|
OUTPUT_FILE="${BUILD_DIR}/${AREA}.mbtiles"
|
|||
|
|
|
|||
|
|
# ── RAM-Profil ───────────────────────────────────────────────────────────────
|
|||
|
|
case "$AREA" in
|
|||
|
|
germany) RAM="8g" ;;
|
|||
|
|
austria) RAM="4g" ;;
|
|||
|
|
europe) RAM="16g" ;;
|
|||
|
|
planet) RAM="32g" ;;
|
|||
|
|
*)
|
|||
|
|
echo "Unbekannte Region: $AREA"
|
|||
|
|
echo "Verfügbar: germany | austria | europe | planet"
|
|||
|
|
exit 1
|
|||
|
|
;;
|
|||
|
|
esac
|
|||
|
|
|
|||
|
|
mkdir -p "$BUILD_DIR"
|
|||
|
|
|
|||
|
|
echo "================================================================"
|
|||
|
|
echo " rd13 Tile-Build | Region: $AREA | RAM: $RAM | $(date)"
|
|||
|
|
echo " Output: $OUTPUT_FILE"
|
|||
|
|
echo "================================================================"
|
|||
|
|
|
|||
|
|
# ── 1. Planetiler bauen ──────────────────────────────────────────────────────
|
|||
|
|
echo ""
|
|||
|
|
echo "[1/3] Starte Planetiler via Docker..."
|
|||
|
|
echo " (OSM-Daten werden automatisch von Geofabrik heruntergeladen)"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
docker run --rm \
|
|||
|
|
-v "${BUILD_DIR}:/data" \
|
|||
|
|
-e JAVA_TOOL_OPTIONS="-Xmx${RAM}" \
|
|||
|
|
ghcr.io/onthegomap/planetiler:latest \
|
|||
|
|
--download \
|
|||
|
|
--area="${AREA}" \
|
|||
|
|
--output="/data/${AREA}.mbtiles" \
|
|||
|
|
--maxzoom=16 \
|
|||
|
|
--force
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "[1/3] Build fertig: $(ls -lh "$OUTPUT_FILE" | awk '{print $5}')"
|
|||
|
|
|
|||
|
|
# ── 2. Validieren ────────────────────────────────────────────────────────────
|
|||
|
|
echo "[2/3] Validiere MBTiles..."
|
|||
|
|
python3 - <<PYEOF
|
|||
|
|
import sqlite3, sys
|
|||
|
|
conn = sqlite3.connect("${OUTPUT_FILE}")
|
|||
|
|
meta = dict(conn.execute("SELECT name, value FROM metadata").fetchall())
|
|||
|
|
maxzoom = meta.get("maxzoom", "?")
|
|||
|
|
bounds = meta.get("bounds", "?")
|
|||
|
|
count = conn.execute("SELECT COUNT(*) FROM tiles").fetchone()[0]
|
|||
|
|
print(f" Name: {meta.get('name','?')}")
|
|||
|
|
print(f" MaxZoom: {maxzoom}")
|
|||
|
|
print(f" Bounds: {bounds}")
|
|||
|
|
print(f" Tiles: {count:,}")
|
|||
|
|
if int(maxzoom) < 14:
|
|||
|
|
print("FEHLER: MaxZoom < 14 – Build unvollständig?")
|
|||
|
|
sys.exit(1)
|
|||
|
|
conn.close()
|
|||
|
|
print(" ✓ Validierung OK")
|
|||
|
|
PYEOF
|
|||
|
|
|
|||
|
|
# ── 3. Transfer auf Server ───────────────────────────────────────────────────
|
|||
|
|
if [[ -n "$REMOTE" ]]; then
|
|||
|
|
REMOTE_PATH="/mnt/services-data/rd13_tile_server/data/osm-${AREA}.mbtiles"
|
|||
|
|
echo ""
|
|||
|
|
echo "[3/3] Übertrage nach ${REMOTE}:${REMOTE_PATH}..."
|
|||
|
|
echo " (rsync – bricht/fortsetzt bei Verbindungsunterbrechung)"
|
|||
|
|
rsync -avh --progress \
|
|||
|
|
--partial --partial-dir="${BUILD_DIR}/.rsync-partial" \
|
|||
|
|
"${OUTPUT_FILE}" \
|
|||
|
|
"${REMOTE}:${REMOTE_PATH}"
|
|||
|
|
echo ""
|
|||
|
|
echo "[3/3] Starte Martin auf Server neu..."
|
|||
|
|
ssh "${REMOTE}" "cd /mnt/services-data/rd13_tile_server && docker compose restart martin"
|
|||
|
|
echo ""
|
|||
|
|
echo "✓ Fertig! Neue Source verfügbar unter:"
|
|||
|
|
echo " https://tiles.rd13server.de/osm-${AREA}"
|
|||
|
|
echo ""
|
|||
|
|
echo " Füge in config/styles/osm-intl.json eine zweite Source hinzu:"
|
|||
|
|
echo " \"osm-${AREA}\": { \"type\": \"vector\", \"url\": \"mbtiles://{osm-${AREA}}\" }"
|
|||
|
|
else
|
|||
|
|
echo ""
|
|||
|
|
echo "[3/3] Kein Remote angegeben – Transfer übersprungen."
|
|||
|
|
echo " MBTiles liegt unter: ${OUTPUT_FILE}"
|
|||
|
|
echo ""
|
|||
|
|
echo " Manueller Transfer:"
|
|||
|
|
echo " rsync -avh --progress ${OUTPUT_FILE} USER@SERVER:/mnt/services-data/rd13_tile_server/data/osm-${AREA}.mbtiles"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "================================================================"
|
|||
|
|
echo " Build abgeschlossen: $(date)"
|
|||
|
|
echo "================================================================"
|