在 AWS ec2 实例中部署春季启动战争



我正在尝试在 aws ec2 实例上的 Apache Tomcat/8.5.29 中将 Spring 启动应用程序部署为 war 文件。如果我将其粘贴到本地机器的 tomcat webapps 文件夹中并重新启动本地机器的 tomcat 服务器,则相同的战争文件工作正常,部署的战争文件会自动提取,并且可以在本地访问该应用程序。

我在本地机器和 ec2 实例上使用相同版本的 java"1.8"。

但是当我在 aws 上尝试相同的操作并重新启动 tomcat 时,战争文件未被提取且无法访问。我还检查了服务器上的日志文件,可能有一些错误,但我找到了空日志文件。我正在"var/lib/tomcat"文件夹中部署战争文件。

由于我已经在同一个 aws 的 tomcat 上部署了 angular 5 应用程序的构建,因此它也可以正常工作。

这是我的代码

1.应用.java

@SpringBootApplication
public class ScApplication extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ScApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(ScApplication.class, args);
}
}

2.绒球.xml

http://maven.apache.org/xsd/maven-4.0.0.xsd">4.0.0 通讯学生角 南卡罗来纳州 0.0.1-快照 战争

<name>SC</name>
<description>Student Corner</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-social-facebook</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-social-linkedin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.mobile/spring-mobile-device -->
<dependency>
<groupId>org.springframework.mobile</groupId>
<artifactId>spring-mobile-device</artifactId>
<version>1.1.5.RELEASE</version>
</dependency>    
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

你可能想让春天帮你管理雄猫。

您可以将 Spring boot 构建为可执行 jar 而不是 WAR。然后,您可以使用 Linux 系统 systemd 服务轻松管理您的 Spring 引导应用程序。

此方法将帮助您管理部署生命周期挂钩,如启动服务、停止服务、验证服务,以便仅与一行命令集成。

您不需要处理自己的 shell 脚本。

此外,您可以通过安装 cloudwatch 代理将 spring 启动日志获取到云监视日志中。

第 1 步:

修改你的 spring-boot-maven-plugin,如下所示

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>

第 2 步:

https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html#deployment.installing.nix-services.system-d

按照上面链接中的步骤操作 -

在下面写下文件名为 systemd 服务单元文件 - myapp.service

[Unit]
Description=yourappname
After=syslog.target
[Service]
User=youruser
ExecStart=/opt/app/yourApp.jar
StandardOutput=/var/log/yourApp/logs.log
StandardError=/var/log/yourApp/Errorlogs.log
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target

将 myapp.service 保存在 EC2 上的此位置 -/etc/systemd/system

第 3 步:

创建服务单元文件后,运行以下命令一次以启用您的服务 -

systemctl enable myapp.service

第 4 步:

按照服务单元文件中指定的位置部署 jar 后,可以调用以下命令来管理服务 -

  • Start -systemctl start myapp
  • 步骤 -系统CTL停止myApp
  • 验证- systemctl 处于活动状态 --安静的 myapp && echo 服务正在运行

就这样!

注意 - 根据应用程序要求将应用名称修改为路径。

最新更新