Not everything belongs on a home connection — public game servers, a chat app that needs to survive a home ISP outage, a second backup copy that shouldn't share a building with the first. DigitalOcean droplets have quietly become the answer to "this needs to live somewhere else" more times than any other single tool in this homelab. Here's the honest take after months of actually depending on them.
Not one droplet spun up once and left running — a real, changing set of them: a game-server relay handling real player traffic, a production chat application's actual backend, a dedicated infra-testing twin built specifically so risky changes get tried somewhere that isn't production first, and (at various points) a second, independent backup target for real offsite coverage. Droplets get built, used hard, and torn down again when they've served their purpose — this isn't "one server that's been running for years," it's the actual operational pattern of standing infrastructure up and down as real needs change.
Worth being honest about what this isn't: it's not a definitively diagnosed DigitalOcean-side problem — it could just as easily be something specific to the automation client making the connections, a routing quirk between specific networks, or something else entirely that happens to correlate with "direct public IP" without being caused by it. What's real is the pattern holding consistently across multiple, unrelated droplets over months: if you're scripting against a droplet and hitting confusing intermittent SSH timeouts that don't reproduce when you try manually a minute later, a tunneled path is worth trying before assuming something is fundamentally broken.
It's tempting, if you already run a tunnel for something else, to reach for the same tool to "hide" a new droplet from the internet. Worth being precise about what a generic tunnel actually does: it changes which address traffic arrives at — it doesn't add any access control of its own. That solves a NAT problem. A cloud droplet doesn't have a NAT problem; it already has its own public IP. What actually restricts who can reach it is a firewall rule scoped to a specific source IP — DigitalOcean's Cloud Firewall feature does this for free, enforced at the network edge before traffic ever reaches the droplet itself. Reach for that first; layering a tunnel on top of a droplet that already has a public IP usually adds complexity without adding the restriction you actually wanted.
For "this needs a public IP and doesn't belong on a home connection," DigitalOcean droplets have been reliably solid — real infrastructure, not a toy, cheap enough to spin up and tear down freely, simple enough that snapshots and firewalls actually get used instead of skipped. The one real asterisk is the unexplained SSH-under-automation flakiness — genuinely annoying, worked around reliably, but still an open question rather than a closed one after months of hitting it. Worth knowing about going in rather than discovering it mid-incident and assuming something is uniquely broken about your setup.