After wrestling with WordPress — empty database backups, MySQL containers that wouldn’t start after a restart, and the constant drip of plugin update notifications — I decided enough was enough.
What was wrong with WordPress
The immediate trigger was trying to restore a site for a friend.
The backup had two files: a .sql dump and a tar.gz of the WordPress files.
Both were empty shells. The backup script had run successfully every night
against volumes that were never actually populated.
Longer term, every WordPress install I run is a maintenance surface:
- Core updates (security patches, roughly monthly)
- Plugin updates (weekly, some with breaking changes)
- Theme updates
- MySQL container that needs its own backup strategy
- PHP-FPM that can silently break if the container restarts in the wrong order
For a personal portfolio site that I might not touch for three months at a time, that’s a lot of overhead.
What Hugo is
Hugo is a static site generator — a single Go binary that takes a folder of Markdown files and compiles them into plain HTML, CSS, and JavaScript. The output is a folder. You point nginx at that folder. Done.
No database. No PHP. No runtime of any kind. A static HTML file served by
nginx:alpine uses about 5 MB of RAM at idle, compared to ~250 MB for a
WordPress stack.
The deployment pattern
My home server already runs a static nginx container for another site (99-names).
Hugo fits the same pattern exactly:
services:
mohamed-personal-site:
image: nginx:alpine
container_name: mohamed-personal-site
volumes:
- ./site/public:/usr/share/nginx/html:ro
networks:
- npm_net
Build with Hugo, output goes to site/public/, Nginx Proxy Manager routes
mohamed.sirwalterlibrary.ddns.net to this container. Identical to what I already knew.
Backup is now just git
The entire site — content, configuration, theme — lives in a git repository.
Backing up means git push. Restoring from scratch means git clone && hugo.
No more praying that the mysqldump captured something useful.
What I gave up
The WordPress admin dashboard. For now that’s fine — I’m the only person editing this site. If I ever want collaborators, I’ll look at Decap CMS or Pages CMS, both of which layer a web editor on top of a static site without adding a database.