- 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.
55 lines
2.3 KiB
Markdown
55 lines
2.3 KiB
Markdown
# OSM-POI Offline-Refresh (Build 4)
|
||
|
||
Ersetzt das Live-Scannen gegen `overpass-api.de` (war wiederholt OSM-Bann-Quelle)
|
||
durch einen **monatlichen Offline-Batch**: POIs werden aus den Geofabrik-OSM-Daten
|
||
extrahiert und in die Produktiv-DB geladen. Danach keine OSM-Live-Last mehr.
|
||
|
||
## Bestandteile
|
||
|
||
| Datei | Zweck |
|
||
|---|---|
|
||
| `extract_osm_pois.py` | pbf → `osm_pois`-Schema (pyosmium). Kanonisches Kategorie→Tag-Mapping. |
|
||
| `load_into_prod.py` | Extrakt → Produktiv-DB. Schützt `user_edited=1`, ersetzt den Rest. |
|
||
| `refresh.sh` | Orchestrierung im Container: download → tags-filter → extract → load. |
|
||
| `Dockerfile` | Image mit osmium-tool + pyosmium. |
|
||
| `../../docker-compose.osm.yml` | Eigener Service, **nicht** im Default-Stack. |
|
||
|
||
## Was es tut
|
||
|
||
- Lädt CH/AT/DE von Geofabrik (~5,7 GB), dampft sie mit `osmium tags-filter`
|
||
(streaming, <500 MB RAM) auf die relevanten Objekte ein, extrahiert die 9
|
||
Ban-Yaro-Kategorien und lädt sie in `/data/banyaro.db`.
|
||
- **Sicherheitskopie** der DB vor jedem Lauf (letzte 3 bleiben).
|
||
- `user_edited=1`-POIs und `user_map_pois` (Community-Marker) bleiben unberührt.
|
||
- Peak-RAM ~1–2 GB, hartes `mem_limit: 4g` als Schutzschranke.
|
||
- Aktuelle Größenordnung: DACH ~1,45 Mio POIs, ~180 MB.
|
||
|
||
## Manuell ausführen (Test)
|
||
|
||
```sh
|
||
cd /pfad/zu/banyaro # dort, wo docker-compose.yml liegt
|
||
docker compose -f docker-compose.osm.yml build
|
||
docker compose -f docker-compose.osm.yml run --rm osm-refresh
|
||
```
|
||
|
||
## Monatlich per DSM-Aufgabenplaner
|
||
|
||
1. **Systemsteuerung → Aufgabenplaner → Erstellen → Geplante Aufgabe → Benutzerdefiniertes Skript**
|
||
2. Benutzer: `root` (für Docker-Zugriff)
|
||
3. Zeitplan: **monatlich**, z. B. am 1. um 04:00 (lastarm)
|
||
4. Aufgabeneinstellungen → Benutzerdefiniertes Skript:
|
||
|
||
```sh
|
||
cd /volume1/docker/banyaro && \
|
||
/usr/local/bin/docker compose -f docker-compose.osm.yml run --rm osm-refresh \
|
||
>> /volume1/docker/banyaro/data/osm-refresh.log 2>&1
|
||
```
|
||
|
||
> Pfad `/volume1/docker/banyaro` an euer Compose-Verzeichnis anpassen.
|
||
> Docker-Binary auf DSM ist meist `/usr/local/bin/docker` (`docker compose`),
|
||
> bei älteren DSM ggf. `docker-compose`.
|
||
|
||
## Rollback
|
||
|
||
Vor jedem Lauf wird `banyaro.pre-osm-JJJJMMTT.db` neben der DB abgelegt. Im
|
||
Notfall App stoppen, diese Datei auf `banyaro.db` zurückkopieren, App starten.
|