Приложение Scalatra на Openshift — настройка Jetty IP

Я пытаюсь развернуть минимальное приложение Scalatra на Openshift с картриджем DIY. Мне удалось заставить работать SBT, но когда дело доходит до container:start, я получаю сообщение об ошибке:

FAILED [email protected]:8080: java.net.SocketException: Permission denied

Судя по всему, встроенный Jetty пытается открыть сокет по адресу 0.0.0.0, что запрещено Openshift (вы можете открывать порты только по адресу $OPENSHIFT_INTERNAL_IP). Как я могу указать Jetty, какой именно IP мне нужно прослушивать?


person Oleg Kunov    schedule 04.04.2013    source источник
comment
Не могли бы вы поделиться своей настройкой для openshift?   -  person Salil    schedule 12.05.2013


Ответы (3)


Да, вы правы насчет $OPENSHIFT_INTERNAL_IP. Поэтому отредактируйте ${jetty.home}/etc/jetty.xml и установите jetty.host в разделе коннектора следующим образом: …..

<Set name="connectors">
  <Array type="org.mortbay.jetty.Connector">
   <Item>
    <New class="org.mortbay.jetty.nio.SelectChannelConnector">
      <Set name="host"><SystemProperty name="jetty.host" />$OPENSHIFT_INTERNAL_IP</Set>
      <Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set>
      ...
    </New>
  </Item>
 </Array>
</Set>

чт

person Sumana Mehta    schedule 04.04.2013
comment
Спасибо! Хотелось бы, но где найти (или где разместить) jetty.xml в случае встраивания в скалатру? - person Oleg Kunov; 04.04.2013

Я никогда не использовал Openshift, поэтому я немного нащупываю здесь.

У вас есть набор jetty.host?

Возможно, вам потребуется настроить файл jetty.xml и установить его там. См. http://docs.codehaus.org/display/JETTY/Newbie+Guide+to+Jetty, чтобы узнать, как настроить хост. Вы можете сообщить веб-плагину xsbt о jetty.xml, настроив свой проект следующим образом:

https://github.com/JamesEarlDouglas/xsbt-web-plugin/wiki/Settings

В качестве альтернативы вы можете передать параметр Jetty во время запуска. Это будет выглядеть так: -Djetty.host="yourhostname"

person futurechimp    schedule 04.04.2013

Чтобы начать работу с jetty 9.2.13.v20150730 на Openshift с картриджем DIY, вы должны запустить Java8, настроив его для работы на $OPENSHIFT_INTERNAL_IP следующим образом. Сначала подключитесь к хосту по ssh и загрузите jdk8 с помощью

cd $OPENSHIFT_DATA_DIR
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u5-b13/jdk-8u5-linux-x64.tar.gz
tar -zxf jdk-8u5-linux-x64.tar.gz
export PATH=$OPENSHIFT_DATA_DIR/jdk1.8.0_05/bin:$PATH
export JAVA_HOME="$OPENSHIFT_DATA_DIR/jdk/jdk1.8.0_05"
java -version

Затем в вашем .openshift\action_hooks\start убедитесь, что у вас есть те же экспортированные переменные, что-то вроде:

# see http://stackoverflow.com/a/23895161/329496 to install jdk1.8 no DIY cartridge
export JAVA_HOME="$OPENSHIFT_DATA_DIR/jdk/jdk1.8.0_05"
export PATH=$OPENSHIFT_DATA_DIR/jdk1.8.0_05/bin:$PATH
nohup java -cp ${OPENSHIFT_REPO_DIR}target/dependency/jetty-runner.jar org.eclipse.jetty.runner.Runner --host ${OPENSHIFT_DIY_IP} --port ${OPENSHIFT_DIY_PORT} ${OPENSHIFT_REPO_DIR}/target/thinbus-srp-spring-demo.war > ${OPENSHIFT_LOG_DIR}server.log 2>&1 &

(Обратите внимание, что jdk-8u20-linux-x64.tar.gz также работает, поэтому вы можете проверить наличие последних доступных.)

Для этой установки не требуется jetty.xml, поскольку она устанавливает --host и --port для привязки к правильному интерфейсу и запуска встроенного файла войны. Для этого требуется, чтобы jetty-runner.jar был скопирован из кеша ivy в целевую папку. С помощью maven вы добавляете что-то вроде:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>org.eclipse.jetty</groupId>
                                <artifactId>jetty-runner</artifactId>
                                <version>${jetty.version}</version>
                                <destFileName>jetty-runner.jar</destFileName>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Google предполагает, что эквивалент SBT просто retrieveManaged := true. Вы можете подключиться к хосту по ssh и запустить find, чтобы выяснить, куда была скопирована зависимость jetty-runner.jar, и соответствующим образом обновить команду запуска.

person simbo1905    schedule 13.10.2015