3

我正在尝试使用 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?

4

3 回答 3

2

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

hth

于 2013-04-04T17:32:24.103 回答
0

I've never used Openshift, so I'm groping a bit here.

Do you have a jetty.host set?

You may need to set up a jetty.xml file and set it in there. See http://docs.codehaus.org/display/JETTY/Newbie+Guide+to+Jetty for how to set the host. You can tell the xsbt web plugin about jetty.xml by setting your project up like this:

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

Alternately, you may be able to pass the parameter to Jetty during startup. That'd look like this: -Djetty.host="yourhostname"

于 2013-04-04T13:32:00.663 回答
0

要在带有 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据报道它也可以工作,因此您可能需要检查最新的可用版本。)

该设置不需要 a jetty.xml,因为它设置--hostand--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依赖项已复制到的位置并适当地更新启动命令。

于 2015-10-13T23:07:59.210 回答