How to configure Liferay 6.1 for PostgreSQL

Sorry, this entry is only available in Italiano.

Nel precedente articolo Come configurare Eclipse per Liferay Portal in Mac OS X, pubblicato sul mio blog, abbiamo visto come configurare un ambiente di sviluppo completo per Liferay 6.0 analogamente per la versione successiva di Liferay 6.1. La distribuzione Liferay di default prevede l’utilizzo del data base HSQL (Hypersonic) per la persistenza dei dati. L’utilizzo di questo tipo di data base in ambienti di produzione non è però consigliato.

Nel corso di quest’articolo vedremo Step-by-Step come configurare il data base PostgreSQL per la persistenza dei dati di Liferay. Non saranno affrontanti temi di tuning e performance riguardo questa tipologia di configurazione.

1.   Requisiti

Per terminare con successo la configurazione Liferay/PostgreSQL devono essere soddisfatti una serie di requisiti software:

  • Liferay 6.1
  • PostgreSQL 8 o superiore[1]
  • JDBC Driver per PostgreSQL[2]

La versione Liferay di riferimento è la 6.1.10 nell’edizione Community distribuita con il Servlet Container Tomcat. Il driver JDBC per PostgreSQL è già distribuito con la versione di Liferay e risiede all’interno della directory {liferay-home}/{tomcat}/lib/ext. Il driver JDBC per PostgreSQL fornito con Liferay è un JDBC Type 3[3]. Ho pubblicato sul mio repository Gist JDBC Type Test Class una classe di test per identificare il tipo di driver JDBC.

2.   Scenario di configurazione

Lo scenario affrontato è molto semplice e in linea con quanto previsto da Liferay stessa. Per ragioni di semplicità è stata volutamente scelta la versione di Liferay che include Tomcat (come Servlet Container), lo scenario resta comunque valido per qualunque altro tipo di Servlet Container o Application Server J2EE supportati da Liferay.   

Scenario di configurazione Liferay/PostgreSQL per la persistenza dei dati.

Scenario di configurazione Liferay/PostgreSQL per la persistenza dei dati.

Figura 1 Scenario di configurazione Liferay/PostgreSQL per la persistenza dei dati.

La Figura 1 mostra lo scenario di configurazione desiderato per la nostra installazione di Liferay Portal Server. Nel diagramma sono indicate le configurazioni di rete (che nel vostro caso potrebbero essere anche diverse) a scopo puramente dimostrativo.

La connessione verso il data base sarà eseguita e gestita attraverso un JDBC Connection Pool[4] configurato sul Servlet Container o Application Server. Gli step necessari al completamento della configurazione che vedremo nel resto dei successivi paragrafi sono:

  • Configurazione del data base;
  • Configurazione del Connection Pool;
  • Configurazione di Liferay Portal.

3.   Configurazione di PostgreSQL

Liferay richiede che il data base sui cui si vuol fare la persistenza dei dati sia correttamente configurato, ciò si traduce nell’espletamento dei seguenti punti:

  • Configurazione dei parametri di rete;
  • Creazione dell’utente che accederà al data base;
  • Creazione del data base che ospiterà i dati di Liferay.

Per rispondere al primo punto indicato sopra, è necessario accertarsi che PostgreSQL sia configurato in modo tale che sia in listen sull’interfaccia di rete che sarà poi utilizzata per la connessione da parte di Liferay. La verifica ed eventuale modifica dei parametri di rete è abbastanza semplice.  Attraverso il comando mostrato nel Listato 1 verifichiamo che il data base sia in listen sulla corretta interfaccia di rete, così come indicato in Figura 1.

# netstat -tanp | grep LISTEN | grep 5432

Listato 1 Comando per la verifica del servizio TCP/IP di PostgreSQL.

tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 9177/postmaster

Listato 2 Output del comando netstat.

L’output del comando evidenzia che il data base è il listen solamente sull’interfaccia di loopback (127.0.0.1), occorre quindi configurare il servizio TCP/IP del data base in listen sull’interfaccia avente l’indirizzo IP impostato a 192.168.56.101. Il file configurazione interessato alla modifica è mostrato al Listato 3. E’ stato aggiunto l’indirizzo 192.168.56.101 su cui accettare connessioni TCP/IP in ingresso. Affinché la modifica sia applicata, sarà necessario eseguire il restart del data base.

#----------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#----------------------------------------------------------------
# - Connection Settings -
# What IP address(es) to listen on;
# Comma-separated list of addresses;
# Defaults to 'localhost','*' = all

listen_addresses = '127.0.0.1,192.168.56.101'

Listato 3 File di configurazione postgresql.conf.

