Dans une idée de limitation du nombre de serveurs et de la charge d’administration j’ai voulu passer ce blog en statique et le faire héberger chez amazon sur S3.
Je me suis replongé dans l’univers des services amazon aws et j’ai découvert codecommit et lambda et je me suis dit que ce serait bien de tout automatiser, un push lance une fonction lambda qui compile la nouvelle version du site et la dépose dans le bucket S3.
Je suis tombé sur un post de blog détaillant a peu près cette configuration. Les sources du site sont dans un bucket s3 et les pages html dans un autre. Et j’ai vite compris pourquoi, lambda ne sait pas faire de git et que pour les implémentations en python pur il faut plein de dépendances. Donc au final ça passe chez amazon mais avec seulement le dépôt git sur codecommit et les pages sur S3. Et je continuerai à faire la mise à jour à la main…
Récupérer les sauvegardes de ghost
Tout d’abord il faut récupérer l’export des posts de ghost. Selon la version de ghost le lien pour y accéder change.
Créer un nouveau site hugo
Installation
On récupère le binaire sur le site et on le met quelque part dans le path.
Maintenant on peut créer un nouveau site :
hugo new site blog
hugo new post/permier-post.md
Choix du thème
On choisit un thème et on l’installe et on admire :
cd blog && mkdir themes && cd themes
git clone https://github.com/dim0627/hugo_theme_robust.git
cd ..
hugo server --theme=hugo_theme_robust --buildDrafts
Récupération des posts de ghost
On va utiliser le bien nommé script ghostToHugo
cd blog
ghostToHugo export.json
hugo server --theme=hugo_theme_robust --buildDrafts
Créer un projet git dans codecommit
Il faut faire attention que codecommit n’est disponible que dans la région us-east-1, il faut utiliser git pour pointer sur cette région.
aws --profile git configure
On créé un nouveau projet et on envoie le site, si possible sans la partie publique.
aws codecommit create-repository --repository-name blog
cd blog
git remote add aws ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/blog
echo "public/*" > .gitignore
git add .
git commit
git push -vv -f --tags aws refs/heads/*:refs/heads/*
Créer le bucket S3 et le remplir
Création du bucket
aws s3 mb s3://thomas.montfort.fr
aws s3 website s3://thomas.montfort.fr --index-document index.html --error-document 404.html
Définir une policy pour l’accès
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::thomas.montfort.fr/*"
]
}
]
}
On copie cette polcicy dans le fichier policy.json
et on l’applique.
aws s3api put-bucket-policy --bucket thomas.montfort.fr --policy file://policy.json
On copie le site statique
cd blog
hugo
cd public && aws s3 sync . s3://thomas.montfort.fr/ --storage-class
REDUCED_REDUNDANCY && cd ..