Skip to main content

8 posts tagged with "docker"

View All Tags

What Does 'Hello World' Actually Cost on AWS vs Bare Metal? (2026)

· 10 min read

Short answer: one "hello world" container with a domain and HTTPS costs about $32 per month on AWS if you set it up carefully, and about $69 per month if you follow the default AWS tutorial. The same thing on a small Hetzner Cloud server costs €5.99 per month. Bare metal is the surprising one. A Hetzner AX42-1 costs €97.30 per month, which makes it the most expensive option here, not the cheapest.

Two results are worth explaining, and neither is what people usually say:

  1. Compute is not the expensive part on AWS at this size. In the realistic setup, the container is 15% of the bill. The other 85% is the load balancer and the NAT gateway. Those cost the same whether you serve one request per month or a million.
  2. Bare metal is not cheap. It is cheap per app. A dedicated server only pays off when you fill it. For one container it is a bad deal.

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.

How to Self-Host a Docker Compose App

· 7 min read

You've got a working docker-compose.yml, and now you want to put it online.

Maybe it's a SaaS side project. A personal site. A dashboard for a client. Whatever it is – you're here because you want to host a Compose app, and you don't want to spend hours fiddling with YAML, CI pipelines, or Kubernetes manifests.

Let's walk through what it really takes to host a Docker Compose project on your own. And then I'll show you what I built to make this process go away – for myself and anyone else who's tired of copy-pasting configs.