Eseguendo nuovamente il comando mostrato nel Listato 1 vedremo che oltre l’indirizzo di loopback  in listen sulla porta TCP/IP 5432, sarà presente anche il nuovo indirizzo, così come illustrato al Listato 4. La porta TCP/IP assegnata da Internet Assigned Numbers Authority - IANA al servizio del data base è la 5432, sui sistemi Unix/Linux/BSD consultare il file /etc/services.

tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 9177/postmaster
tcp 0 0 192.168.56.101:5432 0.0.0.0:* LISTEN 9177/postmaster

Listato 4 Output del comando netstat dopo la modifica della configurazione di PostgreSQL.

Completata la configurazione del servizio TCP/IP del data base, è possibile proseguire con la creazione dell’utenza che sarà utilizzata da Liferay per la connessione e tutte le altre operazioni necessarie (sia DML sia DDL). Il comando a seguire è responsabile della creazione dell’utente liferay-1, per ragioni di sicurezza l’utenza è stata creata con qualche limite, infatti, è consigliabile limitare il raggio d’azione dell’utenza al solo schema di competenza.

Generalmente i comandi che agiscono sul data base devono essere eseguiti con il grado di dba, l’utenza di default del sistema operativo avente il ruolo dba è postgres.

$ createuser -D -R -S -e -E -P liferay-1

Listato 5 Creazione dell’utente liferay-1.

Il comando chiederà l’immissione di una password a vostra scelta, in questo caso la password assegnata è liferay12345.

Per terminare la configurazione dell’utente, serve istruire il data base affinché consenta connessioni in ingresso da parte dell’utente appena creato dalla rete di classe 192.168.56.0/24, per far ciò bisogna aggiungere una nuova direttiva al file di configurazione pg_hba.conf.

# PostgreSQL Client Authentication Configuration File
# ===================================================
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only

local   all         all                               ident

# IPv4 local connections:
host    all         all         127.0.0.1/32          ident
host    all         all         127.0.0.1/32          md5
host    all         all         172.16.1.0/24         md5
host    all         all         192.168.56.0/24       md5

Listato 6 Aggiunta dell’autorizzazione di connessione da reti 192.168.56.0/24.

L’ultima opera di configurazione è quella più importante, la creazione del data base che chiameremo liferay-1, così come l’utente. Sempre con il grado di dba procediamo con il comando illustrato nel Listato 7.

$ createdb -e -E UTF-8 -O liferay-1 liferay-1

Listato 7 Creazione del data base liferay-1.

Il data base è stato creato con un tipo di encoding UTF-8 e owner l’utente liferay-1 creato in precedenza. Dopo il riavvio del data base, necessario per applicare le nuove regole di connessione, è possibile verificare che la nuova configurazione funzioni correttamente. La verifica è molto semplice, basterebbe eseguire una connessione con un qualunque tipo di client, il comando a seguire mostra una connessione al data base creato in precedenza utilizzando il client pgsql.

$ psql -h 192.168.56.101 -U liferay-1 liferay-1

Listato 8 Connessione al data base di Liferay.

psql (8.4.7)
liferay-1=> \l
List of databases

Name    |   Owner   | Encoding |  Collation  |    Ctype    |   Access privile
-----------+-----------+----------+-------------+-------------+--------------
liferay-1 | liferay-1 | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
postgres  | postgres  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
template1 | postgres  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres

(4 rows)

liferay-1=>

Listato 9 Vista dei data base dopo la connessione al data base liferay-1.

Con quest’ultima verifica la configurazione di PostgreSQL è ultimata e il data base è pronto per ospitare i dati di Liferay. E’ possibile approfondire la configurazione trattata in questo paragrafo consultando la documentazione ufficiale PostgreSQL 8.4 Server Administration.

4.   Configurazione di Tomcat

Il nostro scenario di configurazione (vedere la Figura 1) prevede che la connessione verso il data base PostgreSQL sia gestita attraverso un Connection Pool. La configurazione di un Database Connection Pool (DBCP) su Tomcat come risorsa Java Naming and Directory Interface (JNDI) è molto semplice. La documentazione Apache Tomcat 6.0 - JNDI Datasource HOW-TO è ben fatta e molto chiara, comprende inoltre anche il caso di configurazione per un RDBMS PostgreSQL. Nel Listato 10 la configurazione della risorsa definita come jdbc/LiferayPool.


Listato 10 Parte del file di configurazione context.xml. Il file di configurazione completo è disponibile sul mio repository Gist all’indirizzo Apache Tomcat 6.0 - JNDI Datasource. Il file di configurazione context.xml è locato in {liferay-home}/{tomcat}/conf.  

5.   Configurazione di Liferay

La configurazione del data base nella versione 6.1 di Liferay è rimasta uguale alla precedente release. Il nostro scenario di configurazione prevede l’utilizzo di un Database Connection Pool (DBCP) configurato in precedenza ed esposto come risorsa JNDI. In maniera molto semplice è possibile indicare a Liferay il nome della risorsa JNDI all’interno del file di properties portal-ext.properties specificando la proprietà indicata al Listato 11.

