Self Hosting Hugo
Why I Decided to Self-Host
I’ve been working on rockcampbell.com, and decided I wanted full control. That meant running Hugo on my own home server, behind Nginx Proxy Manager, using Docker — and pointing my domain directly to it.
What followed was a surprisingly long series of gotchas…
Building the Hugo Site
- Used the PaperMod theme
- Installed Hugo Extended manually (because the Arch repo version was too old)
- Created my first post (and later deleted it)
Docker Setup
- Used
nginx:alpineto serve the public folder - Mounted the
public/folder using Docker Compose - Exposed it to Nginx Proxy Manager via the shared
webnetwork
Nginx Proxy Manager
- Configured the domain
rockcampbell.com - Issued SSL certificate via Let’s Encrypt
- Initial requests worked, but subpages failed over HTTPS
Fix: The issue was a misconfigured baseURL in hugo.toml, and SSL wasn’t working until I reissued the cert.
DNS Issues
I forgot to update the A record from GitHub Pages to my home IP, which caused Let’s Encrypt cert issuance to fail.
Hugo Errors
Error: no existing content directory configured for this project
Fixed by addingcontentDir = "content"tohugo.toml.
Lessons Learned
- Always double-check DNS before attempting SSL
- If you get a 502 Bad Gateway from OpenResty, it’s probably a reverse proxy or Docker networking issue
- Don’t trust the default
hugo newbehavior with new module-based sites — clarify your config
Final Setup
- Hugo serves from
/public - Docker container running on
webnetwork - Nginx Proxy Manager handles SSL + reverse proxy
- rockcampbell.com is live and running from my home server