Bereitstellung von Magnolia mit Azure App Service
März 16, 2021
--
Deploying Magnolia using Azure 656x400

Bereitstellung von Magnolia mit Azure App Service

Azure App Service bietet einen Web-Hosting-Service, der eine schnelle Bereitstellung von Magnolia-Projekten ermöglicht. Er lässt sich gut mit Maven integrieren und kann direkt von Ihrer IDE aus verwendet werden. Nach der Konfiguration benötigen Sie nur wenige Befehle, um Ihre Magnolia-Anwendung auf einem gehosteten Dienst bereitzustellen, wo die Anwendung über das öffentliche Internet zugänglich ist. Das macht es für Benutzer außerhalb Ihres Unternehmens einfach, neue Funktionen in Ihrem Magnolia-Projekt zu testen.

In diesem Blog wird erklärt, wie eine einzelne Magnolia-Instanz mit Hilfe von Standard-Entwicklungswerkzeugen schnell in einer gehosteten Azure-Umgebung bereitgestellt werden kann. Die vollständige Dokumentation für produktionsreife Konfigurationen und Bereitstellungen liegt außerhalb des Rahmens dieses Blogs.

Voraussetzungen

Werkzeuge

Neben den für die Magnolia-Entwicklung erforderlichen Standards wie Maven und Java müssen Sie die folgenden Tools für Azure installieren:

Sie können entweder auf der Kommandozeile arbeiten oder ein Toolkit für Ihre Entwicklungsumgebung installieren:

In diesem Beispiel werden wir die Kommandozeile und die Maven-Tools verwenden, aber Sie können auch eine der oben genannten Alternativen verwenden.

Allgemeine Azure- und Maven-Einrichtung

Wir gehen davon aus, dass Sie bereits über ein Azure-Konto verfügen und in der Lage waren, eine erste Konfiguration auf Ihrem Entwicklungsrechner zu erstellen, um die Azure-Befehlszeilen-Tools zu verwenden. Sie sollten auch wissen, wie Maven verwendet wird, um Java-basierte Webanwendungen zu erstellen, z. B. eine Magnolia-Instanz. Am Ende dieses Artikels finden Sie zusätzliche Ressourcen für weitere Informationen.

Bitte beachten Sie, dass Sie für Ihre Magnolia-Instanz eindeutige Parameter verwenden müssen, z.B. für den Namen, denn Azure erlaubt es nicht, dieselben Parameter für mehrere Azure-Clients gleichzeitig zu verwenden, wie z.B. "MagnoliaAzureDemo".

Erstellen Sie einen Dienstprinzipal

Service Principals sind dedizierte Azure-Konten für automatisierte Tools, die ein Konto ohne Administratorrechte bereitstellen. Die Verwendung eines Service Principals ist sicherer als die Verwendung eines regulären Benutzerkontos.

Um Maven in die Lage zu versetzen, das Magnolia-Projekt auf Azure bereitzustellen, erstellen Sie einen Service Principal mit passwortbasierter Authentifizierung:

Java
  # az ad sp create-for-rbac --name MagnoliaAzureDemo  

Es ist wichtig, dass Sie die Ausgabe des Ergebnisses dieses Befehls aufbewahren, insbesondere das Passwort, das später nicht mehr abgerufen werden kann.

Java
  { "appId": "ed4b6deb-e623-4d75-949b-1674dbfa7e82", "displayName": "MagnoliaAzureDemo", "name": "http://MagnoliaAzureDemo", "password": "pBpBiZYy.P7PB0GmpN2T1vq-Z4huA~Tuct", "tenant": "f7b40566-d9fd-49e6-a4ad-2c4fbc01129d"
}

Wir haben empfohlen, jede Konfiguration in den Maven-Einstellungen zu speichern. Passen Sie daher Ihre vorhandene Datei settings.xml an, indem Sie eine Serverkonfiguration hinzufügen:

einstellungen.xml

Java
  ...<server>
   <id>azure-auth</id>
   <configuration>
       <client>ed4b6deb-e623-4d75-949b-1674dbfa7e82</client>
       <tenant>f7b40566-d9fd-49e6-a4ad-2c4fbc01129d</tenant>
       <key>pBpBiZYy.P7PB0GmpN2T1vq-Z4huA~Tuct</key>
       <environment>AZURE</environment>
   </configuration>
</server>
...

Sie können die Azure-Region mit einem der folgenden Werte für den Umgebungsparameter angeben: AZURE, AZURE_CHINA, AZURE_GERMANY, oder AZURE_US_GOVERNMENT.

Vorbereiten der Magnolia-Demo

In diesem Artikel verwenden wir eine einfache öffentliche Magnolia-Instanz auf Basis der "magnolia-community-demo-webapp". Alternativ können Sie diesen Abschnitt auch überspringen und eines Ihrer bestehenden Projekte verwenden.

