From choosing where to host, through hardening your server, Docker Compose, TLS with Caddy, your first deploy, backup and restore, rollbacks, a maintenance page, and updates from CI. Across 50 lessons you'll get to the point where you can keep one of your own services running on a VPS for a few dollars a month. Docker and Caddy are run for real on your own machine, and every result shown was actually measured.
The 50 lessons are split into 7 chapters. We recommend working through them in order starting from Chapter 1, but feel free to skim just the parts you're curious about. * The commands can't run in the browser, so try them in your own environment with Docker and Caddy installed. Test server settings on a disposable VPS, never straight on a live production server. Domains, IPs, and usernames have all been replaced with example values like deploy.example.com.
Decide between a VPS, PaaS, or a container service, estimate how much it'll cost per month, get a domain, and point DNS at your server. We finish by confirming how to bundle the Caddy → app → db three-tier setup with compose.
Set up SSH key login, a working user with minimal sudo, hardened sshd, a firewall, automatic updates, and fail2ban, one at a time. We finish by building a checklist that mechanically checks all of it for gaps.
Package your Django app in a Dockerfile and bundle it with PostgreSQL using docker compose. Confirm the spots that most often cause production incidents — healthchecks, .env, persistent volumes, and generating secrets — with real, measured results.
Put Caddy in front, receiving traffic on 443 and passing it to your app. Build automatic certificate issuance and renewal, static files, HTTPS redirects, running multiple services side by side, and the edge network — all with a Caddyfile and compose.
Combine check → transfer → build → verify into a deploy script and run your first deploy. Confirm migrations, the admin account, and SMTP connectivity, then finish with a pre-launch checklist that catches anything missing.
Take a backup with pg_dump and measure the full round-trip of deleting your data and restoring it. Build the safety net that keeps you from being done the moment you launch — code and image rollbacks, a maintenance page, and triaging from logs.
Cover subsequent updates and automated deploys from CI, keeping cost and memory usage in check, and the bare minimum of monitoring. We close out all 50 lessons by summing them up as a pattern for operations: build it, ship it, keep it running.
Once you finish all 50 lessons, move on to GitHub Actions, which automates everything from push to deploy, or Terraform, which provisions the server itself as code. All courses unlock with a membership.