Deploying this Hugo blog to AWS S3 | Part 1
Questo blog è basato su Hugo - un generatore per siti statici open-source. Website statici non richiedono processi lato server, il che li rende semplici a livello di “hosting”.
Ci sono molte possibilità, ma io ho scelto di rilasciare il sito su AWS S3, usando CloudFront per distribuire andreapintus.com a livello globale (aka. renderlo più veloce).
Ecco come ho fatto:
GitHub
Mantengo il codice sorgente del sito sul mio repo personale GitHub, usando AWS CloudBuild per costruire il sito e AWS CodePipeline per gestire il deploy. Questa è la configurazione della mia pipeline di produzione:
Source - GitHub:
- Action provider: GitHub
- Branch name: master
- Change detection options: Start the pipeline on source code change
Build - AWS CodeBuild:
version: 0.2
env:
variables:
s3_output: "andreapintus.com"
phases:
install:
runtime-versions:
python: 3.10
commands:
- apt-get update
- echo Installing hugo
- curl -L -o hugo.deb https://github.com/gohugoio/hugo/releases/download/v0.101.0/hugo_extended_0.101.0_Linux-64bit.deb
- dpkg -i hugo.deb
- hugo version
pre_build:
commands:
- echo In pre_build phase..
- echo Current directory is $CODEBUILD_SRC_DIR
- ls -la
- ls themes/
build:
commands:
- hugo -v
- cd public
- aws s3 sync . s3://${s3_output}
Quindi cosa succede qui?
La pipeline è innescata quando il master branch su GitHub è aggiornato. La Build avviene tramite server Ubuntu.
Ora i passi della fase di build:
-
Inizializzazione:
- Git submodules sono inizializzati
- Software Hugo è scaricato e installato
-
Build:
- Hugo viene costruito tramite il codice sorgente contenuto nella source (GitHub repo)
-
S3 Deploy:
- Hugo sincronizza la cartella
public
nel bucket S3, solo per i file aggiornati/creati/eliminati.
- Hugo sincronizza la cartella
Perchè S3?
Perchè ho scelto S3+CloudFront quando ci sono così tante opzioni?
Beh, mi piace la semplicità. Ora, mi rendo conto che può sembrare controintuitivo poiché AWS può essere piuttosto complesso … Ma una volta che hai capito come si adatta, è piuttosto semplice.
Carico il codice sorgente su account GitHub, CodeBuild costruisce la cartella public
per me e la carica su S3 che CloudFront distribuisce.
Specificando diversi comportamenti in CloudFront; Posso estrarre file da altre origini Ad esempio, /video//thumbnail_.jpg proviene da un bucket S3 diverso.
CloudFront è molto performante, come mostrato da savjee.be
The best all-around performer is AWS CloudFront, followed closely by GitHub Pages. Not only do they have the fastest response times (median), they’re also the most consistent.
Esperienza
Da quanto si può vedere sotto, le performance sono consistentemente buone. Con un tempo di risposta sotto i 70 ms
Riassumendo
Ho pensato di provare altri servizi di hosting, ma continuo a ricorrere a S3+CloudFront. È semplice; dopo la configurazione iniziale, funziona benissimo e ho tutto ciò di cui ho bisogno.
Con AWS pago solo per ciò che uso, nessun “freemium”. Mi piace di più in questo modo.