Where this actually started
I didn't start with frameworks or a course that walked me through it step by step. I started with an empty VPS, a domain I'd just bought, and no real idea what "pointing a domain at a server" meant in practice. The gap between owning a domain and having a working site turned out to be filled with a lot of small, unglamorous decisions — DNS records, SSL certificates, mail configuration — that no single tutorial covers end to end.
A domain isn't a website. Buying one just reserves a name — it doesn't connect to anything until DNS records tell the internet where to send visitors. A VPS is just Linux, nothing more: no control panel, no pre-installed anything, just a blank machine with root access, which means every mistake is yours to fix.
How it all actually connects
Click through each stage below to see what it's responsible for — this is the exact chain a request travels through for a typical site I deploy.
Domain & DNS
An A record points the domain at a server's IP address. MX records handle where email gets delivered — a completely separate system from web hosting. SPF, DKIM, and DMARC (all TXT records) prove outgoing email isn't forged.
Cloudflare
Proxies traffic, terminates SSL at the edge, and caches static assets — the origin server does less work and isn't the first point of contact for every request.
Origin Server
For dynamic sites: a VPS running CyberPanel over Apache/OpenLiteSpeed, MySQL, and Let's Encrypt. For static sites: GitHub Pages, rebuilding automatically on every push.
Browser
Receives the final response — but only shows up in search results at all if canonical tags, sitemap, and social preview tags actually point at the right domain.
Flexible SSL + GitHub Pages
Caused an infinite redirect loop — Cloudflare talking HTTP to an origin that redirects HTTP to HTTPS. Switching to Full (Strict) fixed it immediately.
Missing SPF record
Outgoing mail landed in spam for weeks before I traced it back to a missing SPF TXT record.
Files without the database
Backing up a WordPress site's files without the MySQL database isn't a backup — it's half of one.
Lessons learned
Understand the layer below the panel. CyberPanel is genuinely useful, but knowing what it's doing to Apache/Nginx config underneath means I can fix things the panel's UI doesn't cover.
Treat email auth as part of deployment, not an afterthought. SPF/DKIM/DMARC now go in on day one of any new domain, not after the first delivery problem shows up.
Need something deployed properly, not just "up"?
Get In Touch