Skip to main content

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.

Caddy vs HAProxy vs Nginx vs Traefik: Which Reverse Proxy to Pick (2026)

· 7 min read

Short answer: HAProxy is the fastest, Caddy is the easiest, Traefik is the best fit for containers, and Nginx is the safest default. All four terminate TLS and reverse proxy well; the choice comes down to how your services change and how much config you want to own. Below: each proxy in detail, every head-to-head pairing, and a performance ranking.