簡體   English   中英

如何在雲實例中部署 Java 應用程序,從零開始到高級架構?

[英]How to deploy java application in a cloud instance from the scratch to an advanced architecture?

我需要在 Google 雲平台的計算引擎上部署我的 spring-boot 應用程序。 我已經創建了一個實例並通過 SSH 安裝了 Apache 和 Maven。 此外,war 文件已上傳到存儲桶中。 任何人都可以向我提供剩余的命令以在 tomcat 實例或任何其他帶有 linux 的雲平台上部署 war 文件?

謝謝

部署在 google 的計算引擎實例中,與 AWS、Azure 或其他 linux 主機提供商沒有本質區別。

你只需要一個到遠程機器的 ssh 連接並安裝所需的軟件來編譯、構建、壓縮、部署等

我將列出一些從基本(手動)到高級(自動)的方法:

#1 Bash 腳本

  • 解壓並配置git
  • 解壓並配置java
  • 解壓並配置maven
  • 解壓並配置tomcat(如果使用spring-boot則不需要)
  • 配置linux主機開啟8080端口
  • 使用以下步驟在您的遠程雲 Linux 實例中創建一個名為 /devops/pipeline.sh 的腳本

對於戰爭部署:

# get the source code
cd /tmp/folder/3dac58b7
git clone http://github.com/myrepo.git .
# create war
mvn clean package
# move war to deploy tomcat folder
cp target/my_app.war /my/tomcat/webapps
# stop tomcat
bash /my/tomcat/shutdown.sh
# start tomcat
bash /my/tomcat/startup.sh

或者spring-boot啟動

# get the source code
cd /tmp/folder/3dac58b7
git clone http://github.com/myrepo.git .
# create jar
mvn clean package
# kill or stop the application
killall java
# start the application
java $JAVA_OPTS -jar $jar_file_name

  • 推送到 git 后,只需使用 ssh 連接到您的實例並執行

bash /devops/pipeline.sh

改進:參數化存儲庫名稱、分支名稱、mvn 配置文件、數據庫憑據、在每次執行時創建一個 tmp/uuid 文件夾、在部署后刪除 tmp/uuid、使用 pid 優化應用程序的啟動和停止等

#2 碼頭工人

  • 在遠程雲 linux 實例中安裝docker

  • 使用 warspringboot 的所有步驟創建一個 Dockerfile(方法 #1 )並將其存儲在靠近源代碼的地方(我的意思是在你的 git 存儲庫中)

  • 對您的更改執行 git push

  • 使用 ssh 連接到您的遠程雲 linux 實例:

  • 構建您的 docker 鏡像: docker build...

  • 刪除以前的容器並運行新版本:

    docker rm my_app -f docker run -d --name my_app -p 8080:8080 我的容器名稱


在以前的方法中,構建操作是在遠程服務器中執行的。 為此,該服務器需要幾個工具。 在以下方法中,構建在中間服務器中執行,部署在遠程服務器中執行。 這個好一點


#3 本地構建(需要一個額外的實例)

在這種方法中,構建是在開發人員機器上執行的,並將其上傳到某種存儲庫。 我建議你使用 docker,而不僅僅是 war 或 jar 編譯。

為了構建和上傳 docker 鏡像,需要以下 docker 注冊表之一:

  • Docker 簡單注冊表
  • 亞馬遜彈性容器注冊表 (ECR)
  • 碼頭工人樞紐。
  • 港口。
  • JFrog 容器注冊表。
  • Nexus 容器注冊表。
  • 波圖斯
  • Azure 容器注冊表。

選擇一個並將其安裝在新服務器中。 配置您的開發人員機器和遠程服務器以指向您的新 docker 注冊表。

最后的步驟是:

  • 之后在您的開發人員計算機中執行 docker 構建。 這將為您的 java 應用程序創建一個新的 docker 鏡像(tomcat+war 或 springboot jar)
  • 使用類似以下內容將本地圖像上傳到新的 docker registry:
    docker push example.com/test-image
  • 使用 ssh 連接到遠程雲 linux 實例並下載 docker 鏡像
docker pull example.com/test-image
  • 在遠程服務器中,只需使用docker run...

#4 使用持續集成服務器(需要額外的實例)

與 #3 相同,但不在開發人員機器中。 所有步驟都在另一台名為:持續集成服務器的服務器中執行。

#4.1 使用持續集成服務器(需要額外的實例)

  • 在新實例中安裝 Jenkins 或其他持續集成服務器
  • 在 jenkins 中配置插件和其他必需的東西以啟用webhook urlhttps ://jrichardsz.github.io/devops/configure-webhooks-in-github-bitbucket-gitlab
  • 在 jenkins 中創建一個作業來調用方法 #1 的腳本或執行方法 #2 的 docker 命令。 如果可以,方法 3 將是完美的。
  • 配置您的 SCM(github、bitbucket、gitlab 等)以指向 Jenkins 發布的webhook url

當您准備好部署時,只需將代碼推送到您的 scm,jenkins 將收到通知並執行之前創建的作業。 如您所見,無需人工在服務器中部署應用程序(開發人員推送除外)

注意:此時,您可以將方法 #1 和 #2 的腳本遷移到:

這些是更高級和可擴展的方法,用於映射從開始到部署所需的所有命令和配置。

#5 高級(需要系統管理員團隊或額外的人員和知識)

將需要更多實例和技術。

  • 庫伯內斯
  • Ansible的
  • 高可用性/負載均衡器
  • 備份
  • 配置管理
  • 以及更多的自動化

當您的公司/企業需要越來越多的 Web 應用程序、微服務時,這將是必要的。

#6 薩斯

  • 所有以前的方法都可以使用 WORLD CLASS 平台進行簡化,例如:

  • 有彈性的

  • 英雄庫

  • 開班等

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM