Desplegar Hugo con Docker en un VPS

· 1 min de lectura · hugodockernginx

Este es un artículo de ejemplo que puedes borrar. Sirve para verificar que el resaltado de sintaxis, las tablas y la tabla de contenido se ven bien.

Por qué multi-stage

Hugo genera HTML estático. Una vez compilado el sitio, el binario de Hugo ya no hace falta. Con un build de dos etapas, la imagen final solo contiene Nginx y los archivos generados:

FROM hugomods/hugo:exts-0.154.5 AS builder
WORKDIR /src
COPY . .
RUN hugo --minify --gc

FROM nginx:alpine
COPY --from=builder /src/public /usr/share/nginx/html

La diferencia de tamaño es notable:

EnfoqueTamaño aproximado
Imagen con Hugo incluido~450 MB
Multi-stage con Nginx~55 MB

El detalle del baseURL

Hugo escribe el baseURL dentro del HTML al compilar. Si compilas con el valor por defecto y sirves en otro dominio, las hojas de estilo apuntan al lugar equivocado. Por eso conviene pasarlo como argumento de build:

docker compose build --build-arg HUGO_BASEURL="https://tudominio.com/"

Comandos útiles

# Escribir con recarga en vivo
docker compose -f compose.dev.yaml up

# Publicar
docker compose up -d --build

Si el sitio se ve sin estilos después de desplegar, casi siempre es el baseURL. Revisa el <link rel="stylesheet"> del HTML servido.