7. Deployment view¶
Last reviewed: 2026-11-03
Where the software runs and how it gets there.
The infrastructure map is the interactive version (traffic, accounts and keys, data and backups, changes and deploys). It lives in the repository as generated HTML and is the one exception to "no generated HTML is committed": open it.
| Node | What runs there | Defined in |
|---|---|---|
App VM (beta.sailever.com, api.sailever.com) |
Rails (Puma and Thruster) behind kamal-proxy, fallback job worker for the realtime queue |
config/deploy.yml |
| Worker VM | Solid Queue: every queue by priority, tile and depth builds, link preview images | ADR 011, infra/worker |
| DB VM | PostgreSQL 16 with PostGIS and TLS, reachable from the app subnet only | DEPLOYMENT.md |
| Oracle Object Storage | Private buckets for track files, uploads and encrypted backups | DEPLOYMENT.md |
| Cloudflare | DNS, tunnels for SSH, Access, R2 for tiles and assets, the tiles Worker | infra/oci, infra/tiles |
| GitHub | Source, Actions (deploy job), container registry | .github/workflows |
| This documentation | Built by Cloudflare Pages from docs/, visible to the owner only |
tools/docs |
www.sailever.com is still the old Hetzner site and is never a deploy target (DEPLOYMENT.md).
Building blocks on nodes¶
| Building block | Runs on |
|---|---|
| Watch apps, DataField | The user's watch (Garmin, Wear OS) |
| Website, logbook, device API, admin | App VM, Kamal role web |
| Background jobs (all queues, recurring schedule) | Worker VM, Kamal role jobs; realtime also on the app VM as a fallback |
| Tile and depth builds | Worker VM, a separate service at the lowest priority |
| Database | DB VM |
| Track files, uploads, backups | Oracle Object Storage |
| Map tiles | Cloudflare R2 behind the tiles Worker |
Deploys: only the GitHub deploy job on main (DEPLOYMENT.md). Secrets: credentials.