web-dev-qa-db-de.com

Stellen Sie Spring Boot-Jar im Azure App Service bereit

Ich habe Probleme, eine Spring Boot-API für einen Azure-App-Service zu erhalten. Ich habe die Microsoft-Anleitung unter https://docs.Microsoft.com/de-de/Java/Azure/spring-framework/deploy-spring-boot-Java-web-app-on-Azure befolgt bisher kein Glück gehabt.

Die Anwendung wird zwar gestartet (ich kann die App in der Protokolldatei booten), aber HTTP-Anforderungen an die App-Service-URL enden immer mit einem Timeout.

Ich habe gelesen, dass die Azure-App-Services nur eingebettete Tomcat-Server verwenden, die auf Port 80 oder 8080 laufen, aber auch damit kein Glück hatten.

Die App wird im WWW-Stammverzeichnis bereitgestellt und eine entsprechende web.config wird ebenfalls bereitgestellt.

Ich habe versucht, den App Service mit und ohne Anwendungsserver auszuführen (Tomcat und Jetty, dies ist nicht erforderlich, da der Server in die Anwendung eingebettet ist), aber beide Ansätze sind fehlgeschlagen.

Fehlt mir ein anderer Konfigurationsteil? Oder könnte dies mit der Art des Plans zusammenhängen, den ich auf Azurblau verwende? Vielleicht ein Problem mit der Ressource?

Irgendwelche Hinweise? 

Vielen Dank,

Bert

6
Bert Vandamme

Es stellte sich heraus, dass meine Vermutung, dass es sich um ein Problem mit der Azure-Ressource handelte, korrekt war. Durch das Upscaling von Ressourcenspeicher und CPU wurde das Problem behoben.

1
Bert Vandamme

Führen Sie die folgenden Schritte aus, die von spring und der Azure-Community angegeben wurden, um die Spring Boot-App auf Azure bereitzustellen:

1) Gehen Sie in den App-Ordner, in dem sich die POM-Datei befindet, und führen Sie sie aus 

stellen Sie sicher, dass die folgenden Plug-Ins in der POM-Datei enthalten sind

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-spring-boot</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- tag::actuator[] -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- end::actuator[] -->
        <!-- tag::tests[] -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- end::tests[] -->
    </dependencies>

    <properties>
        <Java.version>1.8</Java.version>
        <maven.build.timestamp.format>yyyyMMddHHmmssSSS</maven.build.timestamp.format>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.Microsoft.Azure</groupId>
                <artifactId>Azure-webapp-maven-plugin</artifactId>
                <version>0.1.5</version>
                <configuration>
                    <authentication>
                        <serverId>Azure-auth</serverId>
                    </authentication>
                    <resourceGroup>maven-plugin</resourceGroup>
                    <appName>maven-web-app-${maven.build.timestamp}</appName>
                    <region>westus</region>
                    <javaVersion>1.8</javaVersion>
                    <deploymentType>ftp</deploymentType>
                    <stopAppDuringDeployment>true</stopAppDuringDeployment>
                    <resources>
                        <resource>
                            <directory>${project.basedir}/target</directory>
                            <targetPath>/</targetPath>
                            <includes>
                                <include>*.jar</include>
                            </includes>
                        </resource>
                        <resource>
                            <directory>${project.basedir}</directory>
                            <targetPath>/</targetPath>
                            <includes>
                                <include>web.config</include>
                            </includes>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Hinweis: Stellen Sie sicher, dass Sie eine Web-App mit dem gleichen Namen wie in Azure erstellt haben
maven-web-app - $ {maven.build.timestamp}

Erstellen Sie nun eine Datei mit dem Namen "web.config" im Stammverzeichnis, und fügen Sie Ihr jar in web.comfig hinzu

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
        </handlers>
        <httpPlatform processPath="%Java_HOME%\bin\Java.exe"
                      arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\Azure-rest-example-app-0.1.0.jar&quot;">
        </httpPlatform>
    </system.webServer>
</configuration>

 enter image description here

Öffnen Sie nun Azure CLI und führen Sie die folgenden Befehle aus  enter image description here

  • mvn sauberes paket 
  • mVN Spring-Boot: laufen

Stellen Sie sicher, dass die App auf lokalen Anwendungen einwandfrei funktioniert.

Verwenden Sie nun die folgenden Befehle, wenn Sie mehrere ID-Nummern haben

  • az anmelden

  • eine Kontenliste

  • ein Kontosatz - Abonnement XXX-XXX-XXX-XXXXXXXXXXXX

Jetzt müssen Sie "Service Principals in Microsoft Azure" erstellen.

1) Öffnen Sie ein Terminalfenster.

2) Melden Sie sich mit der Azure-CLI bei Ihrem Azure-Konto an, indem Sie einen Anmeldenamen eingeben

3) Erstellen Sie einen Azure-Service-Principal, indem Sie Folgendes eingeben: az ad sp create-for-rbac - Name "vaquarkhan" --password "yourpassword" (vaquarkhan ist der Benutzername und Ihr Passwort ist das Kennwort für den Service-Principal).

az ad sp create-for-rbac - name "app-name" --password "password"

HINWEIS: Wenn Sie Fehler erhalten, müssen Sie die Einstellungen ändern ---> hier 

"Azure.graphrbac.models.graph_error.GraphErrorException: Gastbenutzer Sind nicht berechtigt, diese Aktion auszuführen."

wenn Erfolg 

Azure sollte eine JSON-Antwort in der folgenden Form ausdrucken:

{
   "appId": "XXX-XXXX-XXX-XXX-XXXX",
   "displayName": "vaquarkhan",
   "name": "http://vaquarkhan",
   "password": "yourpassword",
   "tenant": "YYY-YYYY-YYY-YYY-YYYY"
}

