前言
記錄第一次在AWS EC2雲上部署springboot web服務。
在windows上開發springboot項目,直接通過windows將項目jar包部署到AWS EC2上,部署運行,並成功訪問。
1. 在windows10上開發springboot項目
1.1 項目開發
本spring boot demo用於測試,一切從簡,開發工具IDEA:
項目目錄如圖:
pom文件依賴:
1 <packaging>jar</packaging> 2 <parent> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-parent</artifactId> 5 <version>2.1.0.RELEASE</version> 6 </parent> 7 8 <dependencies> 9 <dependency> 10 <groupId>org.springframework.boot</groupId> 11 <artifactId>spring-boot-starter-web</artifactId> 12 <version>2.1.0.RELEASE</version> 13 </dependency> 14 <dependency> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter</artifactId> 17 <version>2.1.0.RELEASE</version> 18 </dependency> 19 </dependencies>
啟動類:
1 package cn.wqz.aws.web; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 6 @SpringBootApplication 7 public class Application { 8 public static void main(String[] args) { 9 SpringApplication.run(Application.class, args); 10 } 11 }
Controller:
1 package cn.wqz.aws.web.controller; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.ResponseBody; 6 7 @Controller 8 public class IndexController { 9 10 @RequestMapping("index") 11 @ResponseBody 12 String index(){ 13 return "Hello, this is a test of EC2 spring boot web server!"; 14 } 15 }
1.2 打包測試
spring boot提供了專用的項目打包插件,pom中加入以下配置:
1 <!-- 用於打包 --> 2 <build> 3 <plugins> 4 <plugin> 5 <groupId>org.springframework.boot</groupId> 6 <artifactId>spring-boot-maven-plugin</artifactId> 7 </plugin> 8 </plugins> 9 </build>
依次執行clean、package
成功打包的控制台輸出,輸出jar文件在target中:
我這里對jar包改了名字:
測試運行:
java -jar .\ec2_web_test.jar
成功訪問:
2. 使用 PuTTY 從 Windows 連接到 AWS Linux 實例(摘自亞馬遜官方文檔)
啟動您的實例之后,您可以連接到該實例,然后像使用您面前的計算機一樣來使用它。
以下說明介紹如何使用 PuTTY (適用於 Windows 的免費 SSH 客戶端) 連接到您的實例。如果您在嘗試連接到您的實例時收到錯誤消息,請參閱排查實例的連接問題。
先決條件
使用 PuTTY 連接到您的 Linux 實例之前,請先完成以下先決條件。
- 驗證該實例是否就緒
-
啟動實例后,需要幾分鍾准備好實例,以便您能連接到實例。檢查您的實例是否通過了狀態檢查。您可以在實例頁面的狀態檢查列中查看此信息。
- 驗證有關連接到您的實例的常規先決條件
-
有關更多信息,請參閱 連接到您的實例的常規先決條件。
- 在本地計算機上安裝 PuTTY
-
從 PuTTY 下載頁面下載 PuTTY 並安裝。如果您安裝的是舊版本的 PuTTY,建議您下載最新版本。確保安裝整個套件。
- 使用 PuTTYgen 轉換私有密鑰
-
找到您在啟動實例時指定的密鑰對的私有密鑰(.pem 文件)。將 .pem 文件轉換為 .ppk 文件以用於 PuTTY。有關更多信息,請按照下一節中的步驟操作。
使用 PuTTYgen 轉換私有密鑰
PuTTY 自身並不支持由 SSH 密鑰的生成的私有密鑰格式 (.pem)。PuTTY 提供一個名為 PuTTYgen 的工具,此工具可以將密鑰轉換為所需的 PuTTY 格式。您必須如下所示將私有密鑰(.pem 文件)轉換為此格式(.ppk 文件),以便使用 PuTTY 連接到您的實例。
轉換您的私有密鑰
-
從 Start (開始) 菜單中,依次選擇 All Programs (所有程序)、PuTTY、PuTTYgen。
-
在 Type of key to generate 下,選擇 RSA。如果您使用的是舊版本的 PuTTYgen,請選擇 SSH-2 RSA。
-
選擇 Load。默認情況下,PuTTYgen 僅顯示擴展名為
.ppk
的文件。要找到您的.pem
文件,請選擇顯示所有類型的文件的選項。 -
選擇在啟動實例時指定的密鑰對的
.pem
文件,然后選擇 Open (打開)。PuTTYgen 會顯示一個通知,指示已成功導入.pem
文件。選擇 OK。 -
要以 PuTTY 可使用的格式保存密鑰,請選擇保存私有密鑰。PuTTYgen 將顯示有關保存沒有密碼的密鑰的警告。選擇是。
注意私有密鑰上的密碼提供額外一層保護。即使發現了您的私有密鑰,也不能在沒有密碼的情況下使用該密鑰。使用密碼的缺點是自動化更難實現,因為需要人工干預以登錄到實例或將文件復制到實例中。
-
為密鑰指定您用於密鑰對的相同名稱(例如
my-key-pair
)並選擇 Save (保存)。PuTTY 會自動添加.ppk
文件擴展名。
您的私有密鑰格式現在是正確的 PuTTY 使用格式了。您現在可以使用 PuTTY 的 SSH 客戶端連接到實例。
連接到 Linux 實例
通過以下過程使用 PuTTY 連接到您的 Linux 實例。您需要使用為私有密鑰創建的 .ppk
文件。有關更多信息,請參閱上一個部分中的使用 PuTTYgen 轉換私有密鑰。如果您在嘗試連接到您的實例時收到錯誤消息,請參閱排查實例的連接問題。
使用 PuTTY 連接到您的實例
-
啟動 PuTTY(在開始菜單中,選擇所有程序 > PuTTY > PuTTY)。
-
在 Category 窗格中,選擇 Session 並填寫以下字段:
-
在主機名框中,執行以下操作之一:
-
(公有 DNS)要使用您實例的公有 DNS 進行連接,請輸入
user_name
@public_dns_name
。 -
(IPv6) 或者,如果您的實例具有 IPv6 地址,要使用實例的 IPv6 地址進行連接,請輸入
user_name
@ipv6_address
。
有關如何獲取實例的公有 DNS 名稱或 IPv6 地址的信息,請參閱獲取有關您的實例的信息。
對於
user_name
,確保為您的 AMI 指定相應的用戶名。例如:-
對於 Amazon Linux 2 或 Amazon Linux AMI,用戶名稱是
ec2-user
。 -
對於 CentOS AMI,用戶名稱是
centos
。 -
對於 Debian AMI,用戶名稱是
admin
或root
。 -
對於 Fedora AMI,用戶名為
ec2-user
或fedora
。 -
對於 RHEL AMI,用戶名稱是
ec2-user
或root
。 -
對於 SUSE AMI,用戶名稱是
ec2-user
或root
。 -
對於 Ubuntu AMI,用戶名稱是
ubuntu
。 -
另外,如果
ec2-user
和root
無法使用,請與 AMI 供應商核實。
-
-
確保端口值為 22。
-
在連接類型下,選擇 SSH。
-
-
(可選) 您可以配置 PuTTY 以定期自動發送“保持連接”數據以將會話保持活動狀態。要避免由於會話處於不活動狀態而與實例斷開連接,這是非常有用的。在 Category 窗格中,選擇 Connection,然后在 Seconds between keepalives 字段中輸入所需的間隔。例如,如果您的會話在處於不活動狀態 10 分鍾后斷開連接,請輸入 180 以將 PuTTY 配置為每隔 3 分鍾發送一次保持活動數據。
-
在 Category 窗格中,展開 Connection,再展開 SSH,然后選擇 Auth。完成以下操作:
-
選擇 Browse。
-
選擇為密鑰對生成的
.ppk
文件,然后選擇打開。 -
(可選) 如果打算稍后重新啟動此會話,則可以保存此會話信息以便日后使用。在類別下面,選擇會話,在保存的會話中輸入會話的名稱,然后選擇保存。
-
選擇 Open。
-
-
如果這是第一次連接到該實例,PuTTY 將顯示安全警報對話框,以詢問您是否信任要連接到的主機。
-
(可選) 驗證安全警報對話框中的指紋是否與您之前在 (可選)獲取實例指紋 中獲得的指紋相匹配。如果這些指紋不匹配,則表示有人可能在試圖實施“中間人”攻擊。如果匹配,請繼續到下一步。
-
選擇是。將打開一個窗口,並且您連接到實例。
注意如果您在將私有密鑰轉換成 PuTTY 格式時指定了密碼,當您登錄到實例時,您必須提供該密碼。
-
如果您在嘗試連接到您的實例時收到錯誤消息,請參閱排查實例的連接問題。
3. 使用 WinSCP 將JAR傳輸到您的 Linux 實例(摘自亞馬遜官方文檔)
WinSCP 是適用於 Windows 的基於 GUI 的文件管理器,您可以通過它來使用 SFTP、SCP、FTP 和 FTPS 協議將文件上傳並傳輸到遠程計算機。通過 WinSCP,您可以將 Windows 計算機中的文件拖放到 Linux 實例或同步這兩個系統之間的所有目錄結構。
要使用 WinSCP,您需要使用在使用 PuTTYgen 轉換私有密鑰中生成的私有密鑰。您還需要使用 Linux 實例的公有 DNS 地址。
-
從 http://winscp.net/eng/download.php 上下載並安裝 WinSCP。對於大多數用戶而言,采用默認安裝選項就可以了。
-
啟動 WinSCP。
-
在 WinSCP 登錄屏幕中,對於 Host name,請輸入實例的公有 DNS 主機名稱或公有 IPv4 地址。
(僅限 IPv6) 要使用實例的 IPv6 地址登錄,請輸入實例的 IPv6 地址。
-
對於用戶名,請輸入默認的 AMI 用戶名。
-
對於 Amazon Linux 2 或 Amazon Linux AMI,用戶名稱是
ec2-user
。 -
對於 CentOS AMI,用戶名稱是
centos
。 -
對於 Debian AMI,用戶名稱是
admin
或root
。 -
對於 Fedora AMI,用戶名為
ec2-user
或fedora
。 -
對於 RHEL AMI,用戶名稱是
ec2-user
或root
。 -
對於 SUSE AMI,用戶名稱是
ec2-user
或root
。 -
對於 Ubuntu AMI,用戶名稱是
ubuntu
。 -
另外,如果
ec2-user
和root
無法使用,請與 AMI 供應商核實。
-
-
為您的實例指定私有密鑰。對於私有密鑰,請輸入私有密鑰的路徑,或選擇 ... 按鈕以瀏覽文件。要打開高級站點設置,對於較高版本的 WinSCP,請選擇高級。要查找私有密鑰文件設置,請在 SSH 下面選擇身份驗證。
以下是 WinSCP 版本 5.9.4 中的屏幕截圖:
WinSCP 需要 PuTTY 私有密鑰文件 (
.ppk
)。您可以使用 PuTTYgen 將.pem
安全密鑰文件轉換成.ppk
格式。有關更多信息,請參閱使用 PuTTYgen 轉換私有密鑰。 -
(可選)在左側面板中,選擇目錄。對於遠程目錄,請輸入要將文件添加到的目錄的路徑。要打開高級站點設置,對於較高版本的 WinSCP,請選擇高級。要查找遠程目錄設置,請在環境下面選擇目錄。
-
選擇登錄。要將主機指紋添加到主機緩存中,請選擇是。
-
建立連接后,在連接窗口中,您的 Linux 實例顯示在右側,本地計算機顯示在左側。您可以直接將文件從本地計算機拖放到遠程文件系統。有關 WinSCP 的更多信息,請參閱 http://winscp.net/eng/docs/start 中的項目文檔。
9 .將 jar 文件拖至linux中:
4. 配置運行與測試
4.1 配置
解決一些問題:
問題1:JDK版本問題
windows開發springboot使用的是JDK8版本,檢查服務器上的JDK,不符合的予以卸載與更改,注意更改profile配置文件。
問題2:EC2端口問題
在AWS控制台,進入目標實例安全組,編輯入站規則:
自行調整配置(自定義出可選擇任意流量):
4.2 運行
java -jar ec2_web_test.jar
4.3 測試
成功訪問。
本文結束。