Anleitungen im Zusammenhang mit Beach

Wie man eine Neos-Website zu Beach migriert

Dieses Tutorial führt dich durch die Schritte zum Erstellen eines Projekts und einer Instanz auf Beach und zum Importieren bestehender Inhalte einer Neos-Website.

Übersicht

Dieses Tutorial führt dich durch die Schritte zum Erstellen eines Projekts und einer Instanz auf Beach und zum Importieren bestehender Inhalte einer Neos-Website.

Bevor du mit diesem Tutorial beginnst, benötigst du Folgendes:

  • ein Git-Repository mit einer Neos-Distribution
  • ein funktionierendes Composer-Setup (d.h. du musst Composer für die Paketverwaltung verwenden und composer.lock als Teil deines Git-Repos haben)
  • einen MySQL- oder MariaDB-Datenbankexport, der alle Tabellen deiner Neos-Website enthält
  • assets (Flow-Ressourcen) deiner Website, die in einem lokalen Verzeichnis gespeichert sind (normalerweise in Data/Persistent/Resources)
  • einen Computer, auf dem SSH und der MySQL/MariaDB-Client installiert sind


Bereite dein Projekt vor

Installiere flownative/google-cloudstorage

Dieser Schritt ist unerlässlich, wenn du etwas mit persistenten Ressourcen machen willst (z. B. Bilder oder andere Assets hochladen). Es ist aber ganz einfach:

composer require flownative/google-cloudstorage

Jetzt musst du nur noch die geänderte composer.lock-Datei committen und pushen und schon bist du fertig. Solange das Paket nicht konfiguriert ist, beeinträchtigt es nichts, du musst dir also keine Sorgen machen. Die notwendige Konfiguration für Beach wird später in diesem Leitfaden erklärt.

Ein Projekt und eine Instanz erstellen

Melde dich im Beach Control Panel unter https://beach.flownative.com an und gehe zur Ansicht "Projekte" deiner Organisation. Klicke auf "Projekt erstellen".

Als nächstes musst du einen Namen für dein Projekt angeben. Wähle einen Namen, der es dir leicht macht, das Projekt wiederzuerkennen. Für viele Projekte ist der Hauptdomainname eine gute Wahl.

Gib dann die vollständige URL des Git-Repository ein, das deine Neos- oder Flow-Distribution enthält. Die Distribution muss eine composer.json und composer.lock Datei enthalten.

Wenn dein Git-Repository nicht öffentlich ist, musst du den angegebenen öffentlichen SSH-Schlüssel als Verteilungsschlüssel für dein Repository festlegen. Bitte stelle auch sicher, dass alle anderen Pakete, die in deiner composer.json / composer.lock erwähnt werden, entweder öffentlich oder mit dem angegebenen SSH-Schlüssel zugänglich sind. Beach braucht nur Lesezugriff auf dein Repository.

Wenn du das Projekt erstellt hast, gehst du auf die Registerkarte "Instanzen" und klickst auf die Schaltfläche "Neue Instanz". Im folgenden Dialog musst du den Namen deiner neuen Instanz (etwas wie "Production", "Staging Relaunch", ...), einen passenden Instanztyp und einen Zweig deines Git-Repositorys angeben, der verwendet werden soll.

Nachdem du die Instanz erstellt hast, wird dir ein Bildschirm mit Details und Aktionen für deine neue Instanz angezeigt. Beach sucht automatisch nach dem neuesten Commit und erstellt ein Docker-Image für den neuesten Code.

Wenn der Build abgeschlossen ist, wird die Schaltfläche "Bereitstellen" aktiv. Setze deine neue Instanz zum ersten Mal ein.

Die eigentliche Bereitstellung des Containers ist nach ein paar Sekunden abgeschlossen, aber die Instanz braucht etwas mehr Zeit, um die erste Datenbankstruktur zu erstellen (bei jeder Bereitstellung wird "./flow doctrine:migrate" aufgerufen). Es kann 1-2 Minuten dauern, bis die Instanz bereit ist.

Importiere den Datenbank-Dump

Versuche, dich mit den Verbindungsinformationen aus deiner Instanzansicht über SSH bei deiner neuen Instanz anzumelden. Wenn die Verbindung abbricht, ist deine Instanz möglicherweise noch nicht bereit - warte einfach noch ein bisschen und versuche es dann erneut.

