Configurar Liferay 7 con PostgreSQL

En este tutorial se explica cómo emplear PostgreSQL al configurar Liferay Portal 7 CE.

Índice de contenidos

1. Introducción

En su tutorial Introducción a Liferay 7, César explicó qué es Liferay Portal, cómo se instala y cuál es su configuración por defecto. Durante el asistente de configuración, la base de datos preseleccionada es Hypersonic, pero Liferay recomienda cambiarla. En este tutorial, vamos a ver cómo hacerlo para emplear PostgreSQL.

2. Entorno

Este tutorial se ha desarrollado en el siguiente entorno:

  • Portátil MacBook Pro (Retina, 15′, mediados 2015), macOS Sierra 10.12.3
  • Liferay Community Edition Portal 7.0.2 GA3 (Wilberforce / Build 7002 / August 5, 2016)
  • Java 1.8.0_112
  • PostgreSQL 9.6.2

3. Establecer PostgreSQL durante el asistente de configuración

Una vez descargado el paquete de Liferay Portal CE con Tomcat y extraído, procedemos a ejecutar la aplicación web a través de terminal con el comando ./startup.sh; este ejecutable se encuentra en el directorio liferay-ce-portal-7.0-ga3/tomcat-8.0.32/bin/ (salvando las diferencias por tema de versiones). Tendremos que esperar un poco —un par de minutos, incluso— para que automáticamente se nos abra en nuestro navegador una nueva pestaña a localhost:8080.

liferay_postgresql_asistente_defecto

Como vemos, Hypersonic es la base de datos por defecto, pero desde Liferay nos recomiendan no utilizarla en producción. Procedemos a cambiarla y elegimos PostgreSQL. Tendremos que cambiar la URL de JDBC para que apunte a una base de datos vacía que hayamos creado, ya que por defecto espera que exista y se llame lportal. Además, tendremos que rellenar el nombre de usuario y contraseña para poder realizar la conexión.

liferay_postgresql_asistente_postgresql

Pulsamos en Finalizar Configuración y, si la conexión a base de datos es correcta, la aplicación nos pedirá que reiniciemos. Para esto paramos el servicio con ./shutdown.sh y lo volvemos a lanzar con ./startup.sh. Se nos abrirá la aplicación, aceptaremos los términos de uso y estableceremos la contraseña del usuario administrador.

Si accedemos a la base de datos —por ejemplo con pgAdmin—, veremos que ya no está vacía y que se ha llenado con las tablas que Liferay Portal necesita.

liferay_postgresql_pgadmin

4. Volver a mostrar el asistente de configuración

Es posible que al lanzar la aplicación por primera vez, durante el asistente de configuración eligiéramos sin querer la base de datos por defecto —Hypersonic—. No pasa nada, podemos volver a ejecutar el asistente para enmendar nuestro desliz y elegir PostgreSQL. Para ello empezamos parando el servicio con ./shutdown.sh. Luego abrimos el archivo portal-setup-wizard.properties, que se encuentra en el directorio raíz de nuestra carpeta de Liferay Portal extraída, y cambiamos la línea:

a:

Arrancamos la aplicación con ./startup.sh y ya veremos el asistente, donde podremos elegir PostgreSQL como base de datos.

5. Error al conectar con base de datos

Es posible que, durante el asistente de configuración, nos diese error al intentar conectar con la base de datos: «Se ha producido un error inesperado al conectarse a la base de datos» («An unexpected error occurred while connecting to the database»).

liferay_postgresql_error_base_datos

Esto puede ser por múltiples razones: PostgreSQL no está ejecutándose, el puerto en el que escucha no es el que has indicado en la URL a JDBC, la base de datos no está creada o no has escrito bien su nombre en la URL de JDBC, etc.

Podemos empezar intentando acceder a la base de datos con pgAdmin. Si desde este programa la conexión es correcta, pasamos a ver si el fallo en Liferay Portal se debe a la conexión con base de datos. Para ello accedemos a los logs: vamos a la carpeta liferay-ce-portal-7.0-ga3/tomcat-8.0.32/logs/ y abrimos el archivo catalina.out.

Si en este archivos vemos que nos ha saltado la excepción org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections, tendremos que revisar que PostgreSQL está escuchando en ese puerto, pues desde el pgAdmin no hubo problemas a la hora de conectarse a la base de datos. Una herramienta para comprobar rápidamente el puerto es telnet. Podemos ejecutar por terminal el comando telnet localhost 5432 y ver si la salida es satisfactoria:

o si se están rechazando las conexiones:

En caso de error, vamos a asegurarnos de que el puerto es correcto. En nuestro caso, que instalamos PostgreSQL en macOS con el paquete EnterpriseDB, podemos ver el archivo de configuración /Library/PostgreSQL/9.6/data/postgresql.conf.

liferay_postgresql_postgresqlconf

En este archivo encontraremos, entre otras cosas, el puerto en el que está escuchando:

Si el puerto es distinto, simplemente tendremos que indicarlo en el asistente de Liferay Portal, en la URL a la JDBC. Por ejemplo, si el puerto es 5433 y la base de datos lportal, entonces será jdbc:postgresql://localhost:5433/lportal.

6. Conclusiones

Indicar en el asistente de Liferay Portal que deseamos emplear una base de datos distinta a Hypersonic es tarea sencilla, pues ya viene preparado para integrarse con varias de ellas, como PostgreSQL. El problema puede venir por despistes nuestros de mala configuración, pero si se identifica rápidamente su causa, entonces la solución no debería ser complicada.

7. Referencias