Wenn Sie neu in Magnolia sind, empfehlen wir Ihnen, zuerst zu lesen, wie man eine benutzerdefinierte Webapp mit Maven erstellt. Sie können auch einen Blick auf ein Beispielprojekt werfen.

Konfigurieren Sie die Magnolia-Webapp

Der Magnolia-Instanzkontext sollte als Subdomain verfügbar sein, die dem Namen Ihres Deployments auf der azurewebsites.net-Domain entspricht, etwa so:

https://<Name>.azurewebsites.net/

Für die Root-Konfiguration erstellen Sie einen Ordner namens "ROOT" unter <project>-webapp/src/main/webapp/WEB-INF/config und fügen eine magnolia.properties-Datei hinzu.

Java
  magnolia-blog-azure-demo-webapp/ ├── overlays/ └── src/ └── main/ └── webapp/ ├── docroot/ └── WEB-INF ├── bootstrap/ └── config ├── default/ └── ROOT └── magnolia.Eigenschaften  

Fügen Sie den folgenden Inhalt in magnolia.properties ein, um eine öffentliche Magnolia-Instanz auf der ROOT-Ebene zu booten.

Java
  magnolia.bootstrap.authorInstance=false # die Verzeichnisse, in denen die Bootstrap-Dateien durchsucht werden magnolia.bootstrap.dir=WEB-INF/bootstrap/public WEB-INF/bootstrap/common  

Integrieren Sie Azure in Ihre Build-Konfiguration

Fügen Sie der pom.xml in der <Projektname>-Webapp ein Profil hinzu:

pom.xml

Java
  <profiles>
    ...   <profile>
      <id>ROOT</id>
      <build>
        <finalName>ROOT</finalName>
      </build>
    </profile>
  </profiles>

Fügen Sie in derselben Datei das Azure Maven Build-Plugin hinzu:

Java
  <build>
  <plugins>
      ...   <plugin>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-webapp-maven-plugin</artifactId>
        <version>1.12.0</version>
        <configuration>
          <schemaVersion>V2</schemaVersion>
          <subscriptionId>94dbb43c-40b5-4de6-ba4f-7b00075XXX456</subscriptionId>
          <resourceGroup>MagnoliaAzureDemoResourceGroup</resourceGroup>
          <appName>mgnlazuredemo</appName>
          <pricingTier>B3</pricingTier>
          <region>westeuropa</region>
          <runtime>
            <os>Linux</os>
            <webContainer>Tomcat 9.0</webContainer>
            <javaVersion>Java 11</javaVersion>
          </runtime>
          <deployment>
            <resources>
              <resource>
                <directory>${project.basedir}/target</directory>
                <includes>
                  <include>*.war</include>
                </includes>
              </resource>
            </resources>
          </deployment>
        </configuration>
      </plugin>
    </plugins>
  </build>

Bei einem Produktionseinsatz würden Sie Eigenschaften und Variablennamen in Ihrer Maven-Konfiguration verwenden. Fühlen Sie sich frei, die Preisstufe, Region und andere Werte entsprechend Ihren Bedürfnissen anzupassen. Siehe Maven Plugin für Azure App Service für weitere Informationen.

Deploying your CMS to Azure Cloud

Our free blueprints guide you through deploying your CMS to Azure Cloud, using Magnolia CMS as an example

Testen Sie Ihren Einsatz

Öffnen Sie ein Terminal und navigieren Sie zu <Projektname>-webapp Ihres Magnolia-Projekts.

Eine Ressourcengruppe erstellen

Wenn Sie dies noch nicht getan haben, erstellen Sie eine Ressourcengruppe für die Demo mit dem von Ihnen gewünschten Namen und den Standortparametern:

Java
  # az group create --name MagnoliaAzureDemoResourceGroup --location westeurope  

Dies sollte eine JSON-Antwort ähnlich der unten stehenden ergeben:

Java
  { "id": "/subscriptions/94dbb43c-41b6-5de5-ba9d-7b11175de438/resourceGroups/MagnoliaAzureDemoResourceGroup", "location": "westeurope", "managedBy": null, "name": "MagnoliaAzureDemoResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" }  

Magnolia aufbauen und einsetzen

Erstellen Sie Magnolia mit dem ROOT-Profil. Das endgültige Artefakt wird ROOT.war heißen und die Datei magnolia.properties im ROOT-Ordner wird beim Start verwendet.

Java
  # mvn clean package -P ROOT  

Stellen Sie den Build in Azure bereit:

Java
  # mvn azure-webapp:deploy  

Der letzte Befehl kann einige Zeit dauern, während Azure App Service sich um Ihre Magnolia-Instanz kümmert:

Java
  [INFO] Versuch, das Artefakt auf mgnlazuredemo zu verteilen... [INFO] Verteilen der War-Datei ROOT.war... [INFO] Erfolgreiche Verteilung des Artefakts auf https://mgnlazuredemo.azurewebsites.net [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------  