Wenn du dich erfolgreich angemeldet hast, kannst du dich wieder abmelden und mit dem Importieren der Datenbankinhalte deiner Website fortfahren.

Um von deinem Computer aus auf den Datenbankserver deiner Instanz zugreifen zu können, musst du einen SSH-Tunnel erstellen.

Öffne ein Terminalfenster und führe den folgenden SSH-Tunnel-Befehl aus, den du gebrauchsfertig aus der Verbindungsinfo in den Instanzdetails kopieren kannst:

ssh -nNT -J beach@ssh.flownative.cloud -L 3399:database-8f594285-bce3-4456-af2d-72cf83d56629:3306beach@instance-156c4db-0125-457d-b6ce-218f6f9d1596.project-123abc45-def6-7890-abcd-1234567890ab

Du kannst nun versuchen, dich von deinem Computer aus mit der entfernten Datenbank zu verbinden, indem du Folgendes in einem separaten Terminalfenster ausführst:

mysql --host=127.0.0.1 --port=3399 --user=pvy3sc2dirdxb9mk --password=1luZ58khlodKMQjTF8Q5AfAcNl6Q7zP --database=m2fmzatzm0rymc4v

Beachte, dass "localhost" versuchen würde, dich mit deinem lokalen MySQL-Socket (falls vorhanden) zu verbinden und jeden Port, den du angibst, ignorieren würde. Deshalb ist es wichtig, dass du "127.0.0.1" als Datenbankhost angibst.

Wenn du erfolgreich eine Verbindung zu deiner Datenbank hergestellt hast, verlasse die interaktive Sitzung, indem du "quit" eingibst und die Eingabetaste drückst. Jetzt kannst du den SQL-Dump importieren, indem du etwas wie das Folgende ausführst:

mysql --host=127.0.0.1 --port=3399 --user=pvy3sc2dirdxb9mk --password=1luZ58khlodKMQjTF8Q5AfAcNl6Q7zP --database=m2fmzatzm0rymc4v < my_neos_website.sql

Importiere die Website-Assets

Deine Beach-Instanz nutzt Google Cloud Storage zum Speichern und Bereitstellen der dauerhaften Ressourcen der Neos-Website oder Flow-Anwendung. Alle Dateien im Docker-Container deiner Beach-Instanz sind temporär (ephemer), es gibt kein persistentes Dateisystem, das damit verbunden ist. Auch wenn das ein wenig Umdenken erfordert, ist das eigentlich eine gute Sache: Du kannst deine Instanzen hoch- und runterskalieren und sie starten und stoppen, ohne darüber nachdenken zu müssen, wie du eine Festplatte oder ein gemeinsames Dateisystem anschließen kannst.

Importiere Assets mit dem Site-Import

Am einfachsten ist es, deine Assets zu importieren, wenn sie in deinem Neos-Site-Paket vorhanden sind (z.B. wenn du die Neos Demo-Site verwendest oder gerade an einem neuen Website-Projekt arbeitest). In diesem Fall loggst du dich einfach per SSH in deine Instanz ein und führst einen Site-Import durch:

./flow site:import --package-key YourCompany.YourPackage

Assets mit Local Beach importieren

Wenn du viele Assets hast oder eine Website migrierst, die bereits in Produktion ist, empfehlen wir dir, Local Beach zu verwenden. Local Beach ist eine leichtgewichtige Client-Anwendung, die für MacOS und Linux verfügbar ist und in Sekundenschnelle installiert werden kann.

Die Installation von Local Beach wird in diesem Leitfaden erklärt.

Öffne ein Terminal und wechsle in das Verzeichnis mit deinem Neos-Projekt (das Verzeichnis mit der composer.json deiner Neos-Distribution). Wenn du Local Beach noch nicht mit diesem Projekt verwendet hast, führe den folgenden Befehl aus, um es zu initialisieren:

beach init

Assets mit Local Beach importieren

Wenn du viele Assets hast oder eine Website migrierst, die bereits in Produktion ist, empfehlen wir dir, Local Beach zu verwenden. Local Beach ist eine leichtgewichtige Client-Anwendung, die für MacOS und Linux verfügbar ist und in Sekundenschnelle installiert werden kann.Die Installation von Local Beach wird in dieser Anleitung erklärt.
Öffne ein Terminal und wechsle in das Verzeichnis, in dem sich dein Neos-Projekt befindet (das Verzeichnis mit der composer.json deiner Neos-Distribution). Wenn du Local Beach noch nicht mit diesem Projekt benutzt hast, führe einfach "beach init" aus.

