无法将 Spring Boot 应用程序部署到 Azure

Posted

技术标签:

【中文标题】无法将 Spring Boot 应用程序部署到 Azure【英文标题】:Cannot Deploy Spring Boot Application to Azure 【发布时间】:2016-06-13 07:49:31 【问题描述】:

我的 Spring Boot 站点无法响应 Azure Web 实例。我关注了Java app instructions 和upload instructions。似乎 IIS 服务器正在接收请求,但战争中的 servlet 没有响应。根据文档,有几个问题。特别是,web.config 应该部署到 wwwroot 并指定 java 路径以及转发端口。我相信我已经涵盖了这些基础——我的 web.config 粘贴在下面。

我确实尝试过从市场上部署一个 tomcat 服务器,并且效果很好。当我替换我的 war 文件和 web.config 时,spring boot 应用程序不起作用。

一条有趣的信息是似乎没有定义 HTTP_PLATFORM_PORT 环境变量。

应用设置:

Azure 控制台信息(环境变量和 Web.config):

D:\home\site\wwwroot

> dir
D:\home\site\wwwroot
Volume in drive D is Windows
 Volume Serial Number is 789E-197B

 Directory of D:\home\site\wwwroot

03/01/2016  02:14 AM    <DIR>          .
03/01/2016  02:14 AM    <DIR>          ..
02/29/2016  08:15 PM    <DIR>          bin
03/01/2016  01:49 AM         8,771,899 web-0.0.1-SNAPSHOT.war
03/01/2016  02:10 AM               496 web.config
03/01/2016  02:08 AM               496 web.custom.config
03/01/2016  01:54 AM             4,868 web.tomcat.config
03/01/2016  02:14 AM    <DIR>          webapps



> echo %java_home%
D:\home\site\wwwroot
D:\Program Files\Java\jdk1.8.0_60


> echo %http_platform_port%
D:\home\site\wwwroot
%http_platform_port%


> cat web.config
D:\home\site\wwwroot
<?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\web-0.0.1-SNAPSHOT.war&quot;">
    </httpPlatform>
  </system.webServer>
</configuration>

【问题讨论】:

您好,抱歉,您能帮帮我吗? ,我将 jar 文件上传到 /webapp 文件夹,但没有任何改变。我错过了一部分吗?我在哪里可以找到这个 web.config 文件??在此先感谢! 正确的路径是site/wwwroot。使用从 Azure 门户中的 Web 应用程序配置的 ftp 凭据。 web.config 在这里解释:azure.microsoft.com/en-us/documentation/articles/… 我的 web.config 与该页面上显示的 springboot 应用程序中的基本相同。发生的事情是您启动了一个运行您的 jar 的自定义 Http 模块。 非常感谢!!另一个问题,我没有启动自定义 Http 模块的部分,我是 Azure 和那些东西的新手,顺便说一句,我还有一个 SpringBoot 应用程序.. 很抱歉用 cmets 向你发送垃圾邮件:( 我将 jar 文件上传到 /wwwroot,将 web.config 固定到同一文件夹中,从 azure 门户重新启动 web app,然后当我尝试访问该站点时,它一直在加载,有时它给了我错误 503 .. 是否有任何 Tomcat 配置? ..我不明白..还是我必须切换到.war...再次抱歉,但我被困在那里! 那次经历让我写下这个问题。就我而言,我部署了一个“薄罐”。如果您使用 gradle,则必须使用 'gradle build' not 'gradle jar' 构建 java 应用程序。您需要一个包含所有依赖项的 jar。 【参考方案1】:

我的 2cents,希望这可以帮助人们不要浪费几个小时的生命。我试图将 Spring Boot REST 服务部署到 Azure API App 实例,并通过 Kudo 接口进行。

我正在将 WAR 文件部署到 API 应用服务。 API App 服务是使用 Azure 门户创建的,所有应用程序设置都保留为默认值。除了设置 Java 版本和 Web 容器外,没有更改其他设置。

我在 Eclipse 中从一个 maven 项目编译了一个 War 文件,然后将这个 war 文件重命名为 ROOT.war。使用 Kudo 控制台,我将 war 文件放在 webapps 文件夹下。请注意,我删除了 /webapps/ROOT/ 文件夹的内容。我不必添加 web.config 文件。我把war文件拖了上传。但是,如果你将它拖到“蓝色框”上,它会解压缩 war 文件,这会导致服务失败。

如果您将战争文件放到蓝框以外的位置,则该文件不会被解压缩。

然后我重新启动了服务,等待了一分钟,然后就可以通过 Azure url 访问它了。

【讨论】:

只是好奇,你如何在spring boot属性中设置server.port还是没关系? 在 application.properties 文件中:server.port=PORT_NUMBER 感谢您回来回复 :) 我很惊讶在 azure 文档中没有提及此环境变量。我实际上将其强制为 8080 并且似乎可以正常工作。我当然错了这样的硬编码。你的回答让我知道我走在正确的轨道上,在你的帮助下,我已经能够让war 格式工作了。【参考方案2】:

不应该是一个可执行的 JAR 而不是 WAR 吗?您可以运行仅安装了 JDK 8 的 Spring Boot JAR,但您需要一个 Java EE 应用服务器来部署 WAR。

我不知道 web.config 文件是什么;我使用 Cloud Foundry。我只需要一个 JAR、一个用于配置的 .yml 文件和一个 JDK。 Spring Boot JAR 应该包含整个应用程序及其依赖项。我使用 Maven 创建胖 JAR。

【讨论】:

“胖罐子”是关键。 “gradle build”可以解决问题。不起作用的 Gradle 命令:“gradle jar”和“gradle war”。再次感谢。 在azure.microsoft.com/en-us/documentation/articles/… 你有 web.config 和如何部署它的说明。 @duffymo 也许您想将其添加到您的答案中。 这不是我的答案。添加你自己的。我不使用 Azure。【参考方案3】:

根据我的经验,在 Azure 上部署 Spring Boot 应用程序的简单方法是创建一个包含 tomcat 的 webapp,并参考 spring 官方文档 How to create a deployable war file 创建一个 war 文件,然后将其部署到路径 wwwroot\webapps 通过FTP 或 Kudu 控制台。

如果你已有 Spring Boot Jar Application,可以参考其他 spring doc Converting a Spring Boot JAR Application to a WAR 将 jar 文件转换为 war 文件,然后简单地部署到 Azure WebApp 上。

您的情况与 SO 线程 Spring Boot War deployed to Tomcat 不同。

【讨论】:

以上是关于无法将 Spring Boot 应用程序部署到 Azure的主要内容,如果未能解决你的问题,请参考以下文章

尝试运行 Spring Boot 应用程序时无法部署到 docker

Spring Boot App 部署到 Weblogic 12c 并且无法启动

当我将 Spring Boot 应用程序部署到 AWS Elastic Beanstalk 并且无法从本地 Spring Boot 连接到 RDS 时出现 502 错误网关

关于如何将我的spring boot web应用部署到tomcat8的一个问题

无法在外部 tomcat 上部署 Spring Boot 应用程序

如何将 Spring Boot 应用程序战争部署到 AWS Elastic Beanstalk?