Sobald Sie die Meldung "BUILD SUCCESS" sehen, können Sie Ihre Magnolia-Instanz über die öffentliche URL https://<name>.azurewebsites.net/ aufrufen und die Installation starten:

Start_screen

Wenn die Installation abgeschlossen ist, starten Sie Magnolia:

Start_screen2

Sie haben erfolgreich eine Magnolia-Instanz eingerichtet und sollten nun Ihre öffentliche Website sehen:

Travel_home

Versuchen Sie nun, die Instanz über das Terminal neu zu starten und sehen Sie, was passiert:

Java
  # az webapp restart -n mgnlazuredemo -g MagnoliaAzureDemoResourceGroup  

Sobald der Dienst bereit ist, werden Sie feststellen, dass Sie erneut "Installation starten" sehen, da der Azure-Container den Standardspeicherort seiner dateibasierten H2-Datenbank nicht gespeichert hat.

Stoppen und löschen Sie die Magnolia-Demo-Instanz:

Java
  # az webapp stop --name mgnlazuredemo --resource-group MagnoliaAzureDemoResourceGroup # az webapp delete --name mgnlazuredemo --resource-group MagnoliaAzureDemoResourceGroup  

Magnolia-Instanz-Eigenschaften anpassen

Öffnen Sie die Datei magnolia.properties, die Sie oben erstellt haben, und fügen Sie die folgenden Zeilen hinzu:

Java
  magnolia.content.bootstrap.dir=/var/lib/mgnl-public/content-importer magnolia.upload.tmpdir=/var/tmp/mgnl-public-uploaded magnolia.exchange.history=/var/tmp/mgnl-public-history magnolia.home=/home/site/magnolia magnolia.resources.dir=/home/site/magnolia/resources magnolia.cache.startdir=/home/site/magnolia/cache magnolia.repositories.home=/home/site/magnolia/repositories magnolia.logs.dir=/home/site/magnolia/log magnolia.author.key.location=/home/site/magnolia/magnolia-activation-keypair.properties  

Für eine öffentliche Instanz setzen Sie magnolia.update.auto=true, um Modulinstallationen automatisch auszulösen, anstatt Ihren Besuchern die Möglichkeit zu geben, Magnolia zu aktualisieren.

Java
  # Setzt es auf true, wenn Bootstrapping/Update automatisch durchgeführt werden soll magnolia.update.auto=true  

Bereitstellen des neuen Builds

Wiederholen Sie die vorherigen Schritte:

Java
  # mvn clean package -P ROOT # mvn azure-webapp:deploy  

Sobald die Instanz erfolgreich bereitgestellt wurde, navigieren Sie zu Ihrer Anwendungs-URL und leeren Sie ggf. Ihren Browser-Cache.

Fehlersuche

Wenn Magnolia nicht startet, prüfen Sie die Protokolldatei, indem Sie sich per SSH mit dem Container verbinden:

Java
  # az webapp ssh -n mgnlazuredemo -g MagnoliaAzureDemoResourceGroup # tail -f /home/site/magnolia/log/magnolia-debug.log  

Azure-Ressourcen bereinigen

Achtung! Entfernen Sie alle ungenutzten Ressourcen und verwaisten Artefakte, um zu verhindern, dass Ihnen diese von Microsoft in Rechnung gestellt werden.

Verwenden Sie das Azure-Portal oder bereinigen Sie über die Befehlszeile:

Java
  # az webapp stop --name mgnlazuredemo --resource-group MagnoliaAzureDemoResourceGroup # az webapp delete --name mgnlazuredemo --resource-group MagnoliaAzureDemoResourceGroup # az group delete --name MagnoliaAzureDemoResourceGroup  

Vereinfachte Magnolia-Bereitstellungen mit Azure App Service

Azure App Service ist ein bequemer Weg, um Maven-basierte Magnolia-Projekte in der Cloud bereitzustellen. Er baut auf einem bestehenden Tool-Stack auf und erfordert nur einige anfängliche Konfigurationen. Darüber hinaus bietet er Integrationen für die gängigsten Java-IDEs out-of-the-box.

Die Stabilität und Zuverlässigkeit von Azure App Service hat sich in den letzten Jahren deutlich verbessert. Allerdings kann sein "Selbst-Patching"-Ansatz in Produktionsumgebungen Herausforderungen mit sich bringen. Eine produktive Installation könnte auch höhere Anforderungen an Leistung, Datenspeicherung und Skalierbarkeit stellen.

In jedem Fall handelt es sich um eine Lösung, die die Entwickler von der Bereitstellung und Konfiguration ihrer eigenen Infrastruktur entlastet, unabhängig davon, ob Sie sie für Tests oder für andere Zwecke nutzen.

Zusätzliche Ressourcen

Über den autor

Lars Fischer

Professional Services, Magnolia

Lars Fischer works for Magnolia’s Professional Services team and is involved in pre-sales and post-sales consultancy. He supports customers with a wide range of topics including implementations of Magnolia, integrations, and security.