部署到微软Azure

Microsoft Azure是在云中运行JHipster应用程序的绝佳解决方案。

  • 最简单的方法是使用 Azure App Service: 是一个JHipster子生成器可以自动将单体应用程序部署到该服务。
  • 如果您使用的是Spring Boot微服务,则可以使用JHipster子生成器将应用程序部署到 Azure Spring Cloud.
  • 与任何Docker和Kubernetes云提供商一样,您可以使用JHipster Docker和Kubernetes支持将Docker映像部署到Microsoft Azure. 参考我们的 Docker Compose documentation 和我们的 Kubernetes documentation 了解有关这些选项的更多信息。

Microsoft Azure

  1. 安装”az CLI”
  2. 目前的局限性
  3. 支持的数据库
  4. 储存密钥
  5. 将Spring Boot可执行Jar文件部署到Azure App Service
  6. 将Spring Boot微服务部署到Azure Spring Cloud

安装 “az CLI”

您可以使用 Web-based Azure portal 或使用 the Azure command-line interface ,也称为”az CLI”。

与JHipster一样,我们总是自动进行所有操作,必须安装此”az CLI”才能与以下任何选项一起使用。

要在您的计算机上安装az CLI, 遵循“安装Azure CLI”官方文档.

目前的局限性

这些限制可以在将来解决,如果您有兴趣提供帮助,请毫不犹豫地为该项目做出贡献:

  • 子生成器不会自动配置外部服务,例如数据库(有关支持的数据库,请参阅下一节),Elasticsearch,Kafka或Redis。 因此,您将需要手动创建和配置它们。
  • Azure仅提供Maven插件,因此JHipster子生成器只能与Maven一起使用。

支持的数据库

SQL数据库

Azure提供了所有类型的数据库,例如MySQL / PostgreSQL / Oracle / MS SQL Server。 在Azure中,默认情况下将保护它们的安全,因此,如果要从JHipster应用程序访问它们,则需要打开其防火墙。

例如,在MySQL上,您将需要转到“连接安全性(Connection security)”,然后选择“允许访问Azure服务(Allow access to Azure services)”。 您还应该单击“添加客户端IP(Add client IP)”按钮,以将当前IP自动添加到防火墙规则中:

MySQL firewall

对MySQL用户的警告: 默认情况下,JHipster生成的MySQL连接字符串在spring.datasource.url属性(通常在您的src/main/resources/config/application-prod.yml文件中)中使用useSSL=false标志。 这是因为,默认情况下,JHipster使用本地数据库。 在Azure上,默认情况下,使用SSL证书保护数据库的安全,因此您需要将此标志置于true

例如:

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://jhipster-database.mysql.database.azure.com:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=true&useLegacyDatetimeCode=false&serverTimezone=UTC
    username: [email protected]
    password: XXXXXX

NoSQL数据库

您可以安装NoSQL数据库,例如使用the Azure Marketplace 安装Cassandra或使用CosmosDB MongoDB。

CosmosDB是Microsoft的全球分布式托管数据库。 它在API级别上与Cassandra和MongoDB兼容,因此可以与使用这些技术生成的JHipster应用程序一起使用。

储存密钥

您应该将几个“密钥”安全地存储在JHipster中,至少要存储数据库密码(请参见上一节)和安全令牌(请参阅我们的安全文档 了解更多的信息)。

Azure中有许多选项,可用于将这些数据存储在比application-prod.yml文件更好的位置。 这是最常见的:

  • Spring Cloud 配置服务器, 如JHipster Registry 或由管理的配置服务器 Azure Spring Cloud 。这是最好的选择,因为您可以标记和回滚配置,但是它需要专用的服务器。
  • 环境变量。 这是最简单的选项,但设置起来有点烦人,而且安全性较差。
  • Azure Key Vault: 这是最安全的选项,但是它特定于Azure。有一个专用的 Azure Spring Boot Starter for Key Vault ,这是我们建议使用Azure Key Vault配置JHipster的方法。

将Spring Boot可执行Jar文件部署到Azure App Service

Deploying to Azure App Service

有关将JHipster应用程序部署到Azure App Service的5分钟视频

生成Azure App Service的配置

Azure App Service 是一种托管的PaaS:在Azure上,如果要部署单体应用,这是我们推荐的选项。

有两种方法可以将Spring Boot应用程序部署到Azure App Service:

  • 将其部署为Docker映像:这使您可以在Docker映像中交付任何内容,这对于某些特定的用例可能是好的,但是在大多数情况下,这是最复杂且安全性较低的选项。
  • 将其部署为可执行的Jar文件:这是最简单,更安全的选择,因为Microsoft将支持并自动更新OS和JVM。

