Una guida pratica per eseguire il portale Liferay.

Una guida pratica per eseguire il portale Liferay.
File in formato PDF, ODT e DOCX
Unica guida in italiano per installare Liferay 7.4



Wikipedia definisce Liferay come: «un enterprise portal free e open Source scritto in Java, distribuito con licenza GNU LGPL e opzionalmente con licenza commerciale».
La versione CE è full future di serie. Estremamente flessibile e veramente potente (in tutti i sensi) richiede un po' di conoscenze per un'installazione di successo.
Qui di seguito le istruzioni passo, passo per riuscire partendo dal pacchetto ZIP bundled.
1. Premessa
Può essere utile leggere due note di teoria per chi è a digiuno del mondo Java e del mondo degli Application Server (da qui in poi AS).
Per chi già possiede queste conoscenze può subito passare oltre.
Liferay è scritto in Java e necessita di un AS e di un database per funzionare.
È disponibile in versione enterprise (la EE) e in versione completamente opensource (ovvero la community CE).
Questa famiglia di applicazioni è progettata per architetture più complesse delle semplici applicazioni LAMP e prevede di funzionare in cluster distribuiti in modo da garantire il funzionamento continuo e di poter scalare nella potenza in modo continuo e lineare.
Una caratteristica specifica di Liferay è la sua struttura centralizzata:
- si fa una sola installazione;
- all'interno si creano uno o più siti;
- l'amministratore può controllare tutto e crea uno o più team di gestione dei siti;
- l'amministratore può attivare, oltre ai siti istituzionali, un sito personale automatico per ogni utente.
In merito a Java dobbiamo sapere che ne esistono diverse release che dipendono da diverse aziende:
- Oracle Java;
- Open Java;
- IBM Java.
Principalmente Java viene rilasciato in 2 tipologie:
- JDK: pacchetto completo con il compilatore pensato per gli sviluppatori;
- JRE: pacchetto pensato per far girare le applicazioni Java dedicato agli utenti normali.
Esistono anche diversi AS:
- Tomcat: il progetto probabilmente più noto e di libero uso;
- WildFly: versione di libero uso dell'AS aziendale JBoss;
- JBoss: AS aziendale della RedHat;
- WebSphere: AS aziendale della IBM;
- Weblogic: AS aziendale della Oracle.
Eccetto gli amministratori normalmente non si accede direttamente alle applicazioni come Liferay, ma si mette tra internet e l'applicazione un software di separazione che viene definito reverse proxy. Tradizionalmente questo ruolo viene svolto da noti Web Server come:
- Apache Http Server;
- Nginx.
Per aziende che usano server farm (proprie o in cloud) si usano soluzioni più performante come software specializzati a questo solo scopo o appliance, veri e propri computer che fanno esclusivamente bilanciamento e proxy.
Ultima nota necessaria. Le applicazioni Java per il web non funzionano direttamente dal codice sorgente. Di solito con un'applicazione PHP si scrivono delle istruzioni, il file viene messo nel web server e funziona.
Le applicazioni Java, invece, vanno scritte, compilate, messe nell'AS, deplyate e poi diventano funzionanti.
Alla luce di questo scenario un po' più complesso del semplice ambiente LAMP passiamo alla fase esecutiva.
2. Piano
Partiamo da un server base Ubuntu 21.04 appena creato.
Il server ha le seguenti caratteristiche:
IP: | 192.168.0.200 |
Hostname: | srv.example.local |
Accesso: | via SSH |
Allo scopo didattico di questa guida usiamo il pacchetto di Liferay bundled, già completo di Tomcat e dei connector per il database. Come database di backend useremo MariaDB e come reverse proxy Apache HTTP. Come back-end di rendering e trasformazione dei documenti useremo LibreOffice headless. In fine faremo solo una piccolissima attività di configurazione di Liferay per attivare le funzioni multimediali e di conversione formato dei documenti.
Il pacchetto bundled contiene già un'istanza di Elasticsearch che si avvia automaticamente come motore di ricerca per il nostro portale.
Nota 1: Liferay estrae le parole da tutti i documenti che inseriamo, compreso i metadati delle foto, dei video, dei documenti (standard CMIS) e li passa ad Elasticsearch permettendo una ricerca a tutto campo su ogni oggetto caricato.
Nota 2: vista la natura didattica di questa guida non si prende in considerazione l'implementazione del protocollo HTTPS. In caso di produzione reale andrà assolutamente aggiunto!
3. Preparazione di Ubuntu
Colleghiamoci al nostro server via SSH e iniziamo con l'aggiornamento dei Ubuntu:
sudo apt update && sudo apt full-upgrade -y
Procediamo con l'installazione dell'ambiente necessario ad eseguire il bundled Liferay: ffmpeg, ImageMagick, MariaDB, Apache, OpenJDK e LibreOffice.
Installiamo per prime le utiliy:
sudo install ffmpeg imagemagick ghostscript curl wget -y
Installiamo MariaDB. Useremo, però, l'ultima versione distribuita direttamente da MariaDB:
- aggiungiamo il certificato del repository:
curl -o /etc/apt/trusted.gpg.d/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'
- creiamo la sorgente per apt:
nano /etc/apt/sources.list.d/mariadb.sources
- e inseriamo il seguente testo
# MariaDB 11.2 repository list - created 2024-01-21 08:42 UTC
# https://mariadb.org/download/
X-Repolib-Name: MariaDB
Types: deb
# deb.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# URIs: https://deb.mariadb.org/11.2/ubuntu
URIs: https://mirror.mva-n.net/mariadb/repo/11.2/ubuntu
Suites: jammy
Components: main main/debug
Signed-By: /etc/apt/keyrings/mariadb-keyring.pgp
- aggiorniamo apt e installiamo MariaDB:
sudo apt update && sudo apt install mariadb-server percona-toolkit -y
- attiviamo il servizio e avviamolo
systemctl enable mariadb --now
- securizziamo MariaDB
NB: impostiamo come passwordsecurePass32
. È bene, in produzione, usare una migliore password. Inoltre qui di seguito riportiamo solo una parte delle richiestemariadb-secure-installation
. Per tutte le altre consigliamo di accettare come è buona prassi
mariadb-secure-installation
Change the root password? [Y/n]
New password: securePass32
Re-enter new password: securePass32
Ora passiamo a creare il database per Liferay con questi parametri:
- Nome del database: liferay
- Utente del database: liferay
- Password dell'utente: lifePass77f3
sudo mariadb -u root
MariaDB [(none)]> CREATE DATABASE liferay CHARACTER SET utf8;
MariaDB [(none)]> GRANT USAGE ON *.* TO `liferay`@`localhost` IDENTIFIED VIA mysql_native_password USING PASSWORD('lifePass77f3');
MariaDB [(none)]> GRANT ALL PRIVILEGES ON `liferay`.* TO `liferay`@`localhost`;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q
Procediamo installando Apache HTTP e prepariamo anche la configurazione in reverse proxy
- installiamo il server
sudo apt install -y apache2 apache2-utils
- attiviamo i moduli del proxy e alcuni altri utili per un server
sudo a2enmod proxy proxy_http rewrite ssl actions include cgi alias dir env headers mime
- creiamo la configurazione per Apache
sudo nano /etc/apache2/sites-available/001-srv.example.local.conf
- e popoliamolo con il seguente contenuto
<VirtualHost *:80>
ServerAdmin
ServerName srv.example.local
ServerAlias www.example.local
DocumentRoot /var/www/srv.example.local/html
ErrorLog /var/www/srv.example.local/log/error.log
CustomLog /var/www/srv.example.local/log/access.log combined
#
# Istruzioni per forzare l'HTTPS
# da usare assolutamente in PRODUZIONE
#RewriteEngine on
#RewriteCond %{SERVER_NAME} =www.example.local
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
#
# Istruzioni di reverse
RequestHeader set X-Forwarded-Proto "http"
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
- attiviamo la configurazione creata
sudo a2ensite 001-srv.example.local
- creiamo le directory per il dominio web example.local
sudo mkdir -p /var/www/srv.example.local/{data,html,log,temp}
sudo chown www-data:www-data -R /var/www/srv.example.local
- creiamo una pagina test
sudo nano /var/www/srv.example.local/html/test.html
- e inseriamo il seguente codice
<!DOCTYPE html>
<html>
<body>
<h1>Pagina Test</h1>
<p>Web server per Liferay pronto e funzionante</p>
</body>
</html>
- correggiamo i permessi
sudo chown www-data:www-data -R /var/www/srv.example.local/html/test.html
- abilitiamo Apache e avviamolo
systemctl enable apache2 --now
Il webserver con Apache è configurato e pronto. Possiamo verificarne il corretto funzionamento accedendo alla pagina di test tramite l'URL
http://srv.example.local/test.html
Passiamo ora a installare Java
NB: dobbiamo usare il pacchetto JDK e non il JRE!
sudo apt install openjdk-11-jdk openjdk-11-jdk-headless -y
Per verificare l'installazione di Java e vedere la versione possiamo usare
java -version
Facciamo l'ultima installazione:
- installiamo il pacchetto LibreOffice
sudo apt install libreoffice unoconv
- infine prepariamo la unit per far girare LibreOffice in modalità server. A questo scopo useremo una funzione di unoconv per semplificarci la vita nelle sintassi.
Creiamo il file libreoffice.service
sudo nano /lib/systemd/system/libreoffice.service
• popoliamolo con le seguenti stringhe
[Unit]
Description=LibreOffice service
After=syslog.target
[Service]
# ExecStart=soffice '--headless --accept='socket,host=127.0.0.1,port=8100;urp;' --nofirststartwizard"
ExecStart=unoconv -l -p 8100 2> /dev/null
Restart=always
KillSignal=SIGQUIT
Type=simple
StandardError=syslog
User=unoconv
[Install]
WantedBy=multi-user.target
- forziamo la rilettura delle unit disponibili
sudo systemctl daemon-reload
- creiamo l'utente per la unit
useradd -m -d /var/lib/unoconv -s /usr/sbin/nologin unoconv
- attiviamo e avviamo la nostra nuova unit libreoffice
sudo systemctl enable libreoffice --now
- verifichiamo il corretto funzionamento della unit e del servizio LibreOffice (nota: riportiamo solo uno stralcio dell’output a titolo di esempio per capire cosa dovremmo vedere)
sudo systemctl status libreoffice
● libreoffice.service - LibreOffice service
Loaded: loaded (/lib/systemd/system/libreoffice.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-05-22 09:38:21 UTC; 19s ago
Main PID: 733 (python3)
Tasks: 4 (limit: 9382)
Memory: 417.3M
CPU: 1.821s
CGroup: /system.slice/libreoffice.service
├─ 733 python3 /usr/bin/unoconv -l -p 8100 "2>" /dev/null
└─1076 /usr/lib/libreoffice/program/soffice.bin --headless --invisible --nocrashreport --nodefault --nologo --nofirststartwizard --norestore "->
sudo ps axwww|grep office
1076 ? Sl 0:01 /usr/lib/libreoffice/program/soffice.bin --headless --invisible --nocrashreport --nodefault --nologo --nofirststartwizard --norestore --accept=socket,host=127.0.0.1,port=8100,tcpNoDelay=1;urp;StarOffice.ComponentContext
1602 pts/0 R+ 0:00 grep --color=auto office
Abbiamo completato l'ambiente. Passiamo ora a installare Liferay.
4. Installazione di Liferay
- Iniziamo creando l'utente proprietario del processo di Liferay
useradd -m -d /opt/liferay -s /usr/sbin/nologin liferay
- Prepariamo una directory temporanea per il download
mkdir Temp && cd Temp
- scarichiamo il pacchetto
wget https://github.com/liferay/liferay-portal/releases/download/7.4.3.112-ga112/liferay-ce-portal-tomcat-7.4.3.112-ga112-20240226061339195.tar.gz
- estraiamo il pacchetto
sudo tar xfz liferay-ce-portal-tomcat-7.4.3.112-ga112-20240226061339195.tar.gz -C /opt/
- sistemiamo i file e correggiamo i permessi
sudo mv /opt/liferay-ce-portal-7.4.3.112-ga112/* /opt/liferay/
sudo rm -r /opt/liferay-ce-portal-7.4.3.112-ga112
sudo chown liferay:liferay /opt/liferay
- procediamo rendendo eseguibili gli script di avvio
cd /opt/liferay/tomcat-9.0.83
sudo chmod +x bin/*sh
sudo rm bin/*bat
- aggiorniamo la configurazione di Tomcat: editiamo server.xml
nano conf/server.xml
- aggiorniamo il connector sulla porta 8080 come segue
<Connector port=”8080”
protocol=”HTTP/1.1”
connectionTimeout=”20000”
redirectPort=”8443”
maxParameterCount="1000"
URIEncoding="UTF-8"
proxyName="www.example.local"
/>
- creiamo il property file portal-ext.properties necessario, in questo momento, per il reverse proxy e poi per impostare l'italiano come lingua default: creiamo il file
sudo nano /opt/liferay/portal-ext.properties
- popoliamolo con le seguenti stringhe
company.default.locale=it_IT
virtual.hosts.valid.hosts=www.example.local,srv.example.local,localhost
- e correggiamo i permessi
sudo chown liferay:liferay /opt/liferay/portal-ext.properties
- ora possiamo lanciare Liferay: avviamo manualmente Liferay impersonando l'utente liferay
sudo su - liferay -c "/opt/liferay/tomcat-9.0.83/bin/startup.sh"
- possiamo verificare l'avanzamento dell'avvio tramite il file di log catalina.out
sudo tail -f /opt/liferay/tomcat-9.0.83/logs/catalina.out
- completiamo l'inizializzazione. Attraverso un browser, da un PC collegato in rete al nostro server, colleghiamoci all'URL http://www.example.local
- comparirà la form riprodotta qui di seguito
- completiamola come segue.
Per il database bisogna cliccare sul link “(Change)” per espandere la form e poter scegliere un database enterprise. Dopo la corretta compilazione clicchiamo sul "Finish Configuration"
I dati da inserire con assoluta attenzione sono:
- First Name: Test
- Last Name: Test
- Email:
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. - Database Type: MariaDB
- JDBC URL:
jdbc:mariadb://localhost/liferay?* - JDBC Driver Class Name:
org.mariadb.jdbc.Driver - User Name: liferay
- Password: lifePass77f3
NOTE:
email: sarà la user name per il primo accesso;
database type: selezionandolo precompila i campi sotto;
JDBC URL: per motivi di spazio qui è riportato il segmento rilevante di tutta la stringa. Dopo la parte jdbc:mariadb://localhost/
va inserito il corretto nome del database;
User Name: si tratta della username di accesso al database;
Password: si tratta della password per l’accesso al database.
- Dopo aver cliccato su "Finish Configuration" compare la seguente pagina di conferma
- Stoppiamo Liferay
sudo su - liferay -c "/opt/liferay/tomcat-9.0.83/bin/shutdown.sh"
- monitoriamo lo stop del server tramite il file di log catalina.out
sudo tail -f /opt/liferay/tomcat-9.0.83/logs/catalina.out
La comparsa della strana riga *ERROR* Worker thread CM Configuration Updater did not terminate within 5 seconds; trying to kill
ci conferma l'arresto.
A questo punto possiamo riavviare Liferay e sarà funzionante.
Dopo l’avvio accederemo per fare due attività di configurazione e attivazione dei servizi esterni, condizione necessaria per il completo funzionamento di tutti i servizi di Liferay.
- Avviamo Liferay
sudo su - liferay -c "/opt/liferay/tomcat-9.0.83/bin/startup.sh"
- questo nuovo avvio sarà un po' più lungo perché Liferay crea e popola tutte le tabelle del database
- al termine di questa operazione sarà disponibile la home di default
• clicchiamo su "Sign In" e autentichiamoci con le credenziali:
Email address:
Password: test
• Accettiamo i termini d'uso, inseriamo la nostra nuova password e mettiamo la risposta alla domanda per il recovery;
• nella pagina di home clicchiamo sul menu global
• accediamo a Control Panel -> Server Administration
• accediamo al tab "External Services" e personalizziamolo come segue:
◦ abilitiamo il servizio
◦ impostiamo i path corretti
/usr/bin:/usr/share/ghostscript/fonts:/usr/share/fonts/opentype/urw-base35
◦ e clicchiamo sul bottone "Save" in basso
• clicchiamo nuovamente sul menu globale e Control Panel -> System Settings
• clicchiamo su "Connectors"
• attiviamo "Server Enabled"
• clicchiamo sul bottone "Save"
• clicchiamo nuovamente sul menu globale e accediamo a Control Panel -> Istance Settings
◦ clicchiamo su "Localization"
◦ togliamo tutte le lingue che non ci interessano da Current, mettiamo Italian dalla colonna Available, portiamo Italian in prima posizione e clicchiamo sul bottone "Save"
◦ selezioniamo in Default Language, Italian e clicchiamo sul bottone "Save"
• Per avere un cambio completo della lingua modifichiamo la lingua dell'utente che usiamo.
Clicchiamo sull'icona dell'utente e poi su Account Settings
• impostiamo il campo Language con Italiano e clicchiamo sul bottone Save in basso
Con quest'ultima operazione anche le voci di menu diventano in italiano. Resteranno in inglese i testi della pagine di default.
A questo punto le prime impostazioni sono settate. Mancano i dati dell'azienda (indirizzo, contatti, ecc...). A seconda del nostro progetto possiamo impostare diversi altri parametri (come l'indirizzo sui social, se i commenti ci sono, se sono liberi, ecc…).
Ovviamente, oltre a questo, c'è da creare le pagine, popolarle, creare gli eventuali altri siti, se abbiamo più nodi saranno da impostare i nomi, interconnetterli, trustarli, ecc...
Insomma: a seconda del nostro progetto può essere necessario ancora molto lavoro di base.
Tralasciando questo all'attività di ciascuno, vediamo qui di seguito l'ultimo passo: automatizzare l'avvio.
5. Automatizzare l'avvio
Fino a questo punto abbiamo impostato l'avvio automatico di MariaDB, Apache e del servizio libreoffice. A questo stack manca solo l'avvio di Liferay. L'avvio di questo lancia anche Elasticsearch. Procediamo:
- creiamo la unit liferay.service
sudo nano /lib/systemd/system/liferay.service
- • popoliamolo con le seguenti stringhe
[Unit]
Description=Liferay service
After=syslog.target network.target mariadb.service apache2.service libreoffice.service
[Service]
ExecStart=/opt/liferay/tomcat-9.0.83/bin/startup.sh
ExecStop=/opt/liferay/tomcat-9.0.83/bin/shutdown.sh
Restart=always
KillSignal=SIGQUIT
Type=simple
StandardError=syslog
User=liferay
[Install]
WantedBy=multi-user.target
• forziamo la rilettura delle unit disponibili
sudo systemctl daemon-reload
• attiviamo e avviamo il servizio
sudo systemctl enable liferay --now
A questo punto abbiamo fatto tutto.
Attendiamo qualche istante e verifichiamo il corretto avvio di Liferay collegandoci via web all'URL http://www.example.local .
È buona pratica far ripartire tutto il server controllando il corretto spegnimento e avvio.
Fatto questo possiamo considerare terminata l'installazione e possiamo dedicarci al tuning di Liferay e a creare il nostro sito e i nostri servizi.
6. Note finali
Prima di passare alla conclusione fanno fatte alcune considerazioni.
Firewall: il tema non è stato volutamente citato e gestito in questa guida. Ricordiamoci di attivarlo tenendo aperte le porte 80 e 443 (ovvero l'HTTP e l'HTTPS).
FQDN: se pensiamo ad una installazione reale va preso un dominio ed un hostname reale necessario per il corretto funzionamento sia di Liferay, sia di HTTPS.
HTTPS: in tutti i casi, eccetto quelli didattici e di test, le risorse web vanno esposte con il protocollo HTTPS. In questa guida non si spiega come acquisire il certificato necessario e impostare la corretta configurazione di Apache. Internet offre svariate guide ben fatte e ci sono anche i manuali ufficiali di Let's Encrypt (https://letsencrypt.org/) e di CertBot (https://certbot.eff.org/).
EMAIL: Liferay usa un account email per inviare comunicazioni. Ricordarsi, nelle configurazioni, di aggiungere un account email reale e funzionante.
Setting di fino: in fine si tenga presente che è necessario apportare diverse configurazioni di fino per avere un servizio Liferay che fa bene tutto quello che deve fare. A questo scopo è necessario avere chiaro il progetto che si sta realizzando. Questa attività richiede un po' di tempo.
7. Conclusione
Questa guida può essere di aiuto a chi non conosce Liferay e desidera imparare l'installazione eseguendo una procedura che gli faccia sperimentare tutte le parti in gioco. Queste pagine aspirano a raggiungere questo obiettivo.
Pertanto è intenzionale il non aver menzionato la procedura con i container Docker: facile, veloce, ma copre tutta la complessità e flessibilità di Liferay e degli AS.
Liferay è un applicativo molto potente, ricco e che permette configurazioni anche molto complesse. Ciò significa che sono necessarie buone conoscenze del software e di qualche altra tecnologia informatica (come reti, protocollo HTTPS, Elasticsearch, ecc...).
Insomma: serve studio, impegno e tempo, ma i risultati sono altamente soddisfacenti e redditizi. Come quello che si ottiene dopo aver realizzato quanto descritto in queste pagine.
8. Webgrafia
Digital Experience Software Tailored to Your Needs - Liferay, https://www.liferay.com
Liferay Learn, https://learn.liferay.com/
Releases · liferay/liferay-portal, https://github.com/liferay/liferay-portal/releases
Applications - Marketplace - marketplace.liferay.com, https://marketplace.liferay.com/home
Liferay Community, https://liferay.dev/
Liferay Help Center, https://help.liferay.com/
Liferay DXP Quarterly Releases (7.4) Compatibility Matrix, https://help.liferay.com/hc/en-us/articles/4411310034829-Liferay-DXP-Quarterly-Releases-7-4-Compatibility-Matrix