banyaro/tools/osm-extract/INSTALL.md
rene 4bc7454258 POI-Karte: Offline-Import aus OSM statt Live-Overpass-Scan (Build 4)
- osm.py: Live-Scanner deaktiviert — /pois liest nur noch aus DB,
  /analyze ist No-Op. Behebt wiederholte OSM-Banns (Tile-Load + Scanning).
- tools/osm-extract: Extraktion (pyosmium) + Loader (schützt user_edited)
  + Docker-Refresh-Job mit osmium-tags-filter-Vorstufe (RAM-schonend).
- docker-compose.osm.yml: Refresh-Service (mem_limit 4g), monatlich via
  DSM-Aufgabenplaner.
2026-06-03 20:44:32 +02:00

2.6 KiB
Raw Permalink Blame History

Build 4 — POI-Offline-Umstellung auf der DiskStation (DSM-Upload)

Ziel: Live-Overpass-Scanner abschalten + die 1,45 Mio DACH-POIs in die Produktiv-DB migrieren. Ohne 5,7-GB-Download (die fertige dach.sqlite wird mit hochgeladen).

App-Verzeichnis auf der DS: /volume1/docker/banyaro/ (im File Station: dockerbanyaro).


Schritt 1 — Code hochladen (File Station)

  1. build4-osm-code.zip in den Ordner docker/banyaro hochladen.
  2. Rechtsklick → Entpacken → Hierher entpacken. Das überschreibt backend/routes/osm.py (Scanner aus) und legt tools/osm-extract/ + docker-compose.osm.yml an. Andere Dateien bleiben unberührt.

Schritt 2 — Vorbereiteten POI-Extrakt hochladen

  1. dach.sqlite (181 MB) in den Ordner docker/banyaro/data hochladen. (Liegt dann im Container als /data/dach.sqlite.)

Schritt 3 — Migration + Deploy (SSH-Terminal: ssh ds)

cd /volume1/docker/banyaro

# Refresh-Image bauen (einmalig)
docker compose -f docker-compose.osm.yml build

# MIGRATION: lädt dach.sqlite in die Produktiv-DB (Backup wird vorher angelegt,
# user_edited-POIs + Community-Marker bleiben geschützt)
docker compose -f docker-compose.osm.yml run --rm \
  -e PREBUILT_SQLITE=/data/dach.sqlite osm-refresh

# DEPLOY: baut die App neu → scanner-lose osm.py geht live
docker compose up -d --build

Reihenfolge bewusst: erst Daten laden, dann App neu bauen → kein Fenster mit leerer Karte.

Schritt 4 — Prüfen

docker compose -f docker-compose.osm.yml run --rm --entrypoint python3 \
  osm-refresh -c "import sqlite3; c=sqlite3.connect('/data/banyaro.db'); \
print('osm_pois:', c.execute('select count(*) from osm_pois').fetchone()[0]); \
print(c.execute('select type,count(*) from osm_pois group by type order by 2 desc').fetchall())"

Erwartung: ~1.452.675 POIs (bank ~1,0 Mio, restaurant ~60k …). In der App die Karte öffnen → Marker laden ohne Overpass.

Aufräumen (optional)

dach.sqlite aus docker/banyaro/data kann nach erfolgreicher Migration weg.

Monatlicher Auto-Refresh (DSM-Aufgabenplaner)

Systemsteuerung → Aufgabenplaner → Erstellen → Geplante Aufgabe → Benutzerdefiniertes Skript. Benutzer root, monatlich z. B. 1. um 04:00:

cd /volume1/docker/banyaro && \
  docker compose -f docker-compose.osm.yml run --rm osm-refresh \
  >> /volume1/docker/banyaro/data/osm-refresh.log 2>&1

(ohne PREBUILT_SQLITE → holt frisch von Geofabrik, ~12 GB RAM dank tags-filter)

Rollback

Vor jedem Lauf entsteht data/banyaro.pre-osm-JJJJMMTT.db. Im Notfall: App stoppen, diese Datei auf banyaro.db zurückkopieren, App starten.