Skip to main content

Static blog with Hugo and Blowfish theme on a home server

Rogelio Guerra Riverón
Author
Rogelio Guerra Riverón
Building my own web infrastructure from scratch. Here I document each step: servers, networks, containers and everything that comes along.

I’ve been wanting to document my infrastructure projects better for a while. After trying several options, I decided to set up a static blog with Hugo. The combination of Hugo + Blowfish turned out to be exactly what I needed: fast, clean, and easy to maintain.

Why Hugo and Blowfish
#

Hugo is a static site generator written in Go. It’s incredibly fast and requires no database or complicated dependencies. Blowfish is a modern, minimalist theme that’s well documented. Both work great on a home server with limited resources.

Installation on the server
#

The first step was installing Hugo. In my case I use Debian on the server:

sudo apt-get update
sudo apt-get install hugo

Verify the installation:

hugo version

Create the site
#

I initialized the project in a folder within /home:

hugo new site mi-blog
cd mi-blog

Add the Blowfish theme
#

I cloned the theme repository in the themes folder:

git clone https://github.com/nunocoracao/blowfish.git themes/blowfish

Then I updated the configuration file hugo.toml:

baseURL = "https://mi-dominio.local/"
languageCode = "es"
title = "Servicios Rogeliowar"
theme = "blowfish"

[params]
description = "Documentación técnica de infraestructura y servidores"
author = "Rogelio"

[menu]
[[menu.main]]
name = "Posts"
pageRef = "/posts"
weight = 10
[[menu.main]]
name = "Sobre mí"
pageRef = "/about"
weight = 20

Create content
#

Articles go in the content/posts/ folder. Each one is a Markdown file:

hugo new posts/mi-primer-articulo.md

The generated file includes YAML frontmatter ready to edit:

---
title: "Mi Primer Artículo"
date: 2026-04-28
draft: false
---

Contenido del artículo aquí...

Local server for testing
#

Before publishing, I tested everything locally:

hugo server -D

The site will be available at http://localhost:1313/. The -D parameter includes drafts.

Generate static files
#

Once ready, I generated the final HTML files:

hugo

This creates the public/ folder with all compiled content.

Serve with Nginx
#

I copied the generated files to the Nginx folder:

sudo cp -r public/* /var/www/mi-blog/

I configured a server block in Nginx:

server {
    listen 80;
    server_name mi-dominio.local;
    
    root /var/www/mi-blog;
    index index.html;
    
    location / {
        try_files $uri $uri/ =404;
    }
}

I reloaded Nginx:

sudo systemctl reload nginx

Automate builds
#

To avoid manually compiling every time I write an article, I created a simple script:

#!/bin/bash
cd /home/usuario/mi-blog
hugo
sudo cp -r public/* /var/www/mi-blog/
echo "Blog actualizado"

I’ll save it as actualizar-blog.sh and give it execute permissions:

chmod +x actualizar-blog.sh

Final thoughts
#

After a week using this setup, I can say it’s solid. Hugo compiles everything in less than a second, Blowfish looks professional without needing extreme customization, and the home server handles everything without issues.

The best part: there’s no database to back up, no plugins to break, no security updates every week. Just static files served by Nginx. Exactly what I was looking for.


---

## Recommended equipment

- **[Raspberry Pi 3 B+](https://amzn.to/4upmmwn)** — Lightweight low-power server to start your homelab
- **[Raspberry Pi 4 (4GB)](https://amzn.to/4utrPSX)** — The perfect foundation for homelab, Docker and monitoring

*Affiliate links. No extra cost to you.*