Skip to main content

PostgreSQL Benchmark: AWS RDS vs Hostim vs Self-Hosted on Hetzner (2026)

· 9 min read

Short answer first: at the same size (2 vCPU / 4 GB, PostgreSQL 16), Hostim had the fastest writes, about 2.5× the write throughput of AWS RDS db.t4g.medium and 2.1× a default self-hosted Postgres on Hetzner. Hetzner had the fastest reads, on raw per-core CPU speed. RDS was slowest or near-slowest on both, and its listed price is the smallest part of the real bill.

This post shows every number, the exact commands to reproduce them, and (because it changes the conclusion) what high availability actually costs on each platform.

Render vs Railway vs Fly.io: Pricing Compared and When Each Wins (2026)

· 7 min read

Short answer first: the three platforms charge in three different shapes. Render adds a workspace fee for teams on top of fixed instance prices. Railway has no free tier and meters everything per second on top of a small plan fee. Fly.io is pure pay-as-you-go per second, with no base plan fee at all. The right pick depends less on the headline price and more on which of those shapes fits how you work.

This post explains each model, shows a side-by-side table, and gives the cases where each one wins.

Self-Host Postgres or Use Supabase? Here's How to Decide

· 6 min read

Short answer first: use Supabase if you want Postgres plus auth, realtime, storage, and a dashboard as one managed bundle. Self-host Postgres – or use a managed Postgres – if you mostly need a database and your app already handles its own auth and logic. The choice is not really "Postgres vs Supabase". It's whether you need the extra layers Supabase puts on top of Postgres.

This post gives you a clear way to decide, a side-by-side table, and the cases where each option is the right one.

Usage-Based Pricing: Why Your Railway and Render Bills Creep Up

· 5 min read

Usage-based pricing always looks cheap on the signup page. "Pay only for what you use." "Starts at $5." Then a few months in, your bill is double what you guessed, and you can't really point at the one thing that did it.

I've been comparing platforms a lot lately – partly because I run one, partly because people keep emailing me to ask whether X or Y is cheaper than Hostim. So here's the actual math on why metered hosting drifts upward over time, and the honest version of when it's the better deal anyway.

Let's Encrypt Wildcard Certs in Kubernetes: cert-manager + DNS-01 (and When We Skipped It)

· 7 min read

If you run Kubernetes and want a wildcard TLS cert from Let's Encrypt — say *.example.com — you need a DNS-01 challenge. HTTP-01 cannot prove control over a wildcard. That single fact rules out the easy path most tutorials show.

This post is what we actually run at Hostim.dev for our shared *.region.hostim.dev wildcard. We use cert-manager for per-app certs and a plain certbot Ansible playbook for the wildcard. Two different tools for two different jobs. We will explain why, then show the code for both.

Which Database Should You Self-Host? SQLite vs MySQL vs PostgreSQL vs Redis

· 6 min read

When you're deploying your own app, the database choice matters more than most people think. It affects performance, ops complexity, backups, and how much memory your server needs.

There are four options you'll run into most often: SQLite, MySQL, PostgreSQL, and Redis. They're not all the same kind of database – and that's the point. Here's when each one makes sense.

Bastion Host & GitHub Actions on Hostim.dev

· 3 min read

I haven't posted updates for a while, but several core features landed on Hostim.dev recently.

Instead of shipping from a fixed roadmap, I'm following support-driven (customer-driven) development: features move to the top of the queue once users actively need them.

Over the past month, this resulted in three practical additions around Docker CI/CD, GitHub Actions deployment, and secure bastion host access.

host.docker.internal Not Resolving on Linux: 1-Line Fix (2026)

· 4 min read

If you've ever moved a Docker project from a Mac to a Linux server, you've probably hit this error:

Connection refused: host.docker.internal:3000

On macOS and Windows, host.docker.internal is a magic DNS name that resolves to your host machine's IP address. It's incredibly useful for connecting containers to local databases or APIs running outside of Docker.

But on Linux? It doesn't exist by default.