Konfigurieren Sie Maven für die Verwendung Ihres Azure-Dienstprinzips.

1) Öffnen Sie Ihre Maven Settings.xml-Datei in einem Texteditor (normalerweise unter /etc/maven/settings.xml oder $ HOME/.m2/settings.xml).

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.Apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.Apache.org/SETTINGS/1.0.0
                          http://maven.Apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <usePluginRegistry/>
  <offline/>
  <pluginGroups/>

  <servers>
   <server>
     <id>Azure-auth</id>
      <configuration>
         <client>ur key</client>
         <tenant>ur tenant</tenant>
         <key>YOUR PASSWORD</key>
         <environment>Azure</environment>
      </configuration>
   </server>
</servers>


  <proxies/>

  <profiles>
    <profile>
      <id>hwx</id>
      <repositories>
        <repository>
          <id>hwx</id>
          <name>hwx</name>
          <url>http://nexus-private.hortonworks.com/nexus/content/groups/public/</url>
        </repository>
      </repositories>
    </profile>
  </profiles>


  <mirrors>
    <mirror>
      <id>public</id>
      <mirrorOf>*</mirrorOf>
      <url>http://nexus-private.hortonworks.com/nexus/content/groups/public/</url>
    </mirror>
  </mirrors>

  <activeProfiles/>
</settings>

2) Fügen Sie der Sammlung in der Datei "settings.xml" die Azure-Dienstprinzipaleinstellungen aus dem vorherigen Abschnitt dieses Lernprogramms hinzu (siehe unten):

<servers>
   <server>
     <id>Azure-auth</id>
      <configuration>
         <client>aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa</client>
         <tenant>tttttttt-tttt-tttt-tttt-tttttttttttt</tenant>
         <key>pppppppp</key>
         <environment>Azure</environment>
      </configuration>
   </server>
</servers>

3) Speichern und schließen Sie die Datei settings.xml.

App erstellen und für Azure bereitstellen

1) folgenden Befehl ausführen 

  • mvn Azure-webapp: Bereitstellen
  • Wenn Ihre Webanwendung bereitgestellt wurde, besuchen Sie das Azure-Portal, um manageit zu verwalten. Es wird in App Services aufgeführt.

  • Klicken Sie auf die Anwendung. Von dort aus wird die öffentlich zugängliche URL für Ihre Web-App Im Abschnitt Übersicht aufgeführt

  • Ermitteln der URL für Ihre Web-App Sie können auf diesen Link klicken, um Die Spring Boot-Anwendung zu besuchen und mit ihr zu interagieren.

 enter image description here  enter image description here

Azure-Maven-Plugin doc

Hinweis: Der Website-Name muss global eindeutig sein und das generierte Vergewissern Sie sich, dass der Name mit dem App-Namen eindeutig ist.

3
vaquar khan

Ich gebe die Schritte in den offiziellen Tutorials und Ihre tatsächliche Situation zusammen und gebe folgende Kontrollpunkte:

Punkt 1: Bitte verwenden Sie mvn package, um das JAR-Paket in dem Verzeichnis zu speichern, unter dem sich die pom.xml-Datei befindet.

enter image description here ]

Punkt 2: Stellen Sie sicher, dass der in web.config konfigurierte JAR-Paketname mit dem hochgeladenen JAR-Paketnamen übereinstimmt.

enter image description here

web.config 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
    </handlers>
    <httpPlatform processPath="%Java_HOME%\bin\Java.exe"
        arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\<your project name>&quot;">
    </httpPlatform>
  </system.webServer>
</configuration>

Punkt 3: Bitte verwenden Sie FTP, um jar files und web.config im D:\home\site\wwwroot\-Verzeichnis auf KUDU zu veröffentlichen.

Punkt 4: Stellen Sie sicher, dass ApplicationSettings mit Ihrem Projekt übereinstimmt, z. B. jdk version, Tomcat version.

enter image description here

Wenn Sie eine war-Datei bereitstellen möchten, müssen Sie die ApplicationSettings Ihres App-Service im Azure-Portal konfigurieren und die war-Datei in den Pfad D:\home\site\wwwroot\webapps hochladen.

Außerdem können Sie die Protokolldateien auf KUDU überprüfen: https://<your project name>.scm.azurewebsites.net/DebugConsole.

Als Referenzen verweisen wir auf die Dokumente und Threads unten.

1 . Konfigurieren von Webanwendungen in Azure App Service

2 . Erstellen einer Java-Webanwendung in Azure App Service

3 . Bereitstellen von Springboot für Azure App Service .

Ich hoffe es hilft dir.

1
Jay Gong

Damit eine Springboot-Anwendung ausgeführt werden kann, müssen Sie Ihre JAR-Datei hochladen und die Datei web.config hinzufügen.

Um dem Dienst mitzuteilen, was Sie ausführen möchten, müssen Sie dem Ordner site\wwwroot des App-Dienstes eine Datei web.config hinzufügen. Da Sie die Datei web.config bereits erstellt haben, verwenden Sie Maven, um Folgendes hinzuzufügen und ein Projekt/Release dynamisch in das Paket aufzunehmen.

<build>
    <resources>
        <resource>
            <directory>${project.basedir}/wwwroot</directory>
            <filtering>true</filtering>
            <targetPath>${basedir}/target</targetPath>
        </resource>
    </resources>
</build> 

Platzieren Sie nun die JAR-Datei und die web.config im Azure App Service.

Sie können nur einmal überprüfen, ob Sie die Datei web.config wie folgt erstellt haben:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
        </handlers>
        <httpPlatform processPath="%Java_HOME%\bin\Java.exe"
        arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\@[email protected]@[email protected]&quot;">
        </httpPlatform>
    </system.webServer>
</configuration>
1
Swikruti Bose