{"slug":"build-your-own-edge-network-on-commodity-hardware","url":"https://tako.sh/blog/build-your-own-edge-network-on-commodity-hardware/","canonical":"https://tako.sh/blog/build-your-own-edge-network-on-commodity-hardware/","title":"Build Your Own Edge Network on Commodity Hardware","date":"2026-04-07T04:51","description":"Three $5 VPS boxes in different regions, one tako.toml, and Cloudflare geo-steering. Your own global edge network on hardware you own.","author":null,"image":"9f084d40a13b","imageAlt":null,"headings":[{"depth":2,"slug":"the-architecture","text":"The architecture"},{"depth":2,"slug":"the-config","text":"The config"},{"depth":2,"slug":"the-routing-layer","text":"The routing layer"},{"depth":2,"slug":"the-cost","text":"The cost"},{"depth":2,"slug":"no-control-plane","text":"No control plane"},{"depth":2,"slug":"the-bigger-picture","text":"The bigger picture"}],"markdown":"Fly.io lets you scatter micro-VMs across 30+ regions with a single command. It's genuinely great. It's also someone else's hardware with someone else's pricing — and those micro-VMs come with [256 MB of RAM](/blog/your-5-dollar-vps-is-more-powerful-than-you-think).\n\nWhat if you could get the same geographic distribution on servers with 16x the memory, for a similar monthly bill? Three VPS boxes, one [`tako.toml`](/docs/tako-toml), and Cloudflare routing users to the nearest one.\n\n## The architecture\n\n```d2\ndirection: right\n\nusers: Users {\n  us: US West {style.fill: \"#FFF9F4\"; style.stroke: \"#2F2A44\"; style.font-size: 16}\n  eu: Europe {style.fill: \"#FFF9F4\"; style.stroke: \"#2F2A44\"; style.font-size: 16}\n  asia: Asia Pacific {style.fill: \"#FFF9F4\"; style.stroke: \"#2F2A44\"; style.font-size: 16}\n}\n\ncf: Cloudflare\\ngeo-steering {\n  shape: cloud\n  style.fill: \"#9BC4B6\"\n  style.font-size: 18\n}\n\nla: LA\\nVultr {shape: hexagon; style.fill: \"#E88783\"; style.font-size: 16}\nfra: Frankfurt\\nHetzner {shape: hexagon; style.fill: \"#E88783\"; style.font-size: 16}\nsgp: Singapore\\nVultr {shape: hexagon; style.fill: \"#E88783\"; style.font-size: 16}\n\nusers.us -> cf\nusers.eu -> cf\nusers.asia -> cf\n\ncf -> la: nearest\ncf -> fra: nearest\ncf -> sgp: nearest\n```\n\nThree layers. **Cloudflare** sits at the edge — handles DNS, terminates TLS, and routes each request to the nearest origin. **Tako** runs on each VPS — [deploys your app](/docs/deployment), manages processes, handles zero-downtime rolling updates. **Your servers** do the actual compute.\n\nA user in Tokyo hits Singapore. Berlin goes to Frankfurt. San Francisco goes to LA. Each server runs the same app, deployed from the same config, completely independent of the others.\n\n## The config\n\nWe covered multi-server config in detail in [One Config, Many Servers](/blog/one-config-many-servers). The short version:\n\n```toml\nname = \"myapp\"\n\n[build]\nrun = \"bun run build\"\n\n[envs.production]\nroute = \"myapp.com\"\nservers = [\"la\", \"fra\", \"sgp\"]\n```\n\nRegister each server once with [`tako servers add`](/docs/cli), then `tako deploy` builds your app once locally and uploads it to all three servers in parallel via SFTP. Each server runs its own [rolling update](/blog/zero-downtime-deploys-without-a-container-in-sight) independently — if Frankfurt finishes before Singapore, it starts serving the new version immediately.\n\n## The routing layer\n\nYou have two options, depending on how much you want to spend on intelligence.\n\n**Free: round-robin DNS.** Add three proxied A records for `myapp.com` in Cloudflare. Requests distribute across your origins, and Cloudflare retries failed ones automatically. You get failover for free, but no geo-awareness — a user in Tokyo might hit LA.\n\n**Smart: geo-steering ($20/mo).** [Cloudflare Load Balancing](https://developers.cloudflare.com/load-balancing/) with geo-steering assigns each origin to a geographic region. Health checks run every 60 seconds — if Singapore goes down, traffic fails over to the next nearest server automatically.\n\n| Component                       | Cost       |\n| ------------------------------- | ---------- |\n| Base (2 origins, health checks) | $5/mo      |\n| 3rd origin                      | $5/mo      |\n| Geo-steering add-on             | $10/mo     |\n| **Total**                       | **$20/mo** |\n\nThe free option is a fine starting point. Upgrade to geo-steering when latency starts to matter.\n\n## The cost\n\n| Setup                             | Monthly  | RAM per region |\n| --------------------------------- | -------- | -------------- |\n| 3x Hetzner CX22 + CF round-robin  | **~$18** | 4 GB           |\n| 3x Vultr $5 + CF round-robin      | **$15**  | 1 GB           |\n| 3x Hetzner CX22 + CF geo-steering | **~$38** | 4 GB           |\n| Fly.io shared-cpu-1x, 256 MB × 3  | **~$8**  | 256 MB         |\n| Fly.io shared-cpu-1x, 1 GB × 3    | **~$20** | 1 GB           |\n\nFly.io wins on simplicity and minimum price. But look at the resources: three Hetzner boxes give you **4 GB per region** — 16x Fly.io's cheapest tier. For $38/month with geo-steering, you get 12 GB of total RAM across three continents on machines you fully control. Without geo-steering, $18/month still gives you three globally distributed servers with automatic failover.\n\nAnd those VPS boxes can each host [multiple apps](/blog/scale-to-zero-without-containers) that scale to zero when idle — your edge network doesn't have to serve just one project.\n\n## No control plane\n\nEach Tako server is self-sufficient. Its own [Pingora proxy](/blog/pingora-vs-caddy-vs-traefik), its own process management, its own [secrets](/blog/secrets-without-env-files) database, its own release history. There's no cluster state, no leader election, no orchestrator to babysit. If one server disappears, the others keep serving and Cloudflare stops routing to it.\n\nAdding a region later is a three-step process: spin up a VPS, run `tako servers add`, add the name to your `servers` list. Next deploy, it's live. Removing one is the reverse — take it out of the list, decommission the box.\n\n## The bigger picture\n\nThis is the floor. The same config that deploys to three servers also handles [per-server scaling](/blog/one-config-many-servers), [per-environment secrets](/docs/cli), and a [staging environment](/blog/one-config-many-servers) that costs nothing when nobody's using it.\n\nAnd Tako is growing past deploys. The [SDK](/docs/how-tako-works) is the starting point for backend primitives — WebSocket channels, queues, workflows — running on the same servers, managed from the same config. Three boxes in three regions, each with the full platform layer, all from one `tako.toml`.\n\nYour edge network doesn't need to be someone else's infrastructure. A few cheap VPS boxes and the right tools get you surprisingly far.\n\n[Get started →](/docs)"}