Skip to main content

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 on Linux: Why It Fails and the 1-Line Fix (2026)

· 5 min read

host.docker.internal does not exist on Linux by default — Docker only creates it automatically on macOS and Windows. On Docker 20.10 and newer you opt in with one line: extra_hosts: - "host.docker.internal:host-gateway". That maps the name to the Docker bridge gateway, so your container can reach services running on the host.

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

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.

How to Self-Host n8n with Docker Compose (2026 Guide)

· 7 min read

To self-host n8n with Docker Compose you need one docker-compose.yml with the n8nio/n8n image, a named volume mounted at /home/node/.n8n, and the N8N_HOST, WEBHOOK_URL and GENERIC_TIMEZONE environment variables set — then docker compose up -d. The default setup stores everything in SQLite and speaks plain HTTP on port 5678, so this guide also covers the four things that bare file leaves out: PostgreSQL, restarting after a reboot, HTTPS, and doing it all without Traefik.

n8n is a popular open-source automation tool – like Zapier, but self-hosted. Here's how to run it on your own VPS using Docker Compose, and expose it securely over HTTPS using Caddy as the ingress proxy.

If you want a broader primer, check out How to Self-Host a Docker Compose App. But you don't need to read it first – this guide is self-contained.

🗓️ Last updated: August 2026. Tested with the latest n8nio/n8n image on Ubuntu 24.04.