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

74 lines
2.6 KiB
Markdown
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.

# 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, ~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.