Als Nächstes musst du den Projekt-Namensraum und den Instanz-Identifikator deiner Beach-Instanz festlegen.

Melde dich in der Beach-Benutzeroberfläche an und gehe auf die Registerkarte "Allgemeine Informationen" des Projekts. Dein Projektnamensraum ist entweder "beach" oder "project-123abc45-def6-7890-abcd-1234567890ab".

Den Instanzbezeichner findest du in der Detailansicht deiner Instanz. Es ist ein Bezeichner wie "instance-123abc45-def6-7890-abcd-1234567890ab".

Gehe schließlich zurück zum Terminal deines lokalen Neos-Projekts und starte den Upload:

beach resource-upload --instance instance-123abc45-def6-7890-abcd-1234567890ab --namespace project-123abc45-def6-7890-abcd-1234567890ab

Caches an einen dauerhaften Ort verschieben

Das Dateisystem deiner Beach-Instanzen ist nicht dauerhaft und wird bei jedem Deployment durch ein neues ersetzt. Das ist natürlich nicht gut für das Caching und einige Caches sollten an einem dauerhaften Ort gespeichert werden.

Wir werden in unserem Snippet unten die Datenbank verwenden. Wenn du Redis für dein Projekt zur Verfügung hast , kannst du auch das verwenden. Wir würden aus Leistungsgründen nicht empfehlen, die Datenbank für den Neos_Fusion_Content-Cache zu verwenden.

Flow_Security_Cryptography_HashService: &pdoBackend
  backend: 'Neos\Cache\Backend\PdoBackend'
  backendOptions:
    dataSourceName: 'mysql:host=%env:BEACH_DATABASE_HOST%;dbname=%env:BEACH_DATABASE_NAME%'
    username: '%env:BEACH_DATABASE_USERNAME%'
    password: '%env:BEACH_DATABASE_PASSWORD%'
    defaultLifetime: 0

Flow_Session_Storage: *pdoBackend
Flow_Session_MetaData: *pdoBackend
Caches.yaml Snippet, um die Session- und Hash-Service-Caches für das PDO-Backend zu konfigurieren.

Letzte Schritte

Hast du alle Inhalte und Assets hochgeladen? Dann ist es an der Zeit, die Ressourcen zu veröffentlichen und zu sehen, ob alles funktioniert.

Ressourcen veröffentlichen

Melde dich über SSH bei deiner Instanz an, indem du den Befehl "ssh -J ..." verwendest, der auf der Registerkarte Verbindungsinformationen angezeigt wird. Sobald du in der Shell deiner Instanz bist, veröffentliche alle Ressourcen:

./flow resource:publish

Wenn das ohne unerwartete Fehler geklappt hat, rufe die öffentliche URL deiner Instanz auf und sieh nach, ob deine Website angezeigt wird.

Letzte Worte

Das hörte sich nach vielen Schritten und Raketenwissenschaft an? Wir haben dich verstanden. Natürlich wollen wir nicht, dass du dich in Tunneln verlierst und deinen Tag damit verbringst, Befehle in eine Shell zu kopieren und einzufügen. Deshalb arbeiten wir an einem netten Kommandozeilen-Tool, das dir die ganze Arbeit abnimmt.

Und wenn etwas nicht so funktioniert hat, wie du es dir vorgestellt hast, haben wir ein offenes Ohr für dich: Melde dich einfach bei uns im Chat oder schick uns eine E-Mail.

Weitere Verbesserungen

VIPS-Unterstützung installieren

Das kann die Bildbearbeitung beschleunigen. Wenn du das tun möchtest, schau dir unsere Anleitung zur Verwendung von VIPS mit Neos an.

Redis für das Caching verwenden

Redis ist ein sehr schneller Key/Value-Store, der die Geschwindigkeit beim Caching erhöhen kann, insbesondere bei Caches, in denen viel mit Tags gearbeitet wird. Konfiguriere ihn wie in unserem Leitfaden zur Verwendung von Redis mit Neos und Flow beschrieben.