mirror of
https://github.com/ALLFATHER-BV/wadamesh.git
synced 2026-10-15 21:20:00 +00:00
Implements the three open PRs, with OpenStreetMap kept as the shipping default and OpenTopoMap added as a user toggle (the deploy PRs flipped the default to topo — this keeps OSM default and makes topo opt-in). PR #61 (@Yazutsu) — persist the map 'Show link lines' toggle across reboots: TouchCfg gains map_show_links (cfg v20, default 1); saved in mapOptLinesCb, loaded in begin(). PR #52/#53 (@samuelcoustet) — OpenTopoMap tile proxy, adapted: - deploy: tiles.wadamesh.com.conf keeps the default /{z}/{x}/{y}.jpg on OSM and adds /opentopo/ (OpenTopoMap) + an explicit /osm/ alias; tile-transcode.py grows _fetch_tile_png/_tile_response_from_png helpers feeding /osm + /opentopo while the root route stays OSM. - firmware: new map_style pref (cfg v21, 0=OSM default, 1=OpenTopoMap) + a 'Topographic map' switch in Map → Options. Topo tiles are namespaced on disk (/tiles/topo) and fetched via the proxy's /opentopo route, so the OSM and topo caches never collide and toggling is instant for already-cached tiles. Topo bypasses the OSM-only microSD packs and always fetches online; the shared (z,x,y) fetch-dedup ring is cleared on toggle so the new style re-queues. Legal: OpenTopoMap map tiles are © OpenTopoMap (CC-BY-SA) over © OpenStreetMap contributors (ODbL) + SRTM. The on-map © attribution and the Options → Info credits sheet switch to that text when topo is active; the proxy keeps a contactable User-Agent + 14-day cache per OpenTopoMap's tile-usage policy. Topo needs the VPS deploy (restart wadamesh-tile-transcode + reload nginx) before the /opentopo route serves; until then topo tiles 404 (handled as a permanent miss, no retry hammer). OSM default is unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-Authored-By: Yazutsu <andrzej@gruziel.pl>
86 lines
4.0 KiB
Markdown
86 lines
4.0 KiB
Markdown
# wadamesh.com infrastructure
|
|
|
|
Distribution stack for wadamesh: a **VPS nginx origin behind Cloudflare**.
|
|
|
|
```
|
|
tiles.wadamesh.com →CF (HTTP, edge-cached) → nginx → OpenStreetMap / OpenTopoMap
|
|
firmware.wadamesh.com →CF (cache bins) → nginx → /srv/wadamesh/firmware
|
|
flasher.wadamesh.com →CF (HTTPS) → web flasher (TODO — see below)
|
|
wadamesh.com →CF (HTTPS) → landing page (later)
|
|
```
|
|
|
|
**Map tile styles.** The default `/{z}/{x}/{y}.jpg` route serves **OpenStreetMap**
|
|
(the firmware default). An opt-in **OpenTopoMap** topographic style is served from
|
|
`/opentopo/{z}/{x}/{y}.jpg` (explicit OSM alias at `/osm/...`); the device requests
|
|
it only when the user enables *Map → Options → Topographic map*. Legal: OpenTopoMap
|
|
map tiles are **© OpenTopoMap (CC-BY-SA)** over **© OpenStreetMap contributors
|
|
(ODbL) + SRTM** — the touch UI shows that attribution when topo is active, and the
|
|
14-day disk cache keeps each tile hitting OpenTopoMap at most once per fortnight
|
|
(their tile-usage policy asks for a contactable UA + caching, both of which the
|
|
transcode service provides). Deploying the topo routes = update
|
|
`tiles.wadamesh.com.conf` + `tile-transcode.py`, then
|
|
`systemctl restart wadamesh-tile-transcode && nginx -t && systemctl reload nginx`
|
|
and purge the Cloudflare cache for `tiles.wadamesh.com/opentopo/*`.
|
|
|
|
The firmware fetches **tiles + the update-check over plain HTTP** (on-device HTTPS
|
|
isn't viable — mbedTLS needs ~30 KB heap, only ~5 KB is free post-Wi-Fi), so the
|
|
tile + firmware hosts must stay reachable over HTTP. Cloudflare provides the edge
|
|
cache, HTTPS for the flasher, and hides the origin IP (so no IP lives in this repo
|
|
or the firmware).
|
|
|
|
## 1. VPS (origin)
|
|
|
|
```bash
|
|
sudo apt install nginx
|
|
sudo mkdir -p /srv/wadamesh/firmware/releases/TOUCH /var/cache/nginx/wadamesh-tiles
|
|
sudo cp deploy/nginx/tiles.wadamesh.com.conf /etc/nginx/sites-available/
|
|
sudo cp deploy/nginx/firmware.wadamesh.com.conf /etc/nginx/sites-available/
|
|
sudo ln -s /etc/nginx/sites-available/tiles.wadamesh.com.conf /etc/nginx/sites-enabled/
|
|
sudo ln -s /etc/nginx/sites-available/firmware.wadamesh.com.conf /etc/nginx/sites-enabled/
|
|
sudo nginx -t && sudo systemctl reload nginx
|
|
```
|
|
|
|
## 2. Cloudflare
|
|
|
|
- **DNS:** `A`/`AAAA` records for `tiles`, `firmware`, `flasher`, `@` → the VPS IP,
|
|
all **Proxied** (orange cloud).
|
|
- **SSL/TLS:** mode **Flexible** (CF↔origin HTTP) is enough since the origin is
|
|
HTTP-only. **Do NOT enable "Always Use HTTPS"** on `tiles.` or `firmware.` — the
|
|
firmware needs plain HTTP there.
|
|
- **Cache Rules:**
|
|
- `tiles.wadamesh.com/*` → Eligible for cache, Edge TTL ~14d.
|
|
- `firmware.wadamesh.com/releases/*/*.bin` → cache, Edge TTL ~1d.
|
|
- `firmware.wadamesh.com/releases/TOUCH` (the listing) → short TTL (~60s) or
|
|
Bypass, so new releases appear promptly.
|
|
|
|
## 3. Publishing a release
|
|
|
|
From a wadamesh checkout (builds both boards, refreshes the listing, rsyncs up):
|
|
|
|
```bash
|
|
WADAMESH_VPS=user@your-vps scripts/release.sh beta_2
|
|
```
|
|
|
|
The on-device check GETs `http://firmware.wadamesh.com/releases/TOUCH`, finds the
|
|
highest `beta_<N>`, and (once OTA-over-Wi-Fi is re-enabled) pulls
|
|
`…/releases/TOUCH/beta_<N>/<board>.bin`.
|
|
|
|
## Done
|
|
|
|
- **Web flasher** ✅ at `flasher.wadamesh.com` — `deploy/flasher/` (esp-web-tools /
|
|
Web Serial, board picker, manifests pointing at the rolling `/latest/` merged
|
|
bins; `release.sh` refreshes `/latest/` each publish).
|
|
- **Apex** `wadamesh.com` 301-redirects to the flasher — **activate by pointing
|
|
the `wadamesh.com` A record at the VPS** in Cloudflare (it's still on the parking IP).
|
|
|
|
## TODO before public launch
|
|
|
|
- **Re-enable OTA-over-Wi-Fi** in the firmware (currently it version-checks then
|
|
defers to manual flashing).
|
|
- **Flip `wadamesh` repo public** = launch.
|
|
- Decide tile-proxy sharing: dedicated `tiles.wadamesh.com` (this config) vs
|
|
reusing the meshcomod proxy.
|
|
|
|
> Never commit the VPS IP, SSH keys, or `WADAMESH_VPS`. Cloudflare fronts the
|
|
> origin; the deploy target is supplied via the environment at publish time.
|