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:
# 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.
{ "appId": "ed4b6deb-e623-4d75-949b-1674dbfa7e82", "displayName": "MagnoliaAzureDemo", "name": "http://MagnoliaAzureDemo", "password": "pBpBiZYy.P7PB0GmpN2T1vq-Z4huA~Tuct", "tenant": "f7b40566-d9fd-49e6-a4ad-2c4fbc01129d"
}
In der Produktion sollten Sie den Azure-Schlüsseltresor nutzen oder Maven verwenden, um den Schlüsselwert zu verschlüsseln.
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
...<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.
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.
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
<profiles>
... <profile>
<id>ROOT</id>
<build>
<finalName>ROOT</finalName>
</build>
</profile>
</profiles>
Fügen Sie in derselben Datei das Azure Maven Build-Plugin hinzu:
<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:
# az group create --name MagnoliaAzureDemoResourceGroup --location westeurope
Dies sollte eine JSON-Antwort ähnlich der unten stehenden ergeben:
{ "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.
# mvn clean package -P ROOT
Stellen Sie den Build in Azure bereit:
# mvn azure-webapp:deploy
Der letzte Befehl kann einige Zeit dauern, während Azure App Service sich um Ihre Magnolia-Instanz kümmert:
[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:
Wenn die Installation abgeschlossen ist, starten Sie Magnolia:
Sie haben erfolgreich eine Magnolia-Instanz eingerichtet und sollten nun Ihre öffentliche Website sehen:
Versuchen Sie nun, die Instanz über das Terminal neu zu starten und sehen Sie, was passiert:
# 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:
# 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:
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.
# 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:
# 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:
# 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:
# 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.