← Back to Categories
Self-Hosting & Homelab15 published posts

Self-Hosting & Homelab

Running your own services: home labs, NAS, Proxmox, Docker, self-hosted apps, networking and privacy.

Self-Host n8n on a VPS with Docker, PostgreSQL, and Caddy (2026)
Guide

Self-Host n8n on a VPS with Docker, PostgreSQL, and Caddy (2026)

Build a production n8n on a VPS with Docker Compose, PostgreSQL, and Caddy for automatic HTTPS, then harden and upgrade it safely. Verified end to end on n8n 2.36 and Postgres 16.

Aug 30, 20269 min read
Setting Up Your Own VPS: A Secure Starting Point
Guide

Setting Up Your Own VPS: A Secure Starting Point

Turn a fresh VPS into a secure base for self-hosting: non-root user, key-only SSH, a default-deny UFW firewall, auto updates, and the Docker firewall gotcha.

Aug 30, 202611 min read
Put SSH Behind Tailscale and Close Port 22
Guide

Put SSH Behind Tailscale and Close Port 22

Move SSH onto a private Tailscale network and close port 22. Includes the key-expiry step that prevents lockouts, the UFW rules, and a recovery path.

Aug 30, 202610 min read
Install Docker on macOS, Windows (WSL2), and Linux: One Guide, Three Paths
Guide

Install Docker on macOS, Windows (WSL2), and Linux: One Guide, Three Paths

Get a working Docker Engine on macOS, Windows with WSL2, and Linux, then verify with docker run hello-world. Real captured output, the post-install docker group and rootless steps, and the gotchas each OS actually needs.

Sep 10, 202614 min read
Run Your First Containers: docker run, ps, logs, exec, stop, rm
Guide

Run Your First Containers: docker run, ps, logs, exec, stop, rm

Drive the everyday Docker container lifecycle on a real nginx server: run, ps, logs, exec, stop, start, and rm, plus the image-versus-container mental model. Real captured output on Docker Engine 29.8.0.

Sep 10, 20269 min read
Docker Compose: Run a Multi-Service Stack (Web + Postgres + Redis)
Guide

Docker Compose: Run a Multi-Service Stack (Web + Postgres + Redis)

Build and run a real three-service stack with Docker Compose: a Node API, Postgres, and Redis wired together with one docker compose up. Real captured output, service-to-service networking, and the depends_on readiness gotcha.

Sep 10, 202615 min read
Lean Docker Images: Multi-Stage Builds and Layer Caching
Guide

Lean Docker Images: Multi-Stage Builds and Layer Caching

Build the same Node app two ways and measure it: a naive 1.62GB image versus a 233MB multi-stage Alpine image. Real numbers for image size, layer caching, and docker history, with a working Dockerfile you can copy.

Sep 10, 202611 min read
Where Your Data Lives: Docker Volumes, Bind Mounts, and Networks
Guide

Where Your Data Lives: Docker Volumes, Bind Mounts, and Networks

Make container data survive restarts and let containers talk to each other: named volumes vs bind mounts, backing up and restoring a volume, and user-defined networks with DNS by name. Real captured output.

Sep 10, 202612 min read
Operating Containers: Healthchecks, Resource Limits, Restart Policies, and Env Config
Guide

Operating Containers: Healthchecks, Resource Limits, Restart Policies, and Env Config

Make Docker containers behave in production: healthchecks and health-gated startup, memory and CPU limits (and the OOM exit 137), restart policies that self-heal, and clean env config. Real captured output.

Sep 11, 202612 min read
Docker Security Basics: Non-Root, Read-Only, Image Scanning, and Secrets
Guide

Docker Security Basics: Non-Root, Read-Only, Image Scanning, and Secrets

Harden a Docker container without breaking it: scan for CVEs with Trivy, run as non-root, make the root filesystem read-only, drop Linux capabilities, and keep secrets out of the image. Real captured output.

Sep 11, 202612 min read
Fix: Permission Denied on the Docker Daemon Socket
Guide

Fix: Permission Denied on the Docker Daemon Socket

Got 'permission denied while trying to connect to the Docker daemon socket' on Linux? Here is why it happens, the one-line fix to keep working now, the permanent docker-group fix, and the insecure chmod you should never copy. Real captured output.

Sep 11, 20266 min read
Docker Images vs Containers, Explained
Guide

Docker Images vs Containers, Explained

Confused by Docker images versus containers? An image is the read-only template; a container is a running copy of it. See it proven with real output: one image, three containers, each with its own writable layer, plus what image layers actually are.

Sep 11, 20266 min read
Docker vs Podman: A Hands-On Comparison and Migration
Guide

Docker vs Podman: A Hands-On Comparison and Migration

Docker vs Podman on one real Linux box: daemonless and rootless by default, the bind-mount ownership and privileged-port differences, running the same Compose file with podman-compose, and rootless systemd with Quadlet. Real captured output, plus a migration checklist.

Sep 12, 202610 min read
Capstone: Dockerize Your Own App End to End
Guide

Capstone: Dockerize Your Own App End to End

The Docker Foundations capstone: take a real Express + Postgres app from source to a live HTTPS URL. A lean multi-stage image, a hardened production Compose stack (healthchecks, limits, read-only, non-root), a GitHub Actions build that pushes to GHCR, and a Caddy deploy with automatic HTTPS via sslip.io. Real captured output.

Sep 13, 20269 min read
Docker Foundations: The Complete Hands-On Series (Install to Production)
Guide

Docker Foundations: The Complete Hands-On Series (Install to Production)

The complete Docker Foundations series in one place: a hands-on path from installing Docker to building, hardening, and deploying your own app over HTTPS. Every guide is a real, tested lab, linked in order, with runnable code in the companion repo.

Sep 13, 20265 min read