Hands-on guides

In-depth guides, tested on real servers.

Multi-part guides that take a topic from first principles to production. Every command is run and verified on a live server before it is published.

Servers & Security

Run and secure your own infrastructure, hands on.

Linux Server Hardening

A six-part, hands-on guide to securing a Linux server end to end, from the first hour on a new VPS to responding to a breach. Every command tested on a live server.

6 parts

systemd Deep Dive

A seven-part, hands-on guide to systemd on a single VPS: the unit model and how boot resolves, writing services that recover from a crash, journald and journalctl, timers versus cron, sandboxing and security scoring, cgroups v2 resource control, and socket activation with user services. Every command tested on a live Ubuntu 24.04 server.

7 parts

SSH Mastery

A six-part, hands-on guide to SSH on a single VPS: key authentication over passwords, the config file with jump hosts and multiplexing, hardening sshd without locking yourself out, local, remote and dynamic port forwarding, agent forwarding and its hijack risk, and file transfer with host-key verification. Every command tested on a live Ubuntu 24.04 server.

6 parts

Firewalls with nftables

A five-part, hands-on guide to building a firewall with nftables on a single VPS: the family, table and chain model that replaced iptables, a safe policy-drop base ruleset that keeps your SSH session alive, sets, maps and rate limiting, NAT with port forwarding and logging, and persistence with a dry-run and a dead-man revert. Every command tested on a live Ubuntu 24.04 server.

5 parts

DNS on a Server

A five-part, hands-on guide to running DNS on a single VPS: how resolution walks from root to authoritative, an authoritative BIND9 server with a real zone file, a validating caching resolver with unbound, split-horizon views for internal names, and DNSSEC with troubleshooting. Every command tested on a live Ubuntu 24.04 server with the demo servers bound to loopback.

5 parts

WireGuard VPN and Private Networking

A five-part, hands-on guide to running your own WireGuard VPN on a slice: install and configure the server from a bare box, connect your real laptop and phone, reach a private service through the tunnel that the public internet cannot see, and keep it running. Every command verified on a live Ubuntu 24.04 server with a real client connecting over the internet.

5 parts

Secrets Management on a VPS

A four-part, hands-on guide to handling secrets on a single VPS: how plaintext secrets leak through permissions, the process environment, logs and git history, file-based secrets with a dedicated owner and systemd credentials, encryption at rest with age and sops, and rotation, auditing and git-history scrubbing. Every command tested on a live Ubuntu 24.04 server with throwaway demo secrets.

4 parts

Databases

Run a real database in production, not just install one.

Deployment

Get your application onto a server and keep it running.

Nginx in Production

An eight-part, hands-on guide taking Nginx from a fresh install to a hardened, fast production reverse proxy: the config model, server blocks, reverse proxy, HTTP/2 and HTTP/3, caching, rate limiting, load balancing, and hardening. Every command tested on a live server. TLS certificates get their own dedicated series.

8 parts

Node.js in Production

A six-part, hands-on guide to running Node.js in production on a single VPS: install the LTS and serve behind nginx, run it under systemd, configure it with environment secrets, cluster across cores, deploy with zero downtime, and add health checks and metrics. Every command tested on a live Ubuntu 24.04 server.

6 parts

Python Web Apps in Production

A six-part, hands-on guide to running a Python web app in production on a single VPS: a virtualenv and Flask under gunicorn, a systemd service, nginx over a unix socket, environment secrets, worker sizing, and zero-downtime reloads with health checks. Every command tested on a live Ubuntu 24.04 server.

6 parts

PHP-FPM and the LEMP Runtime

A five-part, hands-on guide to running PHP in a LEMP stack on a single VPS: install php-fpm and serve through nginx, size a dedicated fpm pool, put a real app behind nginx with a safe FastCGI config, tune OPcache, and harden the runtime. Every command tested on a live Ubuntu 24.04 server.

5 parts

Caddy: the Auto-HTTPS Web Server

A five-part, hands-on guide to running Caddy on a single slice: install it from the official repo and read the Caddyfile, serve a static site with automatic HTTPS, reverse proxy an app with load balancing and websockets, serve PHP over FastCGI, and harden it for production. Every command verified on a live Ubuntu 24.04 server.

5 parts

TLS and Certificates

A five-part, hands-on guide to TLS and certificates on a live server: reading the handshake and certificate chain, issuing Let's Encrypt and wildcard certificates, automating renewal with certbot, enforcing client certificates with mTLS, and debugging TLS with openssl and testssl.sh. Every command tested on a live Ubuntu 24.04 server.

5 parts

Deploying an App on a VPS

A four-part, hands-on guide to getting an app onto a server the right way: behind nginx, running under systemd, served over HTTPS, and deployed with zero downtime. Every command tested on a live server.

4 parts

CI/CD on a Single VM

A five-part, hands-on guide to real CI/CD on one VPS: push-to-deploy with a git hook, a self-hosted webhook runner, a build to test to deploy pipeline where a red test blocks the release, secrets kept out of the repo and the logs, and a health-gated zero-downtime release with one-command rollback. Every command tested on a live Ubuntu 24.04 server.

5 parts

Containers

Docker and friends, without the cargo-culting.

Storage

Object storage and backups you can actually restore.

Monitoring

See inside your server before it surprises you.

Linux Fundamentals

The command line, from first login to writing your own scripts.

The Linux Command Line

A nine-part, hands-on introduction to the Linux command line and filesystem, from your first login to writing dotfiles. Every command run on a live Ubuntu server so you see the real output, not a mock-up.

9 parts

Users and Permissions

A nine-part, hands-on guide to Linux users, groups and file permissions: ownership, chmod, sudo, SSH keys, umask, ACLs and password policy. Every command run on a live Ubuntu server against a real service account.

9 parts

Processes and Services

A nine-part, hands-on guide to what runs on a Linux server: processes and signals, background jobs, systemd services and journald, enabling and masking units, cron, systemd timers, and resource limits. Every command run on a live Ubuntu server.

9 parts

Package Management

A nine-part, hands-on guide to installing and managing software on Ubuntu: apt, searching and inspecting packages, repositories and GPG keys, dpkg, pinning versions, PPAs, building from source, snap, and keeping a server patched. Every command run on a live Ubuntu server.

9 parts

Linux Networking

A nine-part, hands-on guide to networking from the Linux command line: interfaces and ip, ports and ss, DNS, curl, scp and rsync, ufw, ping and traceroute, SSH tunnels, and diagnosing a slow connection. Every command run on a live Ubuntu server.

9 parts

Storage and Scripting

A nine-part, hands-on guide to disks and filesystems, tar, the text tools sed, awk, cut, sort and uniq, and writing your first bash script and scheduled backup. Every command run on a live Ubuntu server.

9 parts