2017-05-31 61 views
0

我有一個設置在spring-boot項目中的地方。通過Spring Boot獲得一個帶有Spring Boot的EBS 502運行單實例,端口已經打開

我編輯了部署腳本來上傳JAR文件,而不是整個源文件。

當我進入EBS日誌時,可以看到我的服務器正在運行。

我已經設置了SERVER_PORT,我可以從Tomcat是否在端口5000

奇怪的事情是運行,甚至打到EC2實例的公共IP EBS的日誌中看到是給我一個502

你們能幫我從檢查清單中抽出更多的東西嗎?

+0

您是否檢查過服務器是否可以訪問服務。你是否收到502錯誤的應用程序日誌? –

+0

令人驚訝的是,502狀態並不總是來自服務器。有時它來自代理(甚至某些路由器),當它出錯或無法正確解釋答案時。在你的情況下,我懷疑502真的來自春季啓動應用程序,因爲嵌入式tomcat在這種情況下不作爲網關(因此502並不完全合法)。所以,是的,在您的應用程序中啓用訪問日誌,並查看您是否可以在日誌中找到您的請求。我還建議嘗試從另一個網絡(例如家中)排除行爲不當的代理。 – Seva

+0

我假設我們正在談論普通的EC2實例,而不是Elastic Beanstalk。而且你沒有在你的web應用程序前配置nginx或類似的東西。這是對的嗎?對不起,如果這些是愚蠢的問題。剛剛502將是一個春季啓動應用程序非常奇怪的迴應。所以,我想確保我們不會錯過一些重要的東西,你可能已經忘記了。 – Seva

回答

0

是的,聽起來像Elastic Beanstalk給我。所以,下面我會假設它是。

我沒有配置EC2實例,並直接擊中端口80 EC2實例給了我502

這意味着你必須在你的服務器的前面nginx的(或類似)。這是nginx與502響應,而不是你的應用程序。

端口5000和8080最終超時。

這實際上是502響應的原因--nginx嘗試將請求傳遞到您的應用程序,但超時然後用「502錯誤網關」響應。

Elastic Beanstalk在EC2實例內的Docker容器中運行您的應用程序。然後使用nginx(在實際的EC2實例上運行並充當反向代理)使您的應用可以在EC2實例之外訪問(例如,您的負載均衡器可見)。恐怕這種設置的內部工作有些複雜,不適合答案。但簡而言之,您必須首先檢查5000是否是nginx將用於查找您的應用程序的正確端口。請注意,「Beanstalk支持的平臺」可能會有所不同,例如Go平臺的版本爲3000(如果我的記憶是正確的)。其次,確保這個端口暴露在您的docker文件中。第三,確保你的spring啓動應用程序在該端口上偵聽。

這似乎是供你參考的好短的文章:https://pragmaticintegrator.wordpress.com/2016/07/12/run-your-spring-boot-application-on-aws-using-elastic-beanstalk/

和好,在最壞的情況下,你可以再嘗試它打包爲一個戰爭,而不是使用和青苗的「與Java雄貓」平臺。使用起來更簡單一些,因爲您不需要擔心端口。

+0

我很笨。該應用程序之前運行,但是當我重建環境以從EBS刪除RDS依賴項時,它啓動時遇到問題。 – dzjin

+0

我不認爲你是愚蠢的。我花了相當多的時間學習EBS的內部工作。我可以說它配置得非常好。它對我來說非常有用,而它只是一個簡單的網絡應用程序。但是我自己已經停止使用EBS了,原因是配置的任何嚴重變化(以適應不斷變化的需求和要求)很快變得過於複雜。那麼,您是否設法修復數據庫連接? EBS包括自己的RDS支持,但您應該可以輕鬆地連接到EBS之外的RDS。它不會被EBS管理。 – Seva