trails/docs/ideas/self-host-overpass/README.md
Ullrich Schäfer 96de8831cf
poi-index: Grafana dashboard/alert, docs, privacy manifest
- planner dashboard: replace Overpass panels with POI index freshness +
  serving panels (age, rows/category, import status, API request rate/errors)
- alerts: replace overpass-upstream-unhealthy with poi-index-stale (>6 weeks)
- architecture.md: POI data flow now the self-hosted index
- privacy manifest (DE+EN): Overpass is Journal-surface-backfill-only;
  Planner POIs served same-origin from /api/pois
- self-host-overpass README + roadmap: superseded for POIs by poi-index
- poi-extract README: self-hoster story (optional pipeline, regional extract,
  graceful empty index)
- map-core tsconfig: exclude *.sync.test.ts from tsc to keep it zero-dep

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 22:54:51 +02:00

65 lines
3.2 KiB
Markdown
Raw 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.

# self-host-overpass (parked — superseded for POIs)
Full OpenSpec artifact set (`proposal.md`, `design.md`, `specs/`, `tasks.md`)
for hosting our own Overpass API. Moved here from `openspec/changes/` so it
does not clutter the active change list; revive by moving the directory back
under `openspec/changes/` when ready to implement.
## Status
**Superseded for the Planner's POI overlays** by the
[`poi-index`](../../../openspec/changes/poi-index/) change (shipped), which
removes Overpass from the POI path entirely: instead of running the Overpass
software, a monthly osmium extract feeds a self-hosted PostGIS `planner.pois`
index served at `/api/pois`. That is lighter than this plan (no Overpass
engine, no diff replication, no RAM ceiling) and covers every current POI need
— all queries were simple tag-in-bbox lookups that never used Overpass QL.
The former interim proxy (`/api/overpass``overpass.private.coffee`) has been
**removed**.
**Still relevant if** we ever need genuine Overpass QL (arbitrary ad-hoc
queries, recursion, `around:`, set operations) that a precomputed category
index can't answer — that's the remaining reason to revive this. The Journal's
surface-breakdown backfill still queries public Overpass instances for way
geometry; owning that upstream is the other revive trigger.
## When to revive
Revisit once **any** of these is true:
- private.coffee rate-limits our traffic or changes policy
- Our query volume makes continued use of a free public instance feel like
abuse (rule of thumb: >1 req/s sustained)
- We want POI coverage outside regions private.coffee happens to import
- Privacy posture requires full control of the upstream
## Key decisions already made
- **Topology**: Overpass runs on the maintainer's second Hetzner box
(FSN1, dedicated, i7-2600, 32 GB, 2×3 TB HDD, 1.8 TB free). Both hosts
share Hetzner's internal backbone with ~1 ms RTT.
- **Access control**: host-level firewall via nftables `DOCKER-USER` chain
(Docker bypasses `INPUT` when publishing ports, which is the classic
gotcha). Only the Planner host's egress IP is allowed on the Overpass
port. Planner host IP lives in `/etc/overpass/planner-ip.env` on the
Overpass box, **not** in the repo. Tailscale / WireGuard / vSwitch kept
as future hardening options.
- **Capacity ceiling on current hardware**: DACH extract fits comfortably
in the 23 GB of RAM available on the Overpass box. Europe+ would need
different hardware (AX52 ≈ €54/mo for a dedicated 64 GB NVMe box that
handles planet at low user counts; see design.md).
- **Switch path**: no client changes needed to cut over — the Planner
proxy reads `OVERPASS_URLS` (comma-separated list with round-robin
fallback) or the single-entry alias `OVERPASS_URL`, defaulting to
`lz4.overpass-api.de` then `overpass-api.de`. Flipping the env var
points at our own instance.
## What's in the folder
- `proposal.md` — why / what / impact
- `design.md` — topology, firewall pattern, capacity analysis, risks
- `specs/` — delta specs (would land against `overpass-hosting`,
`osm-poi-overlays`, `infrastructure`, `rate-limiting`)
- `tasks.md` — 10 groups of implementation tasks
- `.openspec.yaml` — OpenSpec scaffolding; keep for when it comes back