Durante aproximadamente un ano este blog ha sido hospedado en AWS utilizando Hugo y AWS CodeBuild para generar un sitio estático cada vez que se hace un cambio en el repositorio. Sin importar donde se tenga configurado el repositorio, se puede hacer uso de CodeBuild para ejecutar hugo
e incluso npm
para instalar las dependencias en caso de utilizar esbuild con Hugo para algo de Javascript.
Comparto mi archivo buildspec.yml
el cual en la fase install
primero descarga una versión específica de Hugo (extended) para luego ser instalada. En la fase pre_build
se checan las versiones de hugo
, node
y npm
para poder revisar que todo este en orden en caso de algún error. Continuando en la fase de build
se genera el sitio y se mandan los archivos generados al bucket en S3. Por último en la fase post_build
se limpia el cache de CloudFront.
El CLOUDFRONT_ID
se puede agregar como una variable o en este caso se utiliza AWS Systems Manager para guardarla de forma segura y poder compatir el archivo.
version: 0.2
env:
variables:
HUGO_VERSION: "0.79.1"
HUGO_ENV: "production"
parameter-store:
CLOUDFRONT_ID: "[NAME_GOES_HERE]"
phases:
install:
runtime-versions:
golang: 1.14
commands:
- wget -q https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.deb
- dpkg -i hugo_extended_${HUGO_VERSION}_Linux-64bit.deb
pre_build:
commands:
- hugo version
- node --version
- npm --version
- npm install
build:
commands:
- hugo --minify
- aws s3 sync public/ s3://[S3_BUCKET_GOES HERE]/ --delete --only-show-errors
post_build:
commands:
- aws cloudfront create-invalidation --distribution-id ${CLOUDFRONT_ID} --paths "/*"