rd13_tile_server/scripts/build-host.sh

121 lines
4.7 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "================================================================"