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.
This commit is contained in:
parent
214543559c
commit
4bc7454258
9 changed files with 457 additions and 26 deletions
74
tools/osm-extract/INSTALL.md
Normal file
74
tools/osm-extract/INSTALL.md
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
# 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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue