Openshift上的Scalatra应用程序-设置Jetty IP

Openshift上的Scalatra应用程序-设置Jetty IP,jetty,openshift,scalatra,Jetty,Openshift,Scalatra,我正在尝试使用DIY盒带在Openshift上部署一个最小的Scalatra应用程序。我已设法使SBT工作,但当涉及到container:start时,我得到了错误: FAILED SelectChannelConnector@0.0.0.0:8080: java.net.SocketException: Permission denied 显然,embedded Jetty试图在0.0.0.0打开套接字,这是Openshift禁止的(您只能在$Openshift\u INTERNAL\u I

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

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

显然,embedded Jetty试图在0.0.0.0打开套接字,这是Openshift禁止的(您只能在$Openshift\u INTERNAL\u IP打开端口)。我如何才能准确地告诉Jetty我需要它监听哪个IP?

我从未使用过Openshift,所以我在这里摸索了一下

你们有jetty.host套装吗

您可能需要设置一个jetty.xml文件并将其设置在其中。有关如何设置主机的信息,请参见。通过如下设置项目,您可以告诉xsbt web插件关于jetty.xml的信息:


或者,您可以在启动期间将参数传递给Jetty。看起来是这样的:
-Djetty.host=“yourhostname”
是的,关于$OPENSHIFT\u INTERNAL\u IP,您是对的。因此,编辑${jetty.home}/etc/jetty.xml并在连接器部分中设置jetty.host,如下所示:


$OPENSHIFT\u内部\u IP
...

hth

要在Openshift上使用jetty 9.2.13.v20150730和DIY盒带运行,必须使用Java8将其设置为在
$Openshift\u INTERNAL\u 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\u 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 &
        <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>
(请注意,
jdk-8u20-linux-x64.tar.gz
也已报告正常工作,因此您可能需要检查可用的最新版本。)

该设置不需要使用
jetty.xml
,因为它设置了
--host
--port
以绑定到正确的接口并运行构建的war文件。它需要的是将jetty-runner.jar从常春藤缓存复制到目标文件夹中。使用maven,您可以添加以下内容:

# 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 &
        <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>

org.apache.maven.plugins
maven依赖插件
2.3
包裹
复制
org.eclipse.jetty
码头转轮
${jetty.version}
jetty-runner.jar

谷歌建议SBT等价物只是
retrieveManaged:=true
。您可以使用ssh连接到主机并运行
find
,以确定
jetty runner.jar
依赖项已复制到何处,并相应地更新start命令

谢谢!我很想,但是如果jetty嵌入scalatra,我可以在哪里找到(或者应该放在哪里)jetty.xml?您可以分享您对openshift的定制吗?