web-dev-qa-db-fra.com

Déployer le fichier jar de démarrage de printemps sur Azure App Service

Je ne parviens pas à faire fonctionner une API Spring Boot sur un service d'application Azure. J'ai suivi le guide Microsoft sur https://docs.Microsoft.com/en-us/Java/Azure/spring-framework/deploy-spring-boot-Java-web-app-on-Azure mais n'ayant pas de chance jusqu'à présent.

L'application démarre (je vois que l'application démarre dans le fichier journal), mais les requêtes http adressées à l'URL du service d'application se terminent toujours par un délai d'attente.

J'ai lu que les services d'application Azure ne récupéraient que les serveurs Tomcat intégrés exécutés sur le port 80 ou 8080, mais n'avaient pas eu de chance également.

L'application est déployée à la racine www et un fichier web.config approprié est également déployé.

J'ai essayé d'exécuter App Service avec et sans serveur d'applications (Tomcat et Jetty, ce qui n'est pas nécessaire car le serveur est intégré à l'application), mais les deux approches ont échoué.

Me manque-t-il une autre partie de la configuration? Ou est-ce que cela pourrait être lié au type de plan que j'utilise sur azur? Peut-être un problème avec la ressource?

Des pointeurs? 

THX,

Bert

6
Bert Vandamme

Il s’avère que mon intuition que ce soit un problème avec la ressource Azure était correcte. L'augmentation de la mémoire des ressources et du processeur a résolu le problème.

1
Bert Vandamme

Suivez les étapes indiquées par la communauté Spring et Azure pour déployer l'application Spring Boot sur Azure:

1) Allez dans le dossier de votre application où vous avez un fichier pom et lancez 

assurez-vous que les plugins suivants doivent être dans le fichier pom

<?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>

Remarque: assurez-vous d'avoir créé une application Web sur Azure avec le même nom que
maven-web-app - $ {maven.build.timestamp}

Maintenant, créez le fichier sur root avec le nom "web.config" et ajoutez votre jar dans web.comfig.

<?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

Maintenant, ouvrez Azure CLI et exécutez les commandes suivantes  enter image description here

  • paquet propre mvn 
  • mvn spring-boot: lancer

Assurez-vous que l'application fonctionne bien sur le plan local.

Maintenant, utilisez les commandes suivantes si vous avez plusieurs comptes associés à votre identifiant

  • az login

  • liste de compte az

  • ensemble de comptes az --subscription XXX-XXX-XXX-XXXXXXXXXXXXXX

Vous devez maintenant créer "Principes de service dans Microsoft Azure"

1) Ouvrez une fenêtre de terminal.

2) Connectez-vous à votre compte Azure avec l'interface de ligne de commande Azure en saisissant un identifiant de connexion.

3) Créez un principal de service Azure en saisissant z ad sp create-for-rbac --name "vaquarkhan" --password "yourpassword" (vaquarkhan est le nom d'utilisateur et yourpassword est le mot de passe du principal de service).

az ad sp create-for-rbac --name "app-name" --password "mot de passe"

NOTE: si vous obtenez une erreur, vous devez modifier les paramètres ---> ici 

"Azure.graphrbac.models.graph_error.GraphErrorException: les utilisateurs invités Ne sont pas autorisés à effectuer cette action."

si le succès 

Azure doit imprimer une réponse JSON ressemblant à ceci:

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

Configurer Maven pour utiliser votre principal de service Azure

1) Ouvrez votre fichier settings.xml de Maven dans un éditeur de texte (généralement situé dans /etc/maven/settings.xml ou $ 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) Ajoutez les paramètres principaux de votre service Azure de la section précédente de ce didacticiel à la collection dans le fichier settings.xml, comme indiqué ci-dessous:

<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) Enregistrez et fermez le fichier settings.xml.

Construire et déployer votre application sur Azure

1) lancer la commande suivante 

  • mvn Azure-webapp: deploy
  • Une fois votre application Web déployée, visitez le portail Azure pour le gérerit. Il sera répertorié dans App Services.

  • Cliquez sur l'application. À partir de là, l'URL publique de Votre application Web sera répertoriée dans la section Présentation.

  • Détermination de l'URL de votre application Web Vous pouvez cliquer sur ce lien pour Visiter l'application Spring Boot et interagir avec elle.

 enter image description here  enter image description here

Azure maven plugin doc

Remarque: le nom du site Web doit être unique au monde et son nom généré en utilisant le nom de l'application, assurez-vous que le nom doit être unique.

3
vaquar khan

En combinant les étapes du tutoriels officiels et votre situation actuelle, je fournis les points de contrôle suivants:

Point 1: Veuillez utiliser mvn package pour créer le package JAR dans le répertoire dans lequel se trouve le fichier pom.xml.

 enter image description here ]

Point 2: Assurez-vous que le nom du package jar configuré dans web.config est identique au nom du package jar téléchargé.

 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>

Point 3: Veuillez utiliser FTP pour publier le jar files et le web.config dans le répertoire D:\home\site\wwwroot\ sur KUDU.

Point 4: Assurez-vous que ApplicationSettings correspond à votre projet, tel que jdk version, Tomcat version.

 enter image description here

Si vous souhaitez déployer un fichier war, vous devez configurer les paramètres ApplicationSettings de votre service d'application sur le portail Azure, puis télécharger le fichier war dans le chemin D:\home\site\wwwroot\webapps.

En outre, vous pouvez consulter les fichiers journaux sur KUDU: https://<your project name>.scm.azurewebsites.net/DebugConsole.

À titre de référence, veuillez vous reporter aux documents et fils de discussion ci-dessous.

1. Configurer les applications Web dans Azure App Service

2. Créer une application Web Java dans Azure App Service

3. Déploiement de Springboot sur Azure App Service .

J'espère que ça vous aide.

1
Jay Gong

Afin de faire fonctionner une application Springboot, vous devez télécharger votre fichier JAR et ajouter le fichier web.config.

Pour communiquer au service ce que vous essayez d'exécuter, vous devez ajouter un fichier web.config au dossier site\wwwroot du service d'application. Comme vous avez déjà créé le fichier web.config, utilisez Maven pour ajouter ce qui suit et obtenir un projet/une version inclus dynamiquement dans le package.

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

Placez maintenant le fichier jar et le fichier web.config dans Azure App Service.

Vous pouvez simplement vérifier une fois si vous avez créé le fichier web.config comme ci-dessous,

<?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\@project.artifactId@[email protected]@.jar&quot;">
        </httpPlatform>
    </system.webServer>
</configuration>
1
Swikruti Bose