Anleitungen im Zusammenhang mit Beach

Weiterleitungen für öffentliche Güter einrichten

Umleitungen auf persistente Ressourcen funktionieren nicht in Beach - aber dafür gibt es einen Workaround.

Wenn du den Neos Redirect Handler in Beach verwendest, wirst du irgendwann feststellen, dass er für öffentliche Assets (persistente Ressourcen) nicht funktioniert. Du wirst dann feststellen, dass der häufigste Fehler (das Vergessen der Anpassung der Webserver-Konfiguration) etwas ist, was du in Beach nicht machen kannst - und es würde auch nicht helfen...

Der Grund dafür, dass eine Ressourcenumleitung in Beach nicht funktioniert, ist etwas sehr Ähnliches wie das, was in der Dokumentation steht:

Damit der Redirect-Handler die Anfrage überhaupt sehen kann, muss dies entfernt werden.

Der Unterschied liegt darin, was dies in Beach ist: Jede Anfrage an eine perisstente Ressourcen-URL wird intern an Google Cloud Storage weitergeleitet. Und wenn eine Ressource dort nicht (mehr) vorhanden ist, können wir uns nicht zurückziehen und Flow die Anfrage bearbeiten lassen (damit der Redirect Handler sich darum kümmert.)

Umleitungen im Hacker-Stil

Aber es gibt eine Möglichkeit, das zu umgehen, indem du die Weiterleitung direkt in Google Cloud Storage erstellst, und zwar mit einem etwas witzigen Workaround...

Erstelle eine HTML-Datei für die Weiterleitung

Indem wir eine Datei mit dem richtigen Namen erstellen und ihren Inhaltstyp auf text/html setzen, können wir eine HTML-Datei mit einer http-equiv-Umleitung im Cloud Storage ablegen und dem Client-Browser sagen, dass er der Umleitung folgen soll.

  1. Finde die beiden beteiligten URLs( von nun anQuelle und Ziel )
  2. Extrahiere aus der Quell-URL nur die SHA1 und benutze sie als Dateinamen für den nächsten Schritt
  3. Erstelle eine Datei mit diesem Inhalt:
<!DOCTYPE html>
<html>
   <head>
      <title>Redirected resource</title>
      <meta http-equiv="refresh" content="0; url=[target]"/>
   </head>
   <body>
      <p><a href="[target]">The file has been moved to [target]</a></p>
   </body>
</html>

Achte darauf, dass du [target] im HTML (Zeilen 5 & 8) durch die richtige URL ersetzt. Du kannst den Titel in Zeile 4 gerne anpassen, aber das ist wahrscheinlich etwas, das niemand sieht...

Jetzt kommt der schwierige Teil: Du musst die Datei in den Cloud-Storage-Bucket hochladen und den Inhaltstyp festlegen.

Zugang zu Google Cloud Storage vorbereiten

Eine Möglichkeit wäre die Verwendung der webbasierten Benutzeroberfläche, die Google zur Verfügung stellt, aber da du von dort aus keinen Zugriff auf die Speicherbereiche hast, die Beach verwendet, kann sie nicht genutzt werden. Die andere Möglichkeit ist die Verwendung von gsutil über die Kommandozeile. Wenn du das Programm bereits installiert hast (siehe gsutil help), ist das großartig. Wenn nicht, musst du es "installieren", indem du das eigenständige gsutil-Archiv herunterlädst und es entpackst. Dann solltest du gsutil help aus dem Ordner starten können, den du gerade entpackt hast.

Als Nächstes musst du die Anmeldedaten und den Bucket abrufen, in dem du die Datei speichern willst. Melde dich bei Beach an und überprüfe die Einstellungen deiner Instanz. Wenn du Daten in beiden Buckets gespeichert hast, verwende den Ziel-Bucket, wenn du nur Daten im Speicher-Bucket hast, verwende diesen. In diesem Beispiel wählst du den Speicher-Bucket aus und verwendest den Wert später als [Bucket]:

Um die Zugangsdaten zu erhalten, melde dich über SSH bei deiner Instanz an und rufe den Inhalt der Schlüsseldatei ab, indem du Folgendes ausführst:

echo $BEACH_GOOGLE_CLOUD_STORAGE_SERVICE_ACCOUNT_PRIVATE_KEY | base64 -d

Speichere die Ausgabe in einer Datei mit dem Namen gcs-key.json und stelle sicher, dass sie sicher aufbewahrt wird! Mach sie niemals öffentlich zugänglich und lösche sie, wenn du sie nicht mehr brauchst. Teile gsutil mit, dass es deine Anmeldedaten verwenden soll, indem du gsutil config -e aufrufst und die Fragen beantwortest, die dir gestellt werden:

$ gsutil/gsutil config -e
This command will create a boto config file at /home/…/.boto
containing your credentials, based on your responses to the following
questions.
What is the full path to your private key file? /home/…/gcs-key.json

Please navigate your browser to https://cloud.google.com/console#/project,
then find the project you will use, and copy the Project ID string from the
second column. Older projects do not have Project ID strings. For such projects,
 click the project and then copy the Project Number listed under that project.

What is your project-id? flownative-beach

gsutil developers rely on user feedback to make improvements to the
tool. Would you like to send anonymous usage statistics to help
improve gsutil? [y/N]

Boto config file "/home/…/.boto" created. If you need to use a
proxy to access the Internet please see the instructions in that file.

Gib in Zeile 5 den Pfad zu der Schlüsseldatei an, die du zuvor erstellt hast. Falls deine Schlüsseldatei für andere lesbar ist, wird das Tool dich jetzt auffordern, dies zu korrigieren, lass es die Arbeit machen. Ignoriere Zeile 7 und verwende flownative- beach als Antwort in Zeile 12.

Hochladen der Umleitungsdatei in den Cloud-Speicher

Jetzt kannst du endlich die vorbereitete HTML-Datei hochladen und ihren Inhaltstyp festlegen:

$ gsutil cp [source hash] gs://[bucket]/[source hash]
$ gsutil setmeta -h "Content-Type:text/html" gs://[bucket]/[source hash]

Achte darauf, dass du keine Dateierweiterung für die hochgeladene Datei verwendest. Jetzt solltest du in der Lage sein, die vollständige Quell-URL in einem Browser aufzurufen, und du solltest zur Ziel-URL weitergeleitet werden. Möglicherweise siehst du, dass der Browser kurz eine HTML-Seite mit dem Link zu deinem Ziel einblendet, aber normalerweise fällt das gar nicht auf.

Title photo by Sean Foster on Unsplash