我们建议使用可执行的Jar文件,但是如果您想使用Docker映像,请遵循本页的最后一节“部署到Docker和Kubernetes”。

要将JHipster应用程序作为可执行Jar文件部署到Azure App Service,有一个特定的azure-app-service子生成器:

jhipster azure-app-service

该子生成器可以与以下标识一起使用:

  • --skip-build 跳过构建应用程序
  • --skip-deploy 跳过部署到Azure App Service
  • --skip-insights 跳过Azure Application Insights的配置

然后将需要回答以下问题。 您可能需要访问 Azure Portal 回答他们并检查配置的资源。

  • Azure resource group name(Azure资源组名称): 这是将在其中部署应用程序的Azure资源组的名称。 我们建议使用命令 az configure --defaults group=<resource group name>设置默认的Azure资源组。
  • Azure App Service plan name(Azure应用服务计划名称): 您的Azure应用服务将在Azure服务计划 中运行。如果服务计划已经存在,则JHipster将使用它,否则它将创建一个新的服务计划。 默认情况下,JHipster在“ B1”层中创建一个基于Linux的服务计划(“基本”计划,免费使用30天)。 如果您需要有关服务计划层的更多信息,请查看相关文档
  • Azure Application Insights instance name(Azure Application Insights实例名称): JHipster可以自动配置一个 Azure Application Insights 实例 ,因此将监视部署的应用程序。 这使用 Azure Spring Boot Starter for Application Insights 并在application-azure.yml 配置文件中配置。
  • Azure App Service application name(Azure App Service应用程序名称): 您的Azure App Service实例的名称。
  • Which type of deployment do you want(您想要哪种类型的部署) ? 您可以使用Maven在本地构建和部署应用程序,也可以使用GitHub Actions为您自动构建和部署应用程序。

“azure” Spring Boot配置文件

该子生成器创建一个azure Spring Boot配置文件并对其进行配置。

  • 在您的Azure App Service实例中,使用环境变量SPRING_PROFILES_ACTIVE会自动启用prodazureSpring配置文件。
  • 为此配置文件创建了一个新的Spring Boot配置,src/main/resources/config/application-azure.yml。或者在JHipster配置文件的详细信息,查阅相关文档

使用GitHub Actions进行部署

建议使用GitHub Actions进行部署,因为它比在本地计算机上更容易并且可能更快。

  • 配置存储在 .github/workflows/azure-app-service.yml.
  • 默认情况下,每次在main分支上有新的push事件时,都会部署该应用程序。
  • 为了与本地部署保持一致,此部署机制使用了azure-webappMaven插件。有另一种部署到Azure App Service的方法,该方法不需要Maven。如果您对此感兴趣,请查找azure/webapps-deploy GitHub Action, 并按照相应示例 this blog post 进行操作。

为了被授权将应用程序部署到您的Azure App Service实例,GitHub需要有权访问名为AZURE_CREDENTIALS的安全令牌。 在子生成器执行结束时,它以以下形式显示了命令行:

az ad sp create-for-rbac --name http://<your-security-role> --role contributor --scopes /subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group-name> --sdk-auth
  • <your-security-role> 是您要创建的安全角色的名称(默认情况下,我们使用应用程序名称)。
  • <your-subscription-id> 是您使用的Azure订阅的ID。可以在订阅屏幕顶部的 Azure Portal 找到。
  • <your-resource-group-name> 是您的资源组的名称。

执行该命令以获取安全令牌。 然后,在应用程序所在的GitHub项目中,转到Settings > Secrets,然后创建一个名为AZURE_CREDENTIALS的新密钥,您需要在其中粘贴安全令牌。

将Spring Boot微服务部署到Azure Spring Cloud

Azure Spring Cloud 是Spring Boot应用程序的托管服务. 它可以承载任何类型的JHipster应用程序,包括单体,但是它特别适合于承载遵循标准JHipster微服务架构 的JHipster微服务和JHipster网关。

Azure Spring Cloud子生成器的局限性

