Buenas tardes a todos, hace unos minutos he redactado un artículo explicando las ventajas de tener un servidor privado VPS en Digital Ocean. Que conste que no me pagan por ello ni cobro comisión, es mi opinión sincera de los servicios que ofrecen :).

Dicho esto, voy a explicaros algo que he estado haciendo estos días para poder seguir avanzando con una parte del sistema que estoy generando.

Posibilidades de ejecutar PHP y JAVA en un mismo servidor

Ya os comenté que estoy utilizando Protégé para generar una ontología en formato OWL. Dicha ontología quiero “alimentarla” y completarla mediante un formulario web realizado en PHP, pero me encontraba con un problema inicial: protégé no tiene API para PHP, pero sí tiene API para programar en JAVA (Apache JENA es el framework de JAVA para poder trabajar con ontologías OWL).

Debido a mi perfil profesional, con lo que más he trabajado durante todos estos años desde que finalicé la carrera es sobre todo con sistemas realizados en PHP (HTML, CSS, Javascript, jQuery, AJAX… y todas las tecnologías WEB relacionadas), así que quería buscar una solución alternativa a los Web Services que me permitiera escribir mi fichero OWL a través de mi sistema en PHP.

Encontré varias opciones, entre ellas las siguientes:

Entre las tres opciones, me decanté finalmente por la tercera. La elección fue sencilla, el sistema quería que funcionase en un servidor en el que tengo configurado un dominio, www.ontofit.com (actualmente vacío en su index, pero con el que trabajo de forma “privada”). Quercus y Resin podría configurarlos en el servidor usando la IP, pero si quería que funcionasen desde el propio dominio, me iba a llevar algo más de tiempo y seguramente tendría que “desconfigurar” otras webs que tengo alojadas con APACHE, así que la opción de usar el “puente” PHP/JAVA era la más idónea.

Este elemento lo que nos permite es, en ficheros PHP, utilizar código JAVA, así que con esto podría utilizar tranquilamente la API de Protégé (que podéis descargar desde aquí), pero con mi sistema creado en PHP, pudiendo así unir el formulario web a mi ontología con relativa “facilidad”.

Instalando PHP/JAVA Bridge

Bueno, para poder hacer funcionar esto, hay que realizar unos cuantos pasos, concretamente voy a explicar los siguientes a continuación:

  1. Instalar Tomcat 7
  2. Instalar Fast-CGI
  3. Instalar PHP Bridge
  4. Creando enlace entre Tomcat y Apache

Previamente tendremos que tener instalado el entorno apache para poder ejecutar PHP, podéis ver cómo instalarlo desde estos enlaces:

1.Instalando Tomcat 7 en el servidor

Mi servidor de Digital Ocean tiene una versión de Ubuntu 14.04 instalada, así que para instalar tomcat, todo es bastante sencillo mediante el gestor de paquetes synaptics (mediante apt-get).

sudo apt-get update
sudo apt-get install tomcat7

Al instalar tomcat, escribimos yes para que se instale. Una vez instalado tomcat7 editamos el fichero /etc/default/tomcat7 con el editor que queramos (yo uso nan)

sudo nano /etc/default/tomcat7

Buscamos la línea en la que leemos JAVA_OPTS, la borramos y escribimos esto:

JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"

Ahora reiniciamos el servicio tomcat mediante:

sudo service tomcat7 restart

Y ya podemos acceder a nuestro servidor Tomcat desde la dirección http://ip_de_tu_servidor:8080/

Tras esto instalamos los extras:

sudo apt-get install tomcat7-docs tomcat7-admin tomcat7-examples

Luego la máquina virtual de JAVA con sus elementos de desarrollador (vamos, el JDK – Java Development Kit) y un programilla extra que nos será útil para llevar un control de version si queremos (git)

sudo apt-get install default-jdk git

Ahora nos falta crear un usuario para administrar tomcat desde el panel web, así que editamos el fichero /etc/tomcat7/tomcat-users.xml

sudo nano /etc/tomcat7/tomcat-users.xml

Buscamos la etiqueta <tomcat-users> y dentro insertamos nuestro usuario y contraseña:

<tomcat-users>
    <user username="admin" password="password" roles="manager-gui,admin-gui"/>
