¿Como desplegar un sitio multi-lingual en DigitalOcean?

Imagino que preguntan: ¿Por qué multi-lingual? ¿No es mucho trabajo?

A lo que respondo: Porque quise, y sí, lo será.

La razón real es que quiero practicar mi escritura en varios idiomas, por ahora solamente inglés y español. Tal vez en el futuro lo haré con más idiomas, y no me comprometo a traducir todos los artículos retroactivamente a los idiomas nuevos. Al menos todas las publicaciones estarán en inglés.

Listo, con el trasfondo explicado, al contenido!

¿Hugo? ¿DigitalOcean?

Este sitio está construido con Hugo, un generador de páginas estáticas escrito en Golang. DigitalOcean es un proveedor de servicios en la nube, incluyendo la publicación de sitios estáticos hechos con Hugo gratis. Es una oferta que no puedo rechazar.

El servicio de publicación incluye certificados SSL, protección contra ataques de denegación de servicio (DDoS), y un CDN para tener respuestas rápidas de todo tu contenido estático.

También soporta el despliegue automatizado del sitio desde un repositorio de Github, lo que significa que el código del sitio puede estar guardado en Github, y cada vez que es actualizado el sitio se despliega automáticamente.

Vale, ¿y cómo?

¿Honestamente? simplemente seguí esta guía que encontré en internet. Con esto pude empezar y construí mi primer sitio sencillo.

Hubo problemas por supuesto, el soporte de multiples idiomas me puso a pensar por algunas horas. No solo es el sitio marginalmente más complicado de administrar, sino que al principio no cargaba.

Soporte multi-lingual con Hugo

Al principio quería publicar el sitio con Multilingual Multihost, lo que resultó ser un desafío para DigitalOcean. ¿Por qué?, porque cuando se construye un sitio en este modo la estructura de carpetas generada queda algo como esto:

...
public/
  en/
    index.html
    ...
  es/
   index.html
   ...

Lo que estamos viendo son dos carpetas distintas, cada una tiene un sitio estático. Esto quiere decir que no existe un index.html en la raíz. Así tendría que desplegar una nueva aplicación en DigitalOcean, lo que no quise hacer.

Esto está descrito en la documentación de Hugo (enlazada arriba), pero DigitalOcean requiere que los sitios estáticos tengan un index.html en la raíz del proyecto. Algo como esto:

...
public/
  index.html
  en/
    blah.html
    ...
  es/
    blah.html
    ...

Cuando se construye el sitio con esta estructura, ya funciona con multiples idiomas, aunque solamente en un dominio único.

Lo último que hice para optimizar un poco el ancho de banda que DigitalOcean debe servir, cambié el comando de ejecución por hugo -d public -e production --minify:

Command