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:alpine
to serve the public folder - Mounted the
public/
folder using Docker Compose - Exposed it to Nginx Proxy Manager via the shared
web
network
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 new
behavior with new module-based sites — clarify your config
Final Setup
- Hugo serves from
/public
- Docker container running on
web
network - Nginx Proxy Manager handles SSL + reverse proxy
- rockcampbell.com is live and running from my home server