Ship Your Side Project to the Internet
You built something. It runs on localhost:3000 and it works. And now there's a gap - the one nobody
warns you about - between "it works on my machine" and "a stranger can open a URL and use it." That gap
is small in concept and full of tiny, infuriating traps: billing that keeps running after you power off,
an SSH key that's "permission denied" for five different reasons, a $ in your password that quietly
breaks everything, a login that works locally and silently fails in production.
This guide walks the whole journey, once, end to end - the path a real first deploy actually takes - and flags every trap as a ⚠️ so it bites the page instead of you. We won't re-teach SSH or Docker or DNS from scratch; each has its own guide, and we'll link them. This is the map that strings them together into "my thing is live."
flowchart LR
Local[your laptop] --> VPS[a VPS] --> Docker[Docker compose up] --> DNS[domain + DNS] --> CF[Cloudflare + HTTPS] --> Auto[auto-deploy on merge]
How to read this
- First deploy ever? Read in order - it's the literal sequence you'll follow, top to bottom.
- Stuck on one step? Each phase is self-contained; jump to the one that's fighting you (the ⚠️ callouts are the fixes).
The phases
- Pick a Cheap VPS - what specs you actually need, why the build needs more RAM than the app, and the billing trap.
- SSH In With a Key - keys not passwords, and the "Permission denied" decision tree.
- Docker & Your Private Repo - install Docker, get a private repo
onto the box with a deploy key,
compose up. - Domains & DNS - buy one, point it, apex vs www, and the
.devHTTPS trap. - Behind Cloudflare - free HTTPS, no open ports, and the cookie/CSRF must-dos that break logins.
- Auto-Deploy on Merge - merge to
main, and it's live.
Every step here builds on a guide that goes deeper: What a Server Is · SSH & Keys · Docker Without the Magic · Docker Compose for Real Projects · Deploying to a VPS · HTTPS & TLS · Environment Variables & Config · Your First Pipeline (GitHub Actions). This guide is the end-to-end thread; reach for those when you want the full picture of one piece.