【问题标题】:Deploying Spring Boot war in AWS ec2 instance在 AWS ec2 实例中部署 Spring Boot 战争
【发布时间】:2018-04-06 18:45:42
【问题描述】:

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

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

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

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

这是我的代码

1.ScApplication.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.pom.xml

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.student.corner SC 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>

【问题讨论】:

  • 为什么要将文件部署到var/lib/tomcat 为什么不var/lib/tomcat/webapps?,您也可以查看var/lib/tomcat/logs/catalina.out 中的日志吗?
  • 是的,我正在部署在 var/lib/tomcat8/webapps 目录中

标签: maven tomcat spring-boot amazon-ec2 deployment


【解决方案1】:

您可能希望让 Spring 为您管理 tomcat。

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

这种方法将帮助您管理部署生命周期钩子,例如 Start-Service、Stop-service、Validate-Service,以便仅与一行命令集成。

您无需处理自己的 shell 脚本。

此外,您可以通过安装 cloudwatch 代理将 spring boot 日志获取到 cloudwatch 日志中。

第 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 后,您可以调用以下命令来管理您的服务 -

  • 开始 - systemctl start myapp
  • 步骤 - systemctl stop myapp
  • 验证 - systemctl is-active --quiet myapp && echo 服务正在运行

就是这样!

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

【讨论】:

    猜你喜欢
    • 2019-03-23
    • 2015-10-28
    • 1970-01-01
    • 2018-07-05
    • 2019-03-21
    • 2016-08-16
    • 1970-01-01
    • 2017-09-21
    • 2018-04-12
    相关资源
    最近更新 更多