在 Linux 上部署 Java 应用程序

作为一名云工程师,您将在云中不同类型的服务器上部署各种应用程序。了解如何在 Amazon Lightsail Linux VPS 上部署 SpringBoot Java 应用程序。
发布时间:2023 年 7 月 10 日
Java
SpringBoot
Lightsail
IT 专家
EC2
S3
教程
亚马逊云科技
Olawale Olaleye
亚马逊云科技使用经验
200 - 中级
完成所需时间
45 分钟
所需费用

亚马逊云科技免费套餐配额或 1.01 美元

前提条件

注册 / 登录 亚马逊云科技账户

亚马逊云科技账户。如果您还没有账户,请参见设置环境教程。若要快速了解如何创建账户,请按照创建亚马逊云科技账户中的说明进行操作。

AWS 凭证:按照访问安全凭证中的说明获取您的 AWS 凭证。

Git 客户端:按照说明安装适用于您操作系统的 Git

Java 已在本地安装。

Maven 已在本地安装。

Java 已在本地安装。

Maven 已在本地安装。

示例代码
上次更新时间
2023 年 5 月 31 日

上一篇教程演示了如何创建 Windows Server VPS 和部署 ASP.NET Core 应用程序。有一项共同且类似的任务,就是在 Linux 服务器上部署 Java 应用程序。虽然 Express.js 等 JavaScript 框架在云端应用程序中越来越受欢迎,但 SpringBoot 等 Java 框架在企业环境中也同样受欢迎。

本教程将演示如何使用 Amazon Lightsail 在 Linux 虚拟专用服务器 (VPS) 上部署 Java 应用程序。如果您对 Amazon Lightsail 还不熟悉,请查看上一篇教程中的概述。我们将使用上一个 DevOps 场景,即使用 CI/CD 编译软件并将其存储在 S3 存储桶中。您可以从 Amazon S3 存储桶或对象存储中复制软件或用于软件开发的构件,以便在 Linux VPS 上进行部署。

学习内容

  • 如何在 Amazon Lightsail 上部署和配置 Linux 服务器。
  • 使用启动脚本或用户数据配置和部署 Java SpringBoot 应用程序。
  • 配置具有静态 IP 的 VPS 网络,并打开用于 Java 应用程序的端口。

模块 1:克隆并编译应用程序

概述

本教程中使用的 Java 应用程序来自 GitHub。您将克隆存储库(如果您已在上一篇教程中完成此操作,可跳过这一步骤)。该项目将使用 Maven 编译应用程序并将其打包为 .jar 文件。

执行步骤

本教程中使用的应用程序来自 GitHub。克隆应用程序(如果您已在上一篇教程中完成此操作,可跳过这一步骤)。

git clone https://github.com/build-on-aws/practical-cloud-guide-code

使用 Maven 编译应用程序并将其打包为 .jar 文件。

cd ./practical-cloud-guide-code/run-to-build/linux-app-deploy/
mvn package

Maven 将编译代码,创建 target 目录以及 HelloBuilder.jar 文件。

模块 2:创建 S3 存储桶并上传文件

概述

在 DevOps 中,应用程序通常使用持续集成 (CI) 软件进行构建。代码由开发人员推送到 CI,然后在其中进行构建、测试并发布到云存储。

学习目标

在本模块中,所用软件来自 GitHub 存储库。您将克隆存储库,然后将文件复制到本地驱动器。下一步是使用 Amazon Lightsail 创建一个用于存储文件的 S3 存储桶。这些文件可以由使用 Amazon Lightsail 部署的 Linux 服务器进行访问。

执行说明

如果您已完成使用 Amazon Lightsail 在 Windows Server 上部署 ASP.NET Core 应用程序的教程,则步骤 1 和 2 可跳过。

步骤 1:打开亚马逊云科技管理控制台并选择 Lightsail

步骤 2:创建 S3 存储桶

选择 Storage(存储)。

