部署到微軟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: jhipster@jhipster-database
    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的新金鑰,您需要在其中貼上安全令牌。