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).

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)

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

Ahora reiniciamos el servicio tomcat mediante:

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

Tras esto instalamos los extras:

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)

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

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

Reiniciamos el servidor:

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:

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

Y reiniciamos apache:

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:

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:

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

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:

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: