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.

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.