在 Create a new bucket(创建新存储桶)页面上,选择 5 GB 存储包,并为存储桶指定一个唯一的名称(如 my-practical-cloud-guide)。请注意,S3 存储桶名称具有全局唯一性,因此请确保指定的名称可用。在本教程的其余部分,请将您看到的 S3 存储桶名称 <my>-practical-cloud-guide 替换为您自己的存储桶名称。点击 Create bucket(创建存储桶)。

您将看到 <my>-practical-cloud-guide 存储桶的菜单页面,选择 Objects(对象)。

Object list(对象列表)会显示存储桶中的对象。点击 Upload(上传),将应用程序和服务文件放入该存储桶。

选择 File(文件)。

从 ./practical-cloud-guide-code/run-to-build /linux-app-deploy/target/ 中选择 HelloBuilder.jar,然后点击 Open(打开)。

将 hellobuilder.service 文件上传到您的 S3 存储桶。该文件将应用程序配置为服务,并会在重启后再次启动应用程序。选择该文件,然后点击 Open(打开)。

这些文件将添加到 Object list(对象列表)中。

模块 3:部署 Amazon Linux 服务器

概述

在本模块中,您将创建 Amazon Linux 服务器,安装 Java,并使用启动实例时运行的脚本部署 SpringBoot Java 应用程序。您无需登录 Linux 服务器,即可通过 Lightsail 控制台完成配置和部署。此外,您还将使用 Lightsail 控制台为应用程序打开一个端口,并将静态 IP 地址附加到服务器。

学习目标

您将使用 Amazon Lightsail 控制台实例化 Amazon Linux VPS,并在创建 Linux VPS 时使用用户数据选项对其进行配置。

执行说明

步骤 1:部署 VPS Amazon Linux 服务器

点击 Create instance(创建实例)。

步骤 2:选择实例镜像

  1. 选择 Linux/Unix 平台。
  2. 对于蓝图,选择 OS Only(仅限操作系统)。
  3. 选择 Amazon Linux 2。

步骤 3:使用 shell 脚本配置 VPS

选择 Add launch script(添加启动脚本)。

通过添加在实例启动时运行的 shell 脚本,在启动时配置实例。该脚本将导出您的访问密钥、密钥和亚马逊云科技区域。这些临时凭证仅在启动时可用。该脚本需要使用您的凭证从 S3 存储桶复制 SpringBoot 应用程序 HelloBuilder.jar。请注意,Amazon CLI 命令可以在该脚本中使用。该脚本复制 .jar 文件后,会安装 Java,将应用程序配置为服务,并启动应用程序。

若要将应用程序作为服务安装,请使用 systemd,这是一个 Linux 系统和服务管理器。使用服务文件配置服务。

[Unit]
Description=Manage Java service

[Service]
WorkingDirectory=/opt/app
ExecStart=/bin/java -Xms128m -Xmx256m -jar HelloBuilder.jar
User=appadmin
Type=simple
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

复制脚本,添加您的凭证、亚马逊云科技区域和 S3 存储桶的名称。

#! /bin/bash
export AWS_ACCESS_KEY_ID=<your_access_key>
export AWS_SECRET_ACCESS_KEY=<your_secret_key>
export AWS_REGION=<your_aws_region>

# create directory for the app
mkdir /opt/app

# download application and system service file
aws s3 cp s3://my-practical-cloud-guide/hellobuilder.service /etc/systemd/system/hellobuilder.service
aws s3 cp s3://my-practical-cloud-guide/HelloBuilder.jar /opt/app/HelloBuilder.jar

# install java
sudo yum -y install java-17-amazon-corretto-headless

# add application admin group and user
sudo groupadd -r appgrp
sudo useradd -r -s /bin/false -g appgrp appadmin

sudo chown -R appgrp:appadmin /opt/app

# load the service file and start the service
sudo systemctl daemon-reload
sudo systemctl start hellobuilder.service

# restart service on boot
sudo systemctl enable hellobuilder