jdbc.default.jndi.name=jdbc/LiferayPool

Listato 11 Configurazione del data base via JNDI.

La directory {liferay-home}/{tomcat}/webapps/ROOT/WEB-INF/classes contiene il file portal-ext.properties. Non è detto che il file sia presente, qualora non fosse presente, occorre crearlo da zero e conterrà la sola riga mostrato nel procedente listato.

 

6.   Start di Liferay con la nuova configurazione

Dopo aver completato tutte le fasi di configurazione, possiamo procedere con l’avvio di Liferay Portal e verificare che la nuova configurazione funzioni in modo corretto.

Il primo avvio è quello più delicato che richiederà un tempo di start-up superiore al normale per via del setup (che include numerose operazioni) richiesto per il nuovo data base PostgreSQL. Al Listato 12 sono mostrate le informazioni più rilevanti estratte dal file di log catalina.out di Tomcat.

Loading file:/opt/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27/webapps/ROOT/WEB-INF/classes/portal-ext.properties
12:45:34,784 INFO  [DialectDetector:69] Determining dialect for PostgreSQL 8
12:45:34,890 INFO  [DialectDetector:49] Using dialect org.hibernate.dialect.PostgreSQLDialect Starting Liferay Portal Community Edition 6.1.1 CE GA2 (Paton / Build 6101 / July 31, 2012)
12:45:50,056 ERROR [JDBCExceptionReporter:101] ERROR: relation "lock_" does not exist Position: 403
12:45:50,585 WARN  [ReleaseLocalServiceImpl:143] ERROR: relation "release_" does not exist Position: 25
12:45:50,588 INFO  [ReleaseLocalServiceImpl:84] Create tables and populate with default data
12:45:54,093 INFO  [BaseDB:400] Database supports case sensitive queries
12:46:06,270 INFO  [ServiceComponentLocalServiceImpl:187] Running Chat SQL scripts
12:46:13,704 INFO  [ServiceComponentLocalServiceImpl:187] Running Kaleo SQL scripts
12:46:14,957 INFO  [ServiceComponentLocalServiceImpl:187] Running Mail SQL scripts

Listato 12 Estratto dal file log catalina.out al primo avvio.

Non appena il server avrà completato la fase di start-up, sarà possibile accedere a Liferay puntando all’indirizzo http://liferay-portal-fe-1.local:8080. L’esecuzione del comando netstat (così come indicato nel Listato 13) su una delle due macchine, mostra le connessioni attive verso la base dati. Nel comando è stato volutamente omesso il parametro n in modo che sia eseguito il lookup degli indirizzi IP nei rispettivi nomi.

# netstat -ta | grep ESTABLISHED | grep postgres

Listato 13 Comando netstat per la visualizzazione delle connessioni verso PostgreSQL.

tcp 0 0 liferay-portal-db-:postgres liferay-portal-fe-1.l:49784 ESTABLISHED
tcp 0 0 liferay-portal-db-:postgres liferay-portal-fe-1.l:49737 ESTABLISHED
tcp 0 0 liferay-portal-db-:postgres liferay-portal-fe-1.l:49739 ESTABLISHED
tcp 0 0 liferay-portal-db-:postgres liferay-portal-fe-1.l:49740 ESTABLISHED

Listato 14 Output del comando netstat.

7.   Risorse

A seguire una breve lista delle risorse disponibili in rete che possono essere rilevanti come approfondimento del tema trattato da quest’articolo.

Item Nome risorsa Descrizione
1 Installing Liferay for an Enterprise Questo documento descrive l’installazione di Liferay in ambienti di tipo Enterprise e le pratiche più comuni.
2 Installing a Bundle Questo documento descrive la struttura del bundle e la relativa installazione.
3 Liferay Wiki Guide Wiki di raccolta articoli forniti dallo staff di Liferay e dalla comunità.
4 Database Configuration Questo documento contiene informazioni su come cambiare l’RDBMS di default.


[1] La versione utilizzata per la stesura di quest’articolo è la 8.4 installata con una configurazione di default sul sistema operativo CentOS 5.6 (virtualizzato).

[2] I driver JDBC per PostgreSQL e tutta la documentazione relativa sono disponibili all’indirizzo http://jdbc.postgresql.org/index.html

[3] I driver di tipo 3 sono i cosiddetti net driver: in questo caso il driver è diviso in due parti come il tipo 2, ma i due strati adesso comunicano tramite un protocollo proprietario o alle volte anche via TCP/IP o HTTP.

[4] Consiglio la lettura dei documenti Connection Pool e JDBC Connection Pooling Best Practices

Antonio Musarra

I began my journey into the world of computing from an Olivetti M24 PC (http://it.wikipedia.org/wiki/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until … Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.

You may also like...