Es gibt mehrere kostengünstige Möglichkeiten, eine statische Website zu hosten, die mit einem Static-Site-Generator wie Jekyll, Hugo oder Pelican erstellt wurde:
Dieser gesamte Blog wird statisch mit Jekyll generiert. Ich kann jedoch keine der oben genannten Optionen verwenden, da ich während der Lebensdauer dieses Blogs Domainnamen geändert, URL-Schemata geändert und Beiträge umbenannt habe, und ich möchte dies tun Halten Sie alle alten URLs am Leben
Ich habe diesen Blog mit Apache und in jüngerer Zeit mit nginx auf einer einzigen virtuellen Maschine gehostet, und die Umleitungsfunktionen beider Softwareteile funktionieren einwandfrei, aber ich war bereit, ihn an einem neuen und anderen Ort zu hosten
Ein früherer Beitrag beschreibt, wie ich URLs von einer alten Domain zu einer neuen Domain mit Google App Engine und Python umleite, aber jetzt brauchte ich eine Möglichkeit, statische Inhalte bereitzustellen
**und** leiten URLs von derselben Domain weiter. Dieselbe Domain-Umleitungsanforderung ist der Grund, warum ich nicht einfach die Funktion "Nur statische Inhalte"von Google App Engine verwenden kann (in der obigen Liste verlinkt). Allerdings kann ich Google App Engine in Kombination mit einer einfachen Golang-Anwendung verwenden, um sowohl statische Inhalte **als auch** Umleitungen auf dieselbe Domain bereitzustellen
## Warum Google App Engine?
Bevor Sie sich mit dem Rest des Beitrags befassen, fragen Sie sich vielleicht, warum Sie einen Blog auf Google App Engine hosten sollten? Hier sind meine Gründe dafür:
- Wenn Ihr Datenverkehr in das kostenlose Kontingent von App Engine mit 28 Instanzstunden und 1 GB ausgehendem Datenverkehr pro Tag passt, ist das Hosten des Blogs praktisch kostenlos
- Das Pushen von Updates erfolgt mit einem Befehl
- Protokollierung und Überwachung sind mit Stackdriver integriert
- Automatisches Hoch- und Runterskalieren basierend auf Verkehrsmustern
- Mit wenigen Klicks können Webprotokolle zur Langzeitspeicherung und Ad-hoc-Analyse einfach an etwas wie BigQuery gepusht werden
- Verwaltete SSL-Zertifikate mit LetâÃÂÃÂs Encrypt
## Voraussetzungen
Dieser Beitrag geht von Folgendem aus:
- Sie kennen sich mit der Google Cloud Platform (GCP) aus und haben bereits ein GCP-Projekt erstellt
- Sie haben das Google Cloud SDK installiert
- Sie haben die authentifiziert
gcloudcommand für Ihr Google-Konto
Erstellen Sie ein GCP-Projekt
Falls Sie noch keine erstellt haben
**GCP-Projekt befolgen Sie diese Schritte:
- Öffnen Sie einen Webbrowser und erstellen Sie ein Google-Konto oder melden Sie sich bei einem an
- Navigieren Sie zur GCP-Konsole
– Wenn dies Ihr erstes GCP-Projekt ist, werden Sie aufgefordert, ein GCP-Projekt zu erstellen. Jedes Google-Konto erhält ein Guthaben von 300 $, das innerhalb von 12 Monaten für die GCP verwendet werden kann. Sie müssen eine Kreditkarte eingeben, um ein GCP-Projekt zu erstellen, diese wird jedoch erst belastet, wenn das Guthaben von 300 $ aufgebraucht ist oder 12 Monate abgelaufen sind
– Wenn es sich um ein neues GCP-Projekt handelt, müssen Sie die Compute Engine-API aktivieren, indem Sie zum Abschnitt „Compute Engine“ der GCP Console navigieren und warten, bis die Initialisierung abgeschlossen ist
Installieren Sie das Google Cloud-SDK
Falls Sie die noch nicht installiert haben
**Google Cloud SDK befolgen Sie die Anweisungen hier
Authentifizieren Sie gcloud
Nachdem Sie ein GCP-Projekt erstellt und das Google Cloud SDK installiert haben, besteht der letzte Schritt darin, das zu authentifizieren
gcloud-Befehl an Ihr Google-Konto. Öffnen Sie Ihre Terminalanwendung und führen Sie den folgenden Befehl aus:
gcloud-Authentifizierungsanmeldung
Eine Webseite wird in Ihrem Webbrowser geöffnet. Wählen Sie Ihr Google-Konto aus und erteilen Sie ihm die Berechtigung zum Zugriff auf die GCP. Sobald Sie fertig sind, werden Sie authentifiziert und können fortfahren
## Erstellen Sie ein Verzeichnis
Erstellen Sie als Nächstes irgendwo auf Ihrer Workstation ein Verzeichnis, um Ihre Google App Engine-Anwendung zu speichern:
mkdir ~/Sites/example.com/app_engine
Wechseln Sie in dieses Verzeichnis:
cd ~/Sites/example.com/app_engine
Der Rest dieses Beitrags geht davon aus, dass Sie innerhalb dieses Verzeichnisses arbeiten
Erstellen Sie außerdem ein Verzeichnis innerhalb der
**app_engine** Verzeichnis mit dem Namen **static
mkdir ~/Sites/example.com/app_engine/static
Sie werden dieses Verzeichnis später erneut besuchen
## app.yaml erstellen
Google App Engine erfordert normalerweise zwei Dateien:
**app.yaml** und eine **Anwendungsdatei**, die in Python, Golang, Java oder PHP geschrieben ist – in diesem Fall wird es Golang sein. **app.yaml** stellt die notwendige Konfiguration bereit, um Ihre Anwendung auszuführen. Es gibt viele verschiedene Parameter, die in **app.yaml vorhanden sein können. Diese Parameter können sich je nach verwendeter Programmiersprache unterscheiden. Für diesen Beitrag wird Golang verwendet, und Sie finden alle verfügbaren Golang-Parameter hier
Erstelle Datei
**app.yaml** mit folgendem Inhalt:
Laufzeit: go api_version: go1 handlers: - url:script: _go_app secure: always forward_http_response_code: 301
Beachte das
**sicher: immer** wurde eingestellt. Das bedeutet, dass die Golang-Anwendung immer über HTTPS bereitgestellt wird. Wenn ein Endbenutzer über HTTP zur Webanwendung navigiert, wird er standardmäßig per 302 auf die HTTPS-Version umgeleitet. Deshalb wurde auch **redirect_http_response_code: 301** gesetzt. Ich möchte immer, dass die Webanwendung über HTTPS bereitgestellt wird, und ich möchte nicht, dass Suchmaschinen die Umleitung von HTTP zu HTTPS als vorübergehende Umleitung interpretieren. es ist eine permanente Weiterleitung
Wenn Sie über statische Assets verfügen, was wahrscheinlich der Fall ist, empfiehlt es sich, App Engine darüber zu informieren und diese Assets aus dem Objektspeicher statt aus Ihrer Anwendung bereitzustellen. Dies ist einfach und erfolgt auch über die
**app.yaml**-Datei
Wenn Sie beispielsweise eine Favicon-Datei, ein CSS-Verzeichnis, ein Javascript-Verzeichnis und ein Bildverzeichnis haben, verwenden Sie Folgendes
**app.yaml**-Datei:
Laufzeit: go api_version: go1 handlers: - url: /favicon.png$ static_files: static/favicon.png upload: static/favicon.png - url: /css static_dir: static/css - url: /js static_dir: static/js - url: /images static_dir: static/images - url:script: _go_app secure: always forward_http_response_code: 301
## main.go erstellen
Als nächstes benötigen Sie die Golang-Anwendungsdatei
Damit der folgende Code Ihren Anforderungen entspricht, erstellen Sie file
**main.go Kopieren Sie den folgenden Code, fügen Sie ihn ein und nehmen Sie die folgenden Änderungen vor:
- Im
domainvariable, ändern Sie den Wert so, dass er Ihrem Domainnamen mit dem richtigen HTTP-Protokoll entspricht
- Im
urlsmap, ersetzen Sie alle Schlüssel-Wert-Paare, um mit den Umleitungen übereinzustimmen, die Sie an Ort und Stelle benötigen. Ersetzen Sie jeden Schlüssel nur durch den Pfadteil ( /example-post-1.htmlanstelle von httpsexample.com/example-post-1.html) der alten URL der aktuellen Domain, die Sie verwenden möchten bleib am Leben. Ersetzen Sie dann jeden Wert durch den Pfadteil der neuen URL der aktuellen Domain, auf die Sie umleiten möchten
Alle Weiterleitungen sind 301-Weiterleitungen. Dies kann durch Ändern geändert werden
**301** im Code unten zu einem anderen HTTP-Umleitungsstatuscode wie **302**
Paket Hauptimport ( "net/http""os""strings") func init() { http.HandleFunc handler) } func handler(w http.ResponseWriter, r *http.Request) { // True (ok) falls Anfrage Pfad ist in der URL-Zuordnung if value, ok := urls[r.URL.Path]; ok { value = domain + value http.Redirect(w, r, value, 301) } else { path := "static/"+ r.URL.Path // Gibt 403 zurück, wenn die HTTP-Anforderung an ein Verzeichnis geht, das existiert und existiert enthält keine index.html-Datei if f, err := os.Stat(path); err == nil&& f.IsDir() { index := strings.TrimSuffix(path,+ "/index.html"if _, err := os.Open(index); err != nil { w.WriteHeader (403) w.Writebytehtml>