# 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: `docker` → `banyaro`). --- ## 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 3. `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`) ```sh 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 ```sh 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: ```sh 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, ~1–2 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.