Hugo-Website auf AWS S3 bereitstellen
Hugo ist ein statischer Seiten-Generator
Wenn die Website mit Hugo generiert wird, ist es an der Zeit, sie auf eine Hosting-Plattform zu deployen.
Hier ist ein HowTo, um sie auf AWS S3 zu pushen und mit AWS CloudFront CDN zu servieren.
Vorbereitung der Website
Ich werde hier nicht erklären, wie man ein Hugo Projekt erstellt oder Artikel oder Blogposts hinzufügt.
Es wird angenommen, dass dies bereits erfolgt ist.
Wenn nicht, hier ist ein Hugo Quickstart
Deployment-Optionen
Es gibt mehrere Optionen, um eine mit Hugo generierte Website zu deployen und zu hosten (https://gohugo.io/hosting-and-deployment/). Persönlich bevorzuge ich:
- Wie ein Hugo-Website auf GitHub gehostet werden kann
- AWS Amplify zum bauen und deployen.
- und das deployen auf S3 mit dem Befehl hugo deploy und das serven mit AWS CloudFront CDN und AWS Route53 und AWS Lambda.
Unten beschreibe ich genau diese – letzte – Methode.
1. Erstellen Sie einen S3-Bucket mit lockeren Berechtigungen
Gehen Sie zu: https://console.aws.amazon.com/s3
-
Erstellen Sie einen Bucket mit einem Namen wie den Namen der Website, z. B.: “microsoft.com”
-
Klicken Sie auf den Bucket => Eigenschaften, unten => statisches Website-Hosting
-
Klicken Sie auf Bearbeiten, dann – aktivieren und „statische Website hosten“
- Geben Sie dort auch in Index: index.html und in Fehler: 404.html ein
- Klicken Sie auf Speichern, merken Sie sich den „Bucket-Website-Endpunkt“, es sieht ungefähr so aus: http://microsoft.com.s3-website-ap-southeast-2.amazonaws.com
- Gehen Sie zu den Bucket-Berechtigungen, siehe die untenstehenden Bilder. Öffentlicher Zugriff darf nicht blockiert sein.
- Bucket-Richtlinie (ersetzen Sie microsoft.com durch Ihren Domain-Namen):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::microsoft.com/*"
}
]
}
2. Zertifikat erstellen
Gehen Sie zu AWS Certificate Manager https://console.aws.amazon.com/acm Wählen Sie die richtige Region aus.
- Klicken Sie auf Anfordern
- Öffentliches Zertifikat
- Domain-Names: Nehmen Sie zwei, z. B.: “microsoft.com” und “www.microsoft.com”
- Sie können weitere Unterdomänen anfordern, z. B.: “blog.microsoft.com”, “xmpp.microsoft.com” usw.
- Führen Sie die DNS-Validierung durch. Es ist viel einfacher, dies über die Route53-Konsole durchzuführen, wenn Ihr Registrar AWS ist.
3. Lambda-Funktion für Lambda@Edge deployen
Die Lambda@Edge-Funktion wird die URLs des Hugo QuickStart-Projekts für Verzeichnisse in einen Standardobjekt, index.html, umschreiben. So serviert Cloudfront den URI ‘/posts/my-post/’ mit dem Inhalt ‘/posts/my-post/index.html’ und gibt 200 statt 404 zurück.
Flavor Cafe (Scotch) Lambda@Edge Code
// Hugo auf Cloudfront, Lambda@Edge-Funktion
// Flavor Cafe (Scotch)
// @starpebble auf GitHub
//
// Zwei Umschreibungsregeln für Hugo-Unterverzeichnis-URIs.
// Beispiel:
// 1. Umschreiben von URI /posts/ zu /posts/index.html
// 2. Umschreiben von URI /posts zu /posts/index.html
//
// Fügen Sie so viele Dateierweiterungen wie gewünscht für Regel 2 hinzu.
// URIs, die mit einer bekannten Dateierweiterung enden, werden von Regel 2 nicht umgeschrieben.
'use strict';
// @starpebble auf GitHub
// hugo flavor cafe (scotch)
const DEFAULT_OBJECT = 'index.html';
exports.handler = (event, context, callback) => {
const cfrequest = event.Records[0].cf.request;
if (cfrequest.uri.length > 0 && cfrequest.uri.charAt(cfrequest.uri.length - 1) === '/') {
// z. B. /posts/ zu /posts/index.html
cfrequest.uri += DEFAULT_OBJECT;
}
else if (!cfrequest.uri.match(/.(css|md|gif|ico|jpg|jpeg|js|png|txt|svg|woff|ttf|map|json|html)$/)) {
// z. B. /posts zu /posts/index.html
cfrequest.uri += `/${DEFAULT_OBJECT}`;
}
callback(null, cfrequest);
return true;
};
4. AWS CloudFront CDN erstellen
Gehen Sie zu https://console.aws.amazon.com/cloudfront
- Erstellen Sie eine Verteilung
- Erstellen Sie einen Ursprungspunkt, der auf Ihren S3-Bucket zeigt
- Zertifikat für Ihre Website
- Wenn es anbietet, statische Website zu konvertieren – stimmen Sie zu
- Erstellen Sie ein Verhalten, das auf Ihren Ursprungspunkt zeigt, und leiten Sie Http zu Https um
- Unten in den Verhaltens- und Funktionen-Assoziationen – in Ursprungsanfrage – wählen Sie Ihre Lambda-Funktion
- Speichern
- Gehen Sie zur Allgemeinen Registerkarte Ihrer Verteilung und kopieren Sie den Namen der Verteilung. Sollte ungefähr so aussehen: asdfasdfasdf.cloudfront.net
5. AWS Route53 DNS auf CloudFront verweisen
Gehen Sie zu https://console.aws.amazon.com/route53/v2/hostedzones
- Erstellen Sie oder klicken Sie auf den Hosted Zone Ihres Sites. Sollte so heißen wie Ihr Site: z. B.: “microsoft.com”
- Erstellen Sie einen leeren “A”-Eintrag, der auf Ihre CloudFront-Verteilung (Verteilungsnamen) zeigt
- Erstellen Sie einen “A”-Eintrag für “www”, der als Alias auf Ihren ersten “A”-Eintrag verweist
6. AWS CLI installieren
- Installieren Sie die AWS Client-Befehlszeilentools https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
- Konfigurieren Sie die AWS CLI-Verbindung
- Prüfen Sie die Datei ~/.aws/credentials, sie sollte etwas wie folgt enthalten:
[default]
aws_access_key_id = .......
aws_secret_access_key = .......
- Testen Sie die Verbindung, geben Sie etwas wie unten ein, um Ihren S3-Bucket anzuzeigen
aws s3 ls
7. Update Ihre config.toml
- Öffnen Sie Ihre hugo.toml oder config.toml in Ihrem Hugo-Projekt
- Fügen Sie am Ende hinzu (ersetzen Sie erneut microsoft.com durch Ihren eigenen):
[[deployment.targets]]
# Ein beliebiger Name für dieses Ziel.
name = "lfs3"
# S3; siehe https://gocloud.dev/howto/blob/#s3
# Für S3-kompatible Endpunkte, siehe https://gocloud.dev/howto/blob/#s3-compatible
URL = "s3://microsoft.com?region=ap-southeast-2"
# Wenn Sie ein CloudFront CDN verwenden, wird deploy den Cache entsprechend invalidieren.
cloudFrontDistributionID = ""
Wenn Sie Ihre Konfigurationen in config.yml haben, sollte es so aussehen:
deployment:
targets:
name: "lfs3"
URL: "s3://microsoft.com?region=ap-southeast-2"
cloudFrontDistributionID: "E123123123"
- Speichern Sie diese Datei
- Erstellen Sie Ihre Website
hugo
- Deployen Sie sie mit hugo deploy Befehl
hugo deploy
- Öffnen Sie die URL Ihrer Website im Browser, um zu prüfen, ob alles funktioniert hat
Nützliche Links
- Google Formular auf Hugo-Website einfügen
- Strukturierter Datenmarkup auf der Hugo-Website hinzufügen
- Hugo Cheat Sheet
- Gitea Actions verwenden, um Hugo-Website auf AWS S3 zu deployen
- Hugo Quickstart: https://gohugo.io/getting-started/quick-start/
- Umfangreiche Liste von Hugo-Theme-Beispielen: https://themes.gohugo.io/
- Hugo Hosting und Deployment: https://gohugo.io/hosting-and-deployment/
- Bildverarbeitung im Mainroad Hugo Theme: Mainroad Theme Bildverarbeitung
- AWS Command Line Interface (AWS CLI) installieren: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
- Populärste Themes für Hugo
- Wie man Vorschaubilder in den Page-Bundle-Ordner für Hugo-Websites mit Mainroad Theme speichert
Ich hoffe, dieser kleine HowTo-Dokumentation hilft Ihnen. Haben Sie einen schönen Tag!