Azure Spring Cloud提供基于Netflix Eureka的托管发现服务器,因此该服务器只能与服务发现设置为noJHipster Registry的JHipster应用程序一起使用:

  • 如果应用程序中未配置任何服务发现,则下面描述的子生成器将自动添加Netflix Eureka。 这是使微服务在Azure Spring Cloud上运行的最简单方法。
  • JHipster Registry实际上是Netflix Eureka服务器,因此它与Azure Spring Cloud完全兼容。 JHipster为Eureka提供了许多自定义配置:由于您应由Azure Spring Cloud管理,因此需要在application.yml文件中删除Spring Boot属性eureka.instance.instanceId。 其他eureka属性可与Azure Spring Cloud配合使用,但是可以将其删除以使用Azure的默认值。 使用此配置时,您将受益于JHipster的某些高级功能,例如分布式缓存配置,这些功能通常依赖于JHipster Registry。

因此,使用Hashicorp Consul作为服务发现机制的应用程序无法正常运行,因为Azure Spring Cloud不支持此功能。

生成Azure Spring Cloud的配置

必须将特定的Azure Spring Cloud扩展添加到”az CLI”:

az extension add --name spring-cloud

安装此扩展程序后,您将能够运行az spring-cloud命令,并使用JHipster自动执行Azure Spring Cloud配置。

要在Azure Spring Cloud上部署JHipster应用程序,有一个特定的azure-spring-cloud子生成器:

jhipster azure-spring-cloud

该子生成器可以与以下标识一起使用:

  • --skip-build 跳过构建应用程序
  • --skip-deploy 跳过部署到Azure Spring Cloud

然后将需要回答以下问题。 您可能需要访问 Azure Portal 回答他们并检查配置的资源。

  • Azure resource group name(Azure资源组名称): 这是将在其中部署应用程序的Azure资源组的名称。 我们建议使用命令 az configure --defaults group=<resource group name>设置默认的Azure资源组。
  • Azure Spring Cloud service name (the name of your cluster): 这是您的Azure Spring Cloud群集实例的名称。 我们建议使用命令 az configure --defaults spring-cloud=<resource group name>设置默认的Azure Spring Cloud服务名称。
  • Azure Spring Cloud application name(Azure Spring Cloud应用程序名称): 您要在Azure Spring Cloud上部署的Spring Boot应用程序的名称。
  • Which type of deployment do you want(您想要哪种类型的部署) ? 您可以使用Maven在本地构建和部署应用程序,也可以使用GitHub Actions为您自动构建和部署应用程序。

“azure” Maven和Spring Boot配置文件

如果您已了解上面有关azure-app-service子生成器的文档,则azure-spring-cloud子生成器的工作方式会有所不同,因为它配置了:

  • 一个名为azureSpring Boot的新配置文件,配置在src/main/resources/config/application-azure.yml
  • 一个新的Maven配置文件,也称为azure。 该Maven配置文件将在运行时自动强制使用prodazure Spring Boot配置文件,因此无需在Azure Spring Cloud级别进行配置(这是Azure App Service的主要区别, 被配置为环境变量)。

有关在JHipster配置文件的详细信息, 查阅配置文件.

Azure Spring Cloud特定功能

如以上部分所述,azure-spring-cloud子生成器添加了特定的azure Maven配置文件。 此配置文件在构建时添加了一些库,以便正在运行的应用程序可以从Azure Spring Cloud的特定功能中受益:

  • 它将应用程序连接到托管的Spring Cloud Service Discovery服务器(如上节Azure Spring Cloud子生成器的限制中所述)。
  • 它使用托管的Spring Cloud Config Server配置应用程序。
  • 它将分布式跟踪数据发送到Azure Monitor。

使用GitHub Actions进行部署

建议使用GitHub Actions进行部署,因为它比在本地计算机上更容易并且可能更快。

  • 配置存储在 .github/workflows/azure-spring-cloud.yml
  • 默认情况下,每次在main分支上有新的push事件时,都会部署该应用程序。
  • 此部署机制直接使用“az CLI”部署到Azure Spring Cloud群集。

为了获得授权将应用程序部署到您的Azure Spring Cloud群集中,GitHub需要有权访问名为AZURE_CREDENTIALS的安全令牌。 可以使用以下命令行生成此令牌:

az ad sp create-for-rbac --name http://<your-security-role> --role contributor --scopes /subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group-name> --sdk-auth
  • <your-security-role> 是您要创建的安全角色的名称(默认情况下,我们使用应用程序名称)。
  • <your-subscription-id> 是您正在使用的Azure订阅的ID。 可以在Azure门户 的订阅屏幕顶部找到它。
  • <your-resource-group-name> 是您的资源组的名称。

执行该命令以获取安全令牌。 然后,在应用程序所在的GitHub项目中,转到Settings > Secrets,然后创建一个名为AZURE_CREDENTIALS的新密钥,您需要在其中粘贴安全令牌。