选择您的实例规格包。最小规格的实例适用于本教程,但更大规格的实例可提供更好的性能。

为您的实例命名,如 Amazon_Linux_2_Java。点击 Create instance(创建实例),实例化 VPS。

模块 4:配置网络

Lightsail Linux VPS 包括私有 IP 地址和公有 IP 地址。但是,默认情况下,只打开 port 22 和 port 80。Java 应用程序正在运行,但只能通过端口 8080 进行访问。在本模块中,您将配置网络以打开 port 8080 并添加一个静态 IP 地址。

步骤 1:打开端口 8080

点击 Linux VPS 的名称,打开该实例的菜单。

选择 Networking(网络)以打开网络菜单。

VPC 具有公有 IP 地址和私有 IP 地址,且 IPV Firewall(IPV 防火墙)会打开 port 22 和 port 80。

若要打开端口,请点击 Add rule(添加规则)。

选择 Custom(自定义),然后添加 8080 作为端口号。点击 Create(创建)。

端口 8080 已添加到防火墙。

步骤 2:添加静态 IP 地址

VPS 重新启动时,会为实例分配一个新的公有 IP 地址。您可以分配一个静态 IP 地址,以便应用程序在重新启动后可以通过同一个地址进行访问。

从 Lightsail 主页菜单中,选择 Networking(网络)。

点击 Create static IP(创建静态 IP)。

将静态 IP 地址附加到实例。选择您创建的 VPS。

为静态 IP 地址指定唯一名称。点击 Create(创建)。

打开浏览器,前往使用端口 80 的静态 IP 地址,Java 应用程序会返回一个带有时间消息的页面。

模块 5:清理资源

为了避免产生额外费用,请删除在本教程中创建的 Linux VPS。删除 S3 存储桶是可选操作。可以保留 S3 存储桶,供其他教程使用。

步骤 1:删除 Amazon Linux 服务器

在 Lightsail 菜单中选择 Instances(实例),然后选择三个红点图标。选择 Delete(删除)。

选择 Yes, delete(是的,删除)。

步骤 2:删除 S3 存储桶(可选)

在 Lightsail 菜单上选择 Storage(存储)。点击三个垂直点图标。

选择 Delete(删除)。

选择 Force delete(强制删除),删除文件和 S3 存储桶。

总结

在本教程中,您使用 Lightsail 部署了 Linux VPS。您通过提供脚本下载和安装了 .jar 文件,并提供 Java JDK 运行了 SpringBoot 应用程序,从而配置了实例。在后面的教程中,您将使用用户数据功能,通过启动脚本配置虚拟机或 Amazon Elastic Cloud Compute (EC2) 实例。请注意,您的 AWS 凭证仅在启动时可用,VPS 不会保留这些凭证。

默认情况下,只有端口 22 和 80 会在 VPS 中打开。借助 Lightsail,您可以使用 Web 控制台打开和关闭端口,而无需在服务器上手动配置网络。添加静态 IP 地址也是如此,这样做可以确保无论实例是否重新启动,应用程序都具有固定的 IP 地址。

在 Amazon Lightsail 上部署 VPS(Windows 或 Linux)可以为虚拟私有云 (VPC) 提供资源,包括网络、存储,甚至浏览器中的 RDP 或 SSH 会话,从而减少了基础设施配置工作量。然而,这些教程的关键之处在于云是可编程的。您可以在 VPS 中使用 Powershell 脚本或在用户数据中使用 shell 脚本,来利用其他云资源。例如,从 S3 存储桶下载应用程序。您可以使用云的应用程序编程接口 (API) 构建能够进行测试和复制的基础设施。《实用云指南》的最终目标是指导您如何通过对云进行编程来构建基础设施。

后续操作

下一个教程系列将介绍如何在云中迁移和部署关系数据库。目前,您将继续使用 Amazon Lightsail,但是您不会使用 Web 控制台,而是使用 Amazon CLI 执行数据库部署和迁移。学习如何使用 CLI 是利用代码构建基础设施的第一步。