Installare Liferay 7.4 in Ubuntu Server 20.4: copertina

Una guida pratica per eseguire il portale Liferay.

Downloads:
zip Installare Liferay 7.4 in Ubuntu Server 20.4

Una guida pratica per eseguire il portale Liferay.

File in formato PDF, ODT e DOCX

Unica guida in italiano per installare Liferay 7.4

Data22-05-2024
Dimensioni del File 10.45 MB
Download 26

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 password securePass32. È bene, in produzione, usare una migliore password. Inoltre qui di seguito riportiamo solo una parte delle richieste mariadb-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 Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
    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

Schermata di installazione

  • 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" 

Setting installazione 1

Setting di installazione 2

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

Scherma di comunicazione fine installazione

  • 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

Prima schermata di home

• clicchiamo su "Sign In" e autentichiamoci con le credenziali:
          Email address:    Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
          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

Accesso al menu global

• accediamo a Control Panel -> Server Administration

Menu global

• 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

Settaggio servizi esterni

• clicchiamo nuovamente sul menu globale e Control Panel -> System Settings

Menu globale: pagina delle impostazioni di sistema

• clicchiamo su "Connectors"

• attiviamo "Server Enabled"

• clicchiamo sul bottone "Save"

Pagina impostazione dell'integrazione con OpenOffice-LibreOffice

• clicchiamo nuovamente sul menu globale e accediamo a Control Panel -> Istance Settings

Menu globale, impostazione instanza

 

Pagina settaggi istanza

◦ 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"

Impostazioni lingue disponibili nel portale

◦ selezioniamo in Default Language, Italian e clicchiamo sul bottone "Save"

Impostazioni lingue disponibili nel portale

• Per avere un cambio completo della lingua modifichiamo la lingua dell'utente che usiamo.
Clicchiamo sull'icona dell'utente e poi su Account Settings

Accesso al menu Account Setting

• impostiamo il campo Language con Italiano e clicchiamo sul bottone Save in basso

Pagina Impostazioni account

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