【问题标题】:Scalatra app on Openshift - setting Jetty IPOpenshift 上的 Scalatra 应用程序 - 设置 Jetty IP
【发布时间】:2013-04-04 09:02:38
【问题描述】:

我正在尝试使用 DIY 墨盒在 Openshift 上部署一个最小的 Scalatra 应用程序。我已经设法让 SBT 工作,但是当谈到 container:start 时,我得到了错误:

FAILED SelectChannelConnector@0.0.0.0:8080: java.net.SocketException: Permission denied

显然,嵌入式 Jetty 尝试在 0.0.0.0 打开套接字,这是 Openshift 禁止的(您只能在 $OPENSHIFT_INTERNAL_IP 上打开端口)。如何准确地告诉 Jetty 我需要它监听哪个 IP?

【问题讨论】:

  • 您能分享一下您对 openshift 的自定义吗?

标签: jetty openshift scalatra


【解决方案1】:

是的,您对 $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>

【讨论】:

  • 谢谢!我想,但是在将jetty嵌入到scalatra中的情况下,我在哪里可以找到(或应该放在哪里)jetty.xml?
【解决方案2】:

我没用过Openshift,所以在这里摸索了一下。

你有 jetty.host 设置吗?

您可能需要设置 jetty.xml 文件并将其设置在其中。请参阅http://docs.codehaus.org/display/JETTY/Newbie+Guide+to+Jetty 了解如何设置主机。您可以通过像这样设置项目来告诉 xsbt Web 插件有关 jetty.xml 的信息:

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

或者,您可以在启动期间将参数传递给 Jetty。看起来像这样:-Djetty.host="yourhostname"

【讨论】:

    【解决方案3】:

    要在带有 DIY 墨盒的 Openshift 上使用 jetty 9.2.13.v20150730 运行,您必须使用 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 设置为绑定到正确的接口并运行构建的war 文件。它确实需要将 jetty-runner.jar 从常春藤缓存复制到目标文件夹中。使用 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 依赖项已复制到的位置并适当地更新启动命令。

    【讨论】:

      猜你喜欢
      • 2016-09-10
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多