Desplegar Hugo con Docker en un VPS
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:
| Enfoque | Tamañ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.