2013-04-04 3 views
3

J'essaie de déployer une application minimale de Scalatra sur Openshift avec la cartouche de bricolage. J'ai réussi à travailler SBT, mais quand il vient à container:start, je reçois l'erreur:App Scalatra sur Openshift - réglage Jetty IP

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

Apparemment, la jetée intégrée tente d'ouvrir la prise à 0.0.0.0, ce qui est interdit par OpenShift (vous ne pouvez ouvrir les ports à $ OPENSHIFT_INTERNAL_IP). Comment puis-je dire à Jetty quelle IP j'ai besoin d'écouter?

+0

Pourriez-vous partager votre personnalisation pour openshift? – Salil

Répondre

0

Je n'ai jamais utilisé Openshift, donc je suis un peu à la recherche d'un mot.

Avez-vous un jeu jetty.host?

Vous devrez peut-être configurer un fichier jetty.xml et le définir dans ce fichier. Voir http://docs.codehaus.org/display/JETTY/Newbie+Guide+to+Jetty pour savoir comment définir l'hôte. Vous pouvez dire le plugin web xsbt à propos jetty.xml en définissant votre projet comme ceci:

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

Alternativement, vous pouvez être en mesure de passer le paramètre à la jetée lors du démarrage. Cela ressemblerait à ceci: -Djetty.host="yourhostname"

2

Oui, vous avez raison à propos de $ OPENSHIFT_INTERNAL_IP. modifier Donc /etc/jetty.xml $ {} et de jetty.home mettre jetty.host dans la section de connecteur comme suit: ... ..

<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

+0

Merci! Je voudrais, mais où puis-je trouver (ou où devrais-je placer) jetty.xml dans le cas d'une jetée intégrée dans scalatra? –

0

Pour obtenir l'exécution avec une jetée 9.2.13 .v20150730 sur le Openshift avec cartouche de bricolage que vous devez exécuter avec Java8 le définissant pour courir sur le $OPENSHIFT_INTERNAL_IP comme suit. ssh d'abord sur l'hôte et télécharger un jdk8 avec

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 

Ensuite, dans votre .openshift\action_hooks\start vous assurer d'avoir les mêmes variables exportées avec quelque chose comme:

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

(Notez que jdk-8u20-linux-x64.tar.gz a également été présenté au travail afin vous voudrez peut-être vérifier les dernières disponibles.)

Cette configuration n'a pas besoin de jetty.xml car elle définit les --host et --port pour lier à l'interface correcte et lancer le t fichier de guerre. Ce qu'il faut, c'est que jetty-runner.jar est copié hors du cache ivy dans le dossier cible. Avec Maven à faire que vous ajoutez quelque chose comme:

 <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 suggèrent que l'équivalent SBT est tout simplement retrieveManaged := true. Vous pouvez envoyer un message SSH à l'hôte et exécuter find pour savoir où la dépendance jetty-runner.jar a été copiée et mettre à jour la commande de démarrage de manière appropriée.