</tomcat-users>

Reiniciamos el servidor:

sudo service tomcat7 restart

Y ya podemos instalar cualquier cosa o administrarlo desde la dirección

http://ip_de_tu_servidor:8080/manager/html

2.Instalar Fast-CGI

Si habéis instalado ya PHP, os faltará instalar una cosita más en el servidor que es lo el paquete de fast-cgi, sino no os va a funcionar bien el invento. Lo que debéis hacer es lo siguiente:

sudo apt-get install libapache2-mod-fcgid php5-fpm php5 apache2 apache2-suexec php5-cgi

Añadimos los mods al apache mediante los siguientes comandos:

a2enmod rewrite
a2enmod suexec
a2enmod include
a2enmod fcgid

Y reiniciamos apache:

sudo service apache2 restart

3.Instalando PHP Bridge

Ahora ya sí, nos dirigimos a la web de PHP Bridge:

Descargamos el fichero JavaBridgeTemplate.war y una vez descargado nos dirigimos al manager de nuestro servidor tomcat:

http://ip_de_tu_servidor:8080/manager/html/

Y en Archivo WAR a desplegar seleccionamos el fichero que nos hemos descargado y pulsamos Desplegar

Captura de pantalla 2015-08-14 18.08.01

Ya tendremos nuestro PHP/JAVA Bridge instalado, pero el nombre de la webapp será JavaBridgeTemplate621 así que podemos renombrar el directorio de la siguiente forma:

sudo mv /var/lib/tomcat7/webapps/JavaBridgeTemplate621 /var/lib/tomcat7/webapps/NombreQueQueramos

En NombreQueQueramos lógicamente ponemos el nombre que queramos, en mi caso he puesto ontofit.

Para comprobar que funciona bien, clickamos sobre el enlace siguiente:

http://ip_de_tu_servidor:8080/NombreQueQueramos/test.php

Si todo se ve bien, es que funciona perfectamente, si falla algo… busca el error por Google o incluso déjame un comentario, que así completo este tutorial más aún.

4.Conectando Tomcat y Apache

Ahora nos falta que desde el dominio que tenemos configurado en Apache (en mi caso www.ontofit.com), veamos el contenido de la carpeta anterior, /var/lib/tomcat7/webapps/NombreQueQueramos. Para ello crearemos un enlace simbólico en el directorio raíz de nuestro dominio.

En mi caso el directorio ráiz es /var/www/ontofit.com/public_html así que el enlace simbólico que cree fue el siguiente:

ln -s /var/lib/tomcat7/webapps/ontofit /var/www/ontofit.com/public_html/ontofit

En vuestro caso sustituid ontofit por el nombre de vuestra aplicación.

Y bien… hecho esto, os debería funcionar el invento si clickáis sobre el enlace:

http://www.vuestrodominio.com/NombreQueQueramos

Pero a veces se ve una página en blanco ¿por qué? pues porque nos falta retocar una variable en nuestro php.ini.

¿Qué debemos hacer? editar el fichero php.ini, en mi caso está en /etc/php5/apache2/php.ini

sudo nano /etc/php5/apache2/php.ini

Buscamos la línea que contiene la palabra allow_url_include y cambiamos el parámetro de OffOn

Captura de pantalla 2015-08-14 18.18.28

Y reiniciáis el apache:

sudo service apache2 restart

Ahora ya os debería funcionar el enlace anterior y ya tendríais funcionando al 100% vuestro sistema.

Ahora en el directorio donde tenéis vuestra app tomcat, podéis meter el código PHP que queráis con código JAVA (tal y como muestra la documentación de JAVA Bridge) y os funcionará perfectamente, un código de ejemplo para ver que todo funciona bien sería este:

<?php require_once("java/Java.inc");
$session = java_session();
?>

<HTML>
<TITLE>PHP and JSP session sharing</title>
<BODY>
<?php

if(is_null(java_values($session->get("counter")))) {
  $session->put("counter", 1);
}

$counter = java_values($session->get("counter"));
print "HttpSession variable \"counter\": $counter<br>\n";
$session->put("counter", $counter+1);
?>
<a href="sessionSharing.jsp">JSP page</a>
</BODY>
</HTML>