前言
记录第一次在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 测试
成功访问。
本文结束。