Где Elastic Beanstalk хранит файл конфигурации nginx? И как можно это сделать?

Итак, после многих часов экспериментов я нашел рабочее решение:

Теперь мой pom.xml выглядит следующим образом:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>en.testpackage</groupId>
    <artifactId>mytestproject</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>mytestprojectMavenWebapp</name>
    <dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.weld.servlet</groupId>
            <artifactId>weld-servlet</artifactId>
            <version>2.4.7.Final</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.ext.cdi</groupId>
            <artifactId>jersey-cdi1x</artifactId>
            <version>2.27</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.27</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
            <version>2.27</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>mytestproject</finalName>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.1</version>
                    <configuration>
                        <path>/</path>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>exec-war-only</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <!-- more plugins e.g. shade plugin for my purpose -->

        </plugins>
    </build>
</project>

Мой src / main / webapp / WEB -INF / web.xml выглядит так:

   <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
        http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        version="3.1">
        <servlet>
            <servlet-name>JerseyRESTService</servlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>com.testpackage.resource</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>JerseyRESTService</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        <listener>
            <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
        </listener>
        <resource-env-ref>
            <resource-env-ref-name>BeanManager</resource-env-ref-name>
            <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
        </resource-env-ref>
    </web-app>

В src / main / resources / META-INF / beans.xml у меня есть:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
       http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="all">
</beans>

В src / main /webapp/META-INF/context.xml У меня есть:

<Context>
   <Resource name="BeanManager"
      auth="Container"
      type="javax.enterprise.inject.spi.BeanManager"
      factory="org.jboss.weld.resources.ManagerObjectFactory"/>
</Context>

С помощью этой комбинации я могу избежать стеков исключений, и я думаю, что на основе зависимости jersey-cdi1x HK2 и Weld способны " сообщать друг другу.

В com.testpackage.resource у меня есть несколько классов, содержащих REST-методы.

Надеюсь, что я предлагаю рабочее (обновление до даты) решение для других пользователей, имеющих все эти проблемы с исключениями.

Предполагается создать файл uber-jar, содержащий Tomcat7, предлагающий REST-Service и использующий CDI на основе Weld.

0
задан CodyBugstein 18 January 2019 в 18:40
поделиться

1 ответ

Как правило, вы не хотите изменять файлы в экземпляре Elastic Beanstalk. Преимущество этой среды заключается в том, что вы можете раскручивать новые экземпляры по мере необходимости, и вам не нужно прикасаться к ним.

Вы можете немного настроить машины Elastic Beanstalk, используя метод ebextensions . По сути, это структура сценариев и файлов, которая дает вам возможность изменять свою среду. Тем не менее, имейте в виду, что ваш лучший способ отладки - это включить SSH в машину и посмотреть, что делают сценарии запуска. Я чувствую, что Amazon не очень хорошо задокументировал этот процесс, и наблюдать за тем, что он делает, по-прежнему проще всего.

Я использую Java Elastic Beanstalk и мне нужно изменить порт, который проксируется, с 5000 на 8080. У меня есть файл, который в моей среде заменяет существующий файл прокси. В .ebextensions/nginx/conf.d/elasticbeanstalk в моем дистрибутивном файле Elastic Beanstalk я включаю следующее как 00_application.conf:

#
# default is 404 - no need to allow anything else
#
location / {
    return 404;
}

#
# this is our default url path prefix
#
location /integration {
    proxy_pass          http://127.0.0.1:8080;
    proxy_http_version  1.1;

    proxy_set_header    Connection          $connection_upgrade;
    proxy_set_header    Upgrade             $http_upgrade;
    proxy_set_header    Host                $host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
}

Это для службы REST, которая предоставляет только /integration. Ключ в том, что я должен был получить исходный файл от входа в систему, чтобы увидеть, как была настроена моя среда. В зависимости от типа среды Elastic Beanstalk, выбранные вами настройки могут отличаться. Например, в мире Java есть тип Tomcat и тип приложения Java, и их конфигурация сильно отличается.

0
ответ дан stdunbar 18 January 2019 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: