Guida per realizzare un server Alfresco + Tomcat + JMX.
Instroduzione
Lo scenario in cui operiamo è quello descritto nell'articolo "Guida per installare Alfresco 7 dal pacchetto zip in Linux Ubuntu" (https://www.digitaldsb.it/portal/informatica/guida-per-installare-alfresco-7-dal-pacchetto-zip-in-linux-ubuntu).
Nell'installazione default il monitorin JMX (Java Management Extensions) è disattivato.
Per attivarlo dobbiamo intervenire prima sul server configurando opportunamente Tomcat e Alfresco.
Successivamente ci spostiamo sul PC da cui operiamo (un Linux Ubuntu 24 o Maint 24) e useremo VisualVM o JConsole per connetterci e monitorare il nostro server.
NB: le indicazioni sul manuale ufficiale di Liferay e diverse guide in rete non funzionano. Questo perché fanno riferimento standard e pre-configurazioni attualmente superate.
JMX base
Server JVM
Iniziamo spegnedo tutto lo stack Alfresco
sudo systemctl stop alfresco-stack
aggiungiamo le properties Java per attivare JMX
sudo nano /opt/kbsb/alf/tomcat/bin/setenv.sh
aggiorniamo la variabile CATALINA_OPTS come segue
CATALINA_OPTS="-Xms6G -Xmx8G -server -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=50500 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
le properties che ci interessano sono e significano:
- -Dcom.sun.management.jmxremote: attiva JMX
- -Dcom.sun.management.jmxremote.port=50500: definisce la porta 50500 come porta dove ascoltare JMX
- -Dcom.sun.management.jmxremote.ssl=false: disattiva la connessione securizzata con crittografia TLS
- -Dcom.sun.management.jmxremote.authenticate=false: disattiva l'autenticazione per accedere al monitoring
procediamo configurando Alfresco. Aggiungiamo le seguenti stringe in fondo al file alfresco-global.properties
sudo nano /opt/kbsb/alf/tomcat/shared/classes/alfresco-global.properties
[ ... ]## Enable JMX on port 50500#alfresco.jmx.connector.enabled=truealfresco.rmi.services.port=50500alfresco.rmi.services.host=0.0.0.0
le direttive aggiunte significano:
- alfresco.jmx.connector.enabled=true: attiva il connettore JMX
- alfresco.rmi.services.port=50500: il servizio è sulla porta 50500
- alfresco.rmi.services.host=0.0.0.0: il monitoring può essere fatto da qualsiasi IP e qualsiasi host
riavviamo lo stack Alfresco
systemctl start alfresco-stack
passiamo ora al nostro PC client per attivare il client che ci farà vedere il monitoring.
Client JVM
Iniziamo facendo il login con un utente abilitato come amministratore.
Per vedere JMX abbiamo bisogno di un client. Possiamo usare JConsole: preinstallato, ma graficamente povero.
Possiamo usare VisualVM: da installare, ma graficamente più evoluto e con qualcosa in più.
Procediamo aprendo un terminale (da tastiera possiamo usare la combinazione CTRL+ALT+T).
Installiamo VisualVM:
sudo apt install visualvm
lanciamo VisualVM.
Da "File" clicchiamo su "Add JMX Connection..." e completiamo la form come segue:
- Connection: service:jmx:rmi:///jndi/rmi://www.example.com:50500/jmxrmi
- Display name: Mio server Alf
- Use security credentials: NO
- Do not require SSL connection: SI
- Connect immediately: SI
- Connect automatically: SI

A questo punto abbiamo finito e inizieremo a vedere subito status, grafici e report.

Considerazioni
Il processo di attivazione descritto è piuttosto semplice, ma così configurato è totalmente insicuro in quanto chiunque potrebbe accedere e fare di tutto.
JMX securizzato
Ci sono diverse securizzazioni su cui possiamo operare:
1. introdurre un'account per accedere al monitoring
2. definire quale host o rete può accedere
3. restringere i permessi in base all'account di accesso
4. criptare il traffico tramite SSL\TLS.
Procediamo creando un'account.
Server JVM
Iniziamo spegnendo tutto lo stack Alfresco
sudo systemctl stop alfresco-stack
aggiungiamo le properties Java per attivare JMX
sudo nano /opt/kbsb/alf/tomcat/bin/setenv.sh
aggiorniamo la variabile CATALINA_OPTS come segue
CATALINA_OPTS="-Xms6G -Xmx8G -server -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=50500 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.access.file=/opt/kbsb/alf/tomcat/conf/jmxremote.access -Dcom.sun.management.jmxremote.password.file=/opt/kbsb/alf/tomcat/conf/jmxremote.password "
le properties che ci interessano sono e significano:
- -Dcom.sun.management.jmxremote.access.file: file con i ruoli (username e ruolo)
- -Dcom.sun.management.jmxremote.password.file: file con le account (username e password)
procediamo creando il file delle account:
sudo nano /opt/kbsb/alf/tomcat/conf/jmxremote.password
monitorRole Password#Monitor01controlRole Password#Control01
procediamo creando il file con i ruoli:
sudo nano /opt/kbsb/alf/tomcat/conf/jmxremote.access
monitorRole readonlycontrolRole readwrite
correggiamo la sicurezza per i due file creati
sudo chown tomcat:tomcat /opt/kbsb/alf/tomcat/conf/jmxremote.*sudo chmod 600 /opt/kbsb/alf/tomcat/conf/jmxremote.*
riavviamo lo stack Alfresco
sudo systemctl start alfresco-stack
passiamo ora al nostro PC client per attivare il client che ci farà vedere il monitoring.
Client JVM
La configurazione del client è identica alla precedente, ma dobbiamo aggiungere le credenziali per autenticarci:
- Connection: service:jmx:rmi:///jndi/rmi://www.example.com:50500/jmxrmi
- Display name: Mio server Alf Auth
- Use security credentials: SI
- Username: controlRole
- Password: Password#Control01
- Save security credentials: SI
- Do not require SSL connection: SI
- Connect immediately: SI
- Connect automatically: SI

A questo punto abbiamo finito e inizieremo a vedere subito status, grafici e report.

Considerazioni
La securizzazione è un capitolo complesso, ma fondamentale.
Quanto sopra esposto è una minimalizzazione didattica.
Sarà utile, se abbiamo un'installazione di Alfresco in produzione, approfondire e migliorare la securizzazione.
WebGrafia
https://tomcat.apache.org/tomcat-10.0-doc/monitoring.html
https://geekflare.com/dev/enable-jmx-tomcat-to-monitor-administer/