Questo piccola guida illustra l'istallazione di Alfresco 7.4 dal pacchetto ZIP in un server Ubuntu 22 LTS.

Controcorrente rispetto alle architetture container e cloud, questa guida illustra il vecchio processo.
Obiettivo della guida è di abilitare il system manager ad un'installazione stand-alone.
Questa installazione oltre ad esser completamente funzionante è il passo necessario per i nodi di un cluster Alfresco.
In conclusione: una guida necessaria per un uso personale offline, per un sistemista del cluster Alfresco, una guida necessaria per gli informatici esperti Java e cloud per Alfresco.
1. Panoramica
Questa guida ipotizza la seguente situazione:
• un host unico che contiene tutto (spazio, Java, Alfresco e reverseproxy)
• connessioni di rete in coppie di 2 in bond con:
◦ bond 1: su rete di gestione amministrazione
◦ bond 2: su rete del cluster di nodi Alfresco
◦ bond 3: su rete LAN/WAN
• OS: Ubuntu Server 22.04 LTS
• backend:
◦ storage ZFS
◦ DB con MariaDB
◦ Java con JDK OpenJava 11.x
◦ accesso amministrativo via SSH.
Dopo la descrizione iniziale delle configurazioni la guida proseguirà come se non usassimo ZFS, né 3 reti differenti.
2. Installazione OS
Installiamo Ubuntu come sopra illustrato:
• / l'OS
• /var i log
• /opt tutto il resto per Alfresco e lo storage.
3. Alfresco
3.1. Installazione
Dopo aver installato Ubuntu Server 22.04 LTS secondo le indicazioni sopra esposte procediamo a configurare l'ambiente come segue:
• Hostname: alfresco1
• nel file /etc/hosts inseriti questi record
NB 1: IP e hostname sono da personalizzare per la propria situazione
NB 2: si inserisce anche un presunto record DNS MX. Di seguito non si descrive né l'implementazione di un mail server, né la configurazione e registrazione DNS.
[ ... ]
Alias srv1.example.com srv1
Alias www.example.com www
Alias mx1.example.com
• aggiorniamo
apt update && apt upgrade -y && apt autoremove -y && systemctl reboot
3.2. Tool
• Installiamo un set di tool base
sudo apt install -y vim tmux mc htop iftop neofetch mc iotop lnav wget curl net-tools nmap && apt install -y ethtool net-tools lsof apt-transport-https unzip ethtool openssl
• configuriamo sudo
sudo vim /etc/sudoers.d/sudo
[ ... ]
# %sudo ALL= NOPASSWD: ALL
%sudo ALL=(ALL:ALL) ALL
• settare la rete:
◦ installiamo le parti terze e carichiamo il modulo bonding
sudo apt install -y ifenslave
sudo modprobe bonding
sudo lsmod | grep bonding
sudo echo 'bonding' | sudo tee -a /etc/modules
◦ creare il descrittore della configurazione
NB: personalizzare IP e route in base alla propria rete
sudo mv /etc/netplan/00-installer-config.yaml{,.ORG}
sudo vim /etc/netplan/01-bonding-config.yaml
network:
version: 2
ethernets:
enp1s0:
dhcp4: no
match:
macaddress: 52:54:00:05:d4:44
wakeonlan: true
enp11s0:
dhcp4: no
match:
macaddress: 52:54:00:E5:b7:04
wakeonlan: true
enp12s0:
dhcp4: no
enp13s0:
dhcp4: no
enp14s0:
dhcp4: no
enp15s0:
dhcp4: no
bonds:
bond0:
interfaces: [enp1s0, enp11s0]
addresses:
- 192.168.122.90/24
nameservers:
addresses:
- 192.168.122.1
search: []
routes:
- to: default
via: 192.168.122.1
parameters:
mode: 802.3ad
transmit-hash-policy: layer3+4
mii-monitor-interval: 1
bond1:
interfaces: [enp12s0, enp13s0]
addresses:
- 192.168.100.90/24
parameters:
mode: 802.3ad
transmit-hash-policy: layer3+4
mii-monitor-interval: 1
bond2:
interfaces: [enp14s0, enp15s0]
dhcp4: yes
dhcp6: yes
parameters:
mode: 802.3ad
transmit-hash-policy: layer3+4
mii-monitor-interval: 1
sudo netplan try
sudo netplan apply
sudo systemctl restart networking
• personalizzazione di /etc/hosts
sudo vim /etc/hosts
[ ... ]
127.0.0.1 srv1
[ ... ]
192.168.122.2 srv1.example.com
192.168.122.2 www.example.com www
192.168.122.2 mx1.example.com mx1
3.3. Storage ZFS
A titolo d'esempio provvediamo a creare un dataset ZRAID che monteremo in /opt .
• Installiamo ZFS
sudo apt install zfsutils-linux -y
• creiamo il dataset data
sudo zpool create -m /opt data raid2 /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj spare /dev/sdk /dev/sdl
• verifichiamo il pool creato
sudo zpool list
3.4. NTP
• Installiamo l'NTP chrony e settiamolo
sudo apt install -y chrony
• editiamo /etc/chrony/chrony.conf
sudo vim /etc/chrony/chrony.conf
[ ... ]
# pool ntp.ubuntu.com iburst maxsources 4
# pool 0.ubuntu.pool.ntp.org iburst maxsources 1
# pool 1.ubuntu.pool.ntp.org iburst maxsources 1
# pool 2.ubuntu.pool.ntp.org iburst maxsources 2
server 0.it.pool.ntp.org iburst
server 1.it.pool.ntp.org iburst
server 2.it.pool.ntp.org iburst
server 3.it.pool.ntp.org iburst
[ ... ]
• riavviamo e verifichiamo lo stato
sudo systemctl stop chrony
sudo chronyd -q 'server 0.it.pool.ntp.org iburst'
sudo chronyd -q 'server 0.it.pool.ntp.org iburst'
sudo systemctl restart chrony
sudo chronyc sources -v
sudo chronyc sourcestats
4. Parti terze
4.1. Applicativi generali
Installiamo le parti terze che servono ad Alfresco.
• Installiamo e settiamo lm-sensor
sudo apt install -y lm-sensors
sudo sensors-detect
sudo systemctl restart kmod
sudo sensors
• installiamo alcune utility
sudo apt install -y wamerican-huge wspanish wogerman witalian fonts-crosextra-caladea fonts-crosextra-carlito
sudo apt install -y hunspell hunspell-es hunspell-de-de hunspell-en-us hunspell-it
• Installiamo unoconv
sudo apt install -y unoconv
• installiamo LibreOffice
sudo apt install -y libreoffice
• installiamo ImageMagick
sudo apt install -y imagemagick
• installiamo ExifTool
sudo apt install -y exiftool
• installiamo ffmpeg
sudo apt install -y ffmpeg
4.2. Java JDK
• Installiamo il JDK ed il JRE 1.11
NB: Alfresco CE non gira OpenJDK 17
sudo apt install -y openjdk-11-jdk openjdk-11-jdk-headless && apt install -y openjdk-11-jre openjdk-11-jre-headless
• verificare la versione installata
java --version
4.3. Apache Tomcat
Procediamo installando Tomcat 09.
NB: procediamo prima con l'installazione standard. Al momento di deployare il WAR di Alfresco faremo le personalizzazioni del caso con la rimozione del tool di gestione dell'AS.
• Scarichiamo la versione 9 di Tomcat
mkdir Temp
cd Temp
wget
https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz
• creiamo l'utente dedicato
sudo mkdir /opt/alfresco
sudo useradd -m -U -d /opt/alfresco/tomcat -s /bin/false tomcat
• estraiamo il pacchetto Tomcat e sistemiamo nomi e permessi
sudo tar xfz apache-tomcat-9.0.80.tar.gz -C /opt/alfresco
sudo mv /opt/alfresco/apache-tomcat-9.0.80 /opt/alfresco/tomcat
sudo chown tomcat:tomcat -R /opt/alfresco/tomcat
sudo chmod +x /opt/alfresco/tomcat/bin/*sh
sudo rm /opt/alfresco/tomcat/bin/*bat
• creiamo la unit
sudo vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat 10 servlet container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"
Environment="CATALINA_BASE=/opt/alfresco/tomcat"
Environment="CATALINA_HOME=/opt/alfresco/tomcat"
Environment="CATALINA_PID=/opt/alfresco/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/alfresco/tomcat/bin/startup.sh
ExecStop=/opt/alfresco/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start tomcat
sudo systemctl status tomcat
• verifichiamo il corretto avvio connettendoci all'URL http://www.server.com:8080/
• stoppiamo Tomcat
systemctl stop tomcat
4.4. MariaDB
• Installiamo i certificati
sudo curl -fsSL http://mirror.mariadb.org/PublicKey_v2 | sudo gpg --dearmor | sudo tee /usr/share/keyrings/mariadb.gpg > /dev/null
• Installiamo i repo
sudo echo "deb [arch=amd64,arm64,ppc64el signed-by=/usr/share/keyrings/mariadb.gpg] http://mirror.mariadb.org/repo/11.1/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/mariadb.list
• e installiamo MariaDB
sudo apt install -y mariadb-server
• attiviamo e avviamo MariaDB
sudo systemctl enable mariadb
sudo systemctl restart mariadb
sudo systemctl status mariadb
• verifichiamo la versione
mariadb --version
• securizziamo MariaDB
sudo mariadb-secure-installation
[ ... ]
Switch to unix_socket authentication [Y/n] n
[ ... ]
Change the root password? [Y/n]
[ ... ]
New password: <standard easy>
Re-enter new password: <standard easy>
[ ... ]
4.5. ActiveMQ
Ubuntu ha nei repo la 5.16, ma serve almeno la 5.17, pertanto installiamo a mano 5.18.2 (attualmente la più recente).
• Aggiungiamo l'utente riservato per ActiveMQ
sudo useradd -m -U -d /opt/activemq -s /bin/false activemq
• scarichiamo il pacchetto
wget
https://dlcdn.apache.org//activemq/5.18.2/apache-activemq-5.18.2-bin.tar.gz
• estraiamo e sistemiamo la sicurezza
sudo tar xfz apache-activemq-5.18.2-bin.tar.gz -C /opt/
sudo mv /opt/apache-activemq-5.18.2 /opt/activemq
sudo chown activemq:activemq -R /opt/activemq
• personalizziamo la configurazione
NB: nel portarlo in produzione rimetterlo su localhost!!
sudo vim /opt/activemq/conf/jetty.xml
[ ... ]
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<!-- property name="host" value="127.0.0.1"/ -->
<property name="host" value="0.0.0.0"/>
<property name="port" value="8161"/>
</bean>
[ ... ]
• creiamo la unit systemd
sudo vim /usr/lib/systemd/system/activemq.service
[Unit]
Description=Apache ActiveMQ Message Broker
After=network-online.target
[Service]
Type=forking
User=activemq
Group=activemq
WorkingDirectory=/opt/activemq/bin
ExecStart=/opt/activemq/bin/activemq start
ExecStop=/opt/activemq/bin/activemq stop
Restart=on-abort
[Install]
WantedBy=multi-user.target
• avviare e verificare ActiveMQ
sudo systemctl daemon-reload
sudo systemctl start activemq
sudo systemctl status activemq
• verificare accedendo al pannello di controllo
http://vm09.kbsb.loc:8161/admin
Username: admin
Password: admin
• spegnere e disattivare ActiveMQ
sudo systemctl stop activemq
sudo systemctl disable activemq
• cambiare la password
sudo vim /opt/activemq/conf/jetty-realm.properties
[ ... ]
admin: activePass23, admin
#user: user, user
alfresco: alfrescoPass, user
5. Install Alfresco
5.1. Attività preparatorie
• Installiamo Tesseract con alcune lingue
sudo apt install -y tesseract-ocr tesseract-ocr-ita tesseract-ocr-eng tesseract-ocr-spa tesseract-ocr-fra
• Impostiamo MariaDB e creiamo il DB:
◦ editiamo /etc/mysql/mariadb.conf.d/50-server.cnf
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
◦ impostiamo max_connections a 275 come segue
[ ... ]
#max_connections = 100
max_connections = 275
[ ... ]
◦ e riavviamo MariaDB
sudo systemctl restart mariadb
• creare il DB
mariadb -h localhost -u root
CREATE DATABASE alfresco DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
GRANT ALL PRIVILEGES ON alfresco.* TO alfresco@localhost IDENTIFIED BY 'alfresco';
FLUSH PRIVILEGES;
quit;
• scaricamento e pubblicazione connector
wget https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/2.2.6/mariadb-java-client-2.2.6.jar
sudo cp mariadb-java-client-2.2.6.jar /opt/alfresco/tomcat/lib/
sudo chown tomcat:tomcat /opt/alfresco/tomcat/lib/mariadb-java-client-2.2.6.jar
5.2. Preparazione Alfresco
• Scarichiamo lo zip Alfresco
• estrarre il pacchetto
sudo mkdir /opt/alfresco_data
mkdir alfresco-content-services-community-distribution-7.4
cp alfresco-content-services-community-distribution-7.4.0.1.zip alfresco-content-services-community-distribution-7.4/
cd alfresco-content-services-community-distribution-7.4
unzip alfresco-content-services-community-distribution-7.4.0.1.zip
sudo rm -R /opt/alfresco/tomcat/webapps/*
sudo cp -r web-server/conf/* /opt/alfresco/tomcat/conf/
sudo cp -r web-server/lib/* /opt/alfresco/tomcat/lib/
sudo cp -r web-server/shared /opt/alfresco/tomcat/shared
sudo mkdir /opt/alfresco/tomcat/shared/lib
sudo cp -r web-server/webapps/* /opt/alfresco/tomcat/webapps/
sudo cp -r amps /opt/alfresco/
sudo cp -r bin /opt/alfresco/
sudo cp -r licenses /opt/alfresco/
sudo cp -r keystore /opt/alfresco_data
sudo cp ../mariadb-java-client-2.2.6.jar /opt/alfresco/tomcat/lib/
• aggiungere il classpath per Alfresco
sudo vim /opt/alfresco/tomcat/conf/catalina.properties
[ ... ]
shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar
[ ... ]
• impostare il connector di Tomcat
sudo vim /opt/alfresco/tomcat/conf/server.xml
[ ... ]
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
URIEncoding="UTF-8"
maxHttpHeaderSize="32768"
/>
[ ... ]
• creare setenv.sh e impostare le variabili per lo store di criptazione
NB 1: tipo e password del keystore sono nel file keystore-passwords.properties
NB 2: questo settaggio fino alla versione 6.x non era necessario. Dalla 7.x la criptazione è obbligatoria
NB 3: per creare nuovi keystore usare il programma https://github.com/Alfresco/alfresco-ssl-generator
NB 4: la manualistica indica di usare la variabile JAVA_TOOL_OPTIONS per passare i parametri del keystore alla JVM. In Linux con Tomcat bisogna usare JAVA_OPTS
sudo vim /opt/alfresco/tomcat/bin/setenv.sh
#
# Settaggio e chiavi per la criptazione
JAVA_OPTS="$JAVA_OPTS -Dencryption.keystore.type=JCEKS -Dencryption.cipherAlgorithm=DESede/CBC/PKCS5Padding -Dencryption.keyAlgorithm=DESede -Dencryption.keystore.location=/opt/alfresco_data/keystore/metadata-keystore/keystore -Dmetadata-keystore.password=mp6yc0UD9e -Dmetadata-keystore.aliases=metadata -Dmetadata-keystore.metadata.password=oKIWzVdEdA -Dmetadata-keystore.metadata.algorithm=DESede"
#
# Dimensionamento RAM: necessario aumentarla per gli indici
# Farlo anche in Solr altrimenti crasha durante l'attività
JAVA_OPTS="-Xms1G -Xmx5G $JAVA_OPTS " # java-memory-settings
• impostiamo le proprietà globali come segue
sudo cp /opt/alfresco/tomcat/shared/classes/alfresco-global.properties.sample /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
sudo vim /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
# The server mode. Set value here
# UNKNOWN | TEST | BACKUP | PRODUCTION
system.serverMode=TEST
#
# Solr connection
# solr.secureComms=https
#
# Criptation store
#alfresco.secureComms=none
#
# Content and index data location and keystore to crypt
#
dir.root=/opt/alfresco_data/
dir.keystore=/opt/alfresco_data/keystore
#
# Setting to keystore
db.schema.update=true
db.name=alfresco
db.username=alfresco
db.password=alfresco
db.host=localhost
db.port=3306
db.pool.max=275
db.driver=org.mariadb.jdbc.Driver
db.url=jdbc:mysql://${db.host}:${db.port}/${db.name}?useUnicode=yes&characterEncoding=UTF-8
dir.license.external=/opt/licenses
alfresco.context=alfresco
alfresco.host=${localname}
alfresco.port=8080
alfresco.protocol=http
share.context=share
share.host=${localname}
share.port=8080
share.protocol=http
• sistemare i permessi
sudo chown tomcat:tomcat -R /opt/alfresco_data /opt/alfresco
5.3. Applicare share.amp
NB: se non si pubblica il modulo share.amp Alfresco parte regolarmente, si accede anche a Share, ma non si ha accesso e possibilità di gestione alle directory e non si può caricare-gestire alcun file!
sudo su - -s /bin/bash tomcat
cd /opt/alfresco/bin
bash apply_amps.sh
exit
5.4. Ultimi setting
• Creiamo le directory dei moduli
mkdir -p /opt/alfresco/modules/platform
mkdir -p /opt/alfresco/modules/share
chown tomcat:tomcat -R /opt/alfresco
• impostiamo i log di Alfresco
sudo su - -s /bin/bash tomcat
cd /opt/alfresco/tomcat/webapps/
mkdir alfresco
cp alfresco.war alfresco/
cd alfresco/
jar -xvf alfresco.war
rm alfresco.war
vim WEB-INF/classes/log4j2.properties
[ ... ]
# appender.rolling.fileName=alfresco.log
# appender.rolling.filePattern=alfresco.log.%d{yyyy-MM-dd}
appender.rolling.fileName=/opt/alfresco/tomcat/logs/alfresco.log
appender.rolling.filePattern=/opt/alfresco/tomcat/logs/alfresco.log.%d{yyyy-MM-dd}
[ ... ]
• impostiamo i log di Share
cd /opt/alfresco/tomcat/webapps/
mkdir share
cp share.war share/
cd share/
jar -xvf share.war
rm share.war
vim WEB-INF/classes/log4j2.properties
[ ... ]
# appender.rolling.fileName=share.log
# appender.rolling.filePattern=share.log.%d{yyyy-MM-dd}
appender.rolling.fileName=/opt/alfresco/tomcat/logs/share.log
appender.rolling.filePattern=/opt/alfresco/tomcat/logs/share.log.%d{yyyy-MM-dd}
[ ... ]
exit
5.5. Installiamo il Servizio di Trasformazione
NB: a differenza delle versioni fino alla 6.x il servizio trasformazione dei file non è più nel core e istanziato dal file di configurazione principale: è diventato un servizio esterno.
• Installiamo alfresco-pdf-renderer
wget https://nexus.alfresco.com/nexus/service/local/repositories/releases/content/org/alfresco/alfresco-pdf-renderer/1.1/alfresco-pdf-renderer-1.1-linux.tgz
tar xfz alfresco-pdf-renderer-1.1-linux.tgz
cp alfresco-pdf-renderer /opt/alfresco/bin/
sudo chown tomcat:tomcat /opt/alfresco/bin/alfresco-pdf-renderer
sudo chmod +x /opt/alfresco/bin/alfresco-pdf-renderer
• scarichiamo il servizio
• e copiamolo in /opt/alfresco/bin
cp alfresco-transform-core-aio-boot-2.7.0-A1.jar /opt/alfresco/bin/
sudo chmod -x /opt/alfresco/bin/alfresco-transform-core-aio-boot-2.7.0-A1.jar
sudo chown tomcat:tomcat /opt/alfresco/bin/alfresco-transform-core-aio-boot-2.7.0-A1.jar
• creiamo lo script di avvio-configurazione
sudo vim /opt/alfresco/bin/alfrescots.sh
#!/bin/bash
#
# Set global variables
#
SERVICE_NAME=LTS_-_Local_Tranfromation_Service
LOCAL_TRANSFORM_SERVICE_HOME=/opt/alfresco
PID_PATH_NAME=$LOCAL_TRANSFORM_SERVICE_HOME/tomcat/temp/LTS.pid
#
# Set Variables of run application
#
# -DPDFRENDERER_EXE
TS_PDF-RENDERER=/opt/alfresco/bin/alfresco-pdf-renderer
# -DLIBREOFFICE_HOME
TS_OFFICE=/usr/lib/libreoffice
# -DIMAGEMAGICK_ROOT -DIMAGEMAGICK_DYN
TS_IMAGEMAGICK=/usr/bin
# -DIMAGEMAGICK_EXE
TS_IMAGEMAGICK_CONVERT=/usr/bin/convert
# -DIMAGEMAGICK_CODERS
TS_IMAGEMAGICK_CONVERT_CODERS=/usr/lib/x86_64-linux-gnu/ImageMagick-6.9.11/modules-Q16/coders
# -DIMAGEMAGICK_CONFIG
TS_IMAGEMAGICK_CONVERT_CONFIG=/usr/lib/x86_64-linux-gnu/ImageMagick-6.9.11/config-Q16
# alfresco-transform-core-aio-boot-2.7.0-A1.jar
TS_JAR=/opt/alfresco/bin/alfresco-transform-core-aio-boot-2.7.0-A1.jar
#
# Function Start Transform Service
#
TsStart()
{
nohup java -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80 \
-DPDFRENDERER_EXE="$TS_PDF-RENDERER" \
-DLIBREOFFICE_HOME="$TS_OFFICE" \
-DIMAGEMAGICK_ROOT="$TS_IMAGEMAGICK" \
-DIMAGEMAGICK_DYN="$TS_IMAGEMAGICK" \
-DIMAGEMAGICK_EXE="$TS_IMAGEMAGICK_CONVERT" \
-DIMAGEMAGICK_CODERS="$TS_IMAGEMAGICK_CONVERT_CODERS" \
-DIMAGEMAGICK_CONFIG="$TS_IMAGEMAGICK_CONVERT_CONFIG" \
-DACTIVEMQ_URL="failover:(tcp://localhost:61616)?timeout=3000" \
-jar $TS_JAR \
/tmp 2>> /dev/null >>/dev/null \
& echo $! > $PID_PATH_NAME
}
#
# Function Stop Transform Service
#
TsStop()
{
# PID=$(cat $PID_PATH_NAME);
# printf "\n $SERVICE_NAME stoping ... \n"
/bin/kill $PID;
# printf "\n $SERVICE_NAME stopped ...\n"
# rm $PID_PATH_NAME
}
echo "Process id path: $PID_PATH_NAME"
case $1 in
start)
echo "Starting $SERVICE_NAME ..."
if [ ! -f $PID_PATH_NAME ]; then
TsStart
printf "\n $SERVICE_NAME started ...\n"
else
printf "\n $SERVICE_NAME is already running ...\n"
fi
;;
stop)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
printf "\n $SERVICE_NAME stoping ... \n"
TsStop
printf "\n $SERVICE_NAME stopped ...\n"
rm $PID_PATH_NAME
else
printf "\n $SERVICE_NAME is not running ...\n"
fi
;;
restart)
if [ -f $PID_PATH_NAME ]; then
#
# Process Stop
PID=$(cat $PID_PATH_NAME);
printf "\n Stoping $SERVICE_NAME ... \n"
TsStop
printf "\n Stopped $SERVICE_NAME ...\n"
rm $PID_PATH_NAME
#
# Process Start
echo "Starting $SERVICE_NAME ..."
TsStart
printf "\n Started $SERVICE_NAME ...\n"
else
printf "\n $SERVICE_NAME is not running ...\n"
fi
esac
• settiamo i permessi dello script
sudo chmod +x /opt/alfresco/bin/alfrescots.sh
sudo chown tomcat:tomcat /opt/alfresco/bin/alfrescots.sh
• infine creiamo e carichiamo la unit di avvio
sudo vim /usr/lib/systemd/system/alfrescots.service
[Unit]
Description=Alfresco Transform Service
After=network.target
[Service]
Type=forking
Restart=always
User=tomcat
Group=tomcat
ExecStart=/opt/alfresco/bin/alfrescots.sh start
ExecStop=/opt/alfresco/bin/alfrescots.sh stop
[Install]
WantedBy=multi-user.target
• abilitiamo la nuova unit
sudo systemctl daemon-reload
• aggiungiamo le seguenti righe di configurazione in /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
sudo vim /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
[ ... ]
#This property is default true, here it it for information purpose.
local.transform.service.enabled=true
localTransform.core-aio.url=http://localhost:8090/
Testiamo il servizio di trasformazione
• avviare il servizio
sudo systemctl start alfrescots.service
• accedere all'URL http://localhost:8090: vedremo una finestra con le impostazioni e la possibilità di caricare file da trasformare di formato
• stoppiamo il servizio
sudo systemctl stop alfrescots.service
5.6. Installiamo il Servizio di Ricerca
NB: la documentazione Community non sembra completamente è corretta
• Scaricare il pacchetto Search
• estraiamo il pacchetto
unzip alfresco-search-services-2.0.7.zip
• creiamo l'utente dedicato
sudo useradd -r -U -d /opt/solr -s /bin/false solr
• copiamo Solr in /opt/
sudo cp -R alfresco-search-services /opt/
sudo mv /opt/alfresco-search-services /opt/solr
• personalizziamo /opt/solr/solrhome/templates/rerank/conf/solrcore.properties come segue
vim /opt/solr/solrhome/templates/rerank/conf/solrcore.properties
[ ... ]
alfresco.secureComms=secret
[ ... ]
• personalizziamo /opt/solr/solrhome/conf/shared.properties come segue
vim /opt/solr/solrhome/conf/shared.properties
#Host details an external client would use to connect to Solr
solr.host=localhost
#If not set then solr.port will be the jetty.port
#solr.port=8983
solr.baseurl=/solr
# Properties treated as identifiers when indexed
alfresco.identifier.property.0={http://www.alfresco.org/model/content/1.0}creator
alfresco.identifier.property.1={http://www.alfresco.org/model/content/1.0}modifier
alfresco.identifier.property.2={http://www.alfresco.org/model/content/1.0}userName
alfresco.identifier.property.3={http://www.alfresco.org/model/content/1.0}authorityName
# Suggestable Properties
alfresco.suggestable.property.0={http://www.alfresco.org/model/content/1.0}name
alfresco.suggestable.property.1={http://www.alfresco.org/model/content/1.0}title
alfresco.suggestable.property.2={http://www.alfresco.org/model/content/1.0}description
alfresco.suggestable.property.3={http://www.alfresco.org/model/content/1.0}content
# Data types that support cross locale/word splitting/token patterns if tokenised
alfresco.cross.locale.property.0={http://www.alfresco.org/model/content/1.0}name
# Data types that support cross locale/word splitting/token patterns if tokenised
alfresco.cross.locale.datatype.0={http://www.alfresco.org/model/dictionary/1.0}text
alfresco.cross.locale.datatype.1={http://www.alfresco.org/model/dictionary/1.0}content
alfresco.cross.locale.datatype.2={http://www.alfresco.org/model/dictionary/1.0}mltext
• settiamo la configurazione di avvio di Solr
NB: la password per securizzare il dialogo tra Alfresco e Solr va impostata prima del primo lancio del servizio. Durante il l'avvio vengono create le istanze alfresco e archive con la password scelta. Dopo il primo avvio non è più possibile cambiare la password a meno di cancellare le due istanze, farle ricreare e ri-indicizzare tutto.
sudo vim /opt/solr/solr.in.sh
SOLR_JAVA_MEM="-Xms2g -Xmx2g"
SOLR_OPTS="$SOLR_OPTS -Dsolr.jetty.request.header.size=1000000 -Dsolr.jetty.threads.stop.timeout=300000 -Ddisable.configEdit=true"
SOLR_LOGS_DIR=../../logs
LOG4J_PROPS=$SOLR_LOGS_DIR/log4j.properties
SOLR_SOLR_HOST=localhost
SOLR_SOLR_PORT=8983
SOLR_SOLR_BASEURL=/solr
SOLR_ALFRESCO_HOST=localhost
SOLR_ALFRESCO_PORT=8080
SOLR_ALFRESCO_BASEURL=/alfresco
SOLR_ALFRESCO_SECURECOMMS=secret
export JAVA_TOOL_OPTIONS="-Dalfresco.secureComms.secret=secret"
• aggiorniamo la configurazione di Alfresco
sudo vim /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
[ ... ]
#
# Index Setting
#
#index.recovery.mode=AUTO
index.subsystem.name=solr6
solr.secureComms=secret
solr.sharedSecret=secret
solr.host=localhost
solr.port=8983
solr.base.url=/solr
• correggiamo i permessi
sudo chown solr:solr -R /opt/solr
sudo chmod +x /opt/solr/solr.in.sh
sudo rm /opt/solr/solr.in.cmd
• primo avvio: lo faremo manualmente in modo da avere subito il feedback di funzionamento
sudo su - solr -s /bin/bash
/opt/solr/solr/bin/solr start -a "-Dcreate.alfresco.defaults=alfresco,archive"
• stoppiamo Solr
sudo /opt/solr/solr/bin/solr stop -all
• creiamo la unit di avvio per SystemD
sudo vim /usr/lib/systemd/system/solr.service
[Unit]
Description=Alfresco search service Solr
#ConditionPathExists=/opt/solr
After=network.target
[Service]
Type=forking
Restart=always
User=solr
Group=solr
LimitNOFILE=8192:65536
ExecStart=/opt/solr/solr/bin/solr start -a '-Dcreate.alfresco.defaults=alfresco,archive'
ExecStop=/opt/solr/solr/bin/solr stop -all
[Install]
WantedBy=multi-user.target
• carichiamo la unit
systemctl daemon-reload
• facciamo il primo avvio di tutto lo stack Alfresco
systemctl start activemq
systemctl start mariadb
systemctl start tomcat
systemctl start solr
systemctl start alfrescots
NB: il completamento dell'avvio di Alfresco impiega anche qualche minuto: dipende dalla velocità e dalla potenza di calcolo del computer su cui gira.
• accediamo all'URL http://<ipserver|fqdn>:8080/ "-> Alfresco Repository -> Alfresco Share"
• autentichiamoci con l'utente default:
Username: admin Password: admin
• dopo l'accesso cambiare la password dell'utente admin e uscire
• stoppiamo lo stack
systemctl stop alfrescots
systemctl stop solr
systemctl stop tomcat
systemctl stop mariadb
systemctl stop activemq
• creiamo lo script per l'avvio e lo stop automatico di tutto lo stack
sudo vim /etc/init.d/alfresco-stack
#!/bin/bash
#
# Definizione variabili
#
AS_ACT=$1
AS_STATUS=
AS_ERR=0
AS_RESTART=
ST_S=0
ST_MAX=4
ST_COUNT=0
RTN=0
#
# Definizione funzioni start, stop, restart
#
#
# Avvio dello stack Alfresco
#
stStart()
{
systemctl start activemq
systemctl start mariadb
systemctl start tomcat
sleep 20
systemctl start solr
sleep 20
systemctl start alfrescots
return 0
}
#
# Stop dello stack Alfresco
#
stStop()
{
systemctl stop alfrescots
systemctl stop solr
systemctl stop tomcat
systemctl stop mariadb
systemctl stop activemq
return 0
}
#
# Verifica la reale terminazione dei servizi
#
stCheck()
{
#
# Reset status del check
#
ST_ERR=0
AS_STATUS=0
#
# Check ActiveMQ
#
systemctl status activemq > /dev/null 2>&1;AS_STATUS=$?
if [ "$AS_STATUS" != "3" ] && [ "$ST_ERR" = "0" ]; then
ST_ERR=1
fi
#
# Check MariaDB
#
systemctl status mariadb > /dev/null 2>&1;AS_STATUS=$?
if [ "$AS_STATUS" != "3" ] && [ "$ST_ERR" = "0" ]; then
ST_ERR=1
fi
#
# Check Tomcat
#
systemctl status tomcat > /dev/null 2>&1;AS_STATUS=$?
if [ "$AS_STATUS" != "3" ] && [ "$ST_ERR" = "0" ]; then
ST_ERR=1
fi
#
# Check Solr
#
systemctl status solr > /dev/null 2>&1;AS_STATUS=$?
if [ "$AS_STATUS" != "3" ] && [ "$ST_ERR" = "0" ]; then
ST_ERR=1
fi
#
# Check AlfrescoTS
#
systemctl status alfrescots > /dev/null 2>&1;AS_STATUS=$?
if [ "$AS_STATUS" != "3" ] && [ "$ST_ERR" = "0" ]; then
ST_ERR=1
fi
#
# ritorna lo stato:
# 0 = tutti i servizi sono stoppati
# 1 = uno o più serivi sono ancora running
#
echo "$ST_ERR"
return $ST_ERR
}
case "$AS_ACT" in
start)
echo "Starting ..."
stStart
echo "Started"
;;
stop)
echo "Stopping ..."
stStop
echo "Stopped"
;;
restart)
echo "Stopping ..."
stStop
# Attesa per fine terminazione servizi
sleep 30
# verivica terminazione completa con piccolo loop
# 0 = tutto STOP
# 1 = uno o più RUNNING
ST_S=$(stCheck)
while [ "$ST_S" = "1" ] && [ "$ST_COUNT" -le "$ST_MAX" ]; do
((ST_COUNT++))
sleep 30
ST_S=$(stCheck)
done
case "$ST_S" in
0)
# Avvio dei servizi
echo "Sttopped"
echo "Starting ..."
stStart
echo "Started"
RTN=0
;;
1)
# errore!!
echo "ERROR: Alfresco Stack no sttoped."
echo "Try by hand again or contact to system administrator."
RTN=1
;;
esac
;;
*)
echo "alfresco-stack.sh run, stop or restart the Alfresco stack (ActiveMQ+MariaDB+Tomcat-Alfresco-Share+Solr+AlfrescoTransformationService)"
echo "Usage:"
echo -e "\n\talfresco-stack.sh (start|stop|restart|help)"
echo -e "\nstart"
echo -e "\tStart all Alfresco stack services"
echo -e "\nstop"
echo -e "\tStop all Alfresco stack services"
echo -e "\nrestart"
echo -e "\tStop and Restart the services"
echo -e "\nhelp"
echo -e "\tPrint this help"
;;
esac
# return $RTN
exit $RTN
sudo chmod 754 /etc/init.d/alfresco-stack
sudo chown root:root /etc/init.d/alfresco-stack
sudo systemctl daemon-reload
• testiamo l'avvio tramite SystemD, ci colleghiamo e stoppiamo sempre tramite SystemD
sudo systemctl start alfresco-stack
URL http://<ipserver|fqdn>:8080/
sudo systemctl stop alfresco-stack
A questo punto tutta l'installazione e la configura dello Stack Alfresco è pronta e funzionante come singolo nodo.
Impostarlo per l'avvio automatico
sudo systemctl enable alfresco-stack
Per disattivarlo come avvio automatico:
sudo systemctl disable alfresco-stack
6. Completamento
Dopo aver portato in produzione il cuore di Alfresco procediamo con alcuni completamenti e perfezionamenti.
Iniziamo con il mettere un ReverseProxy \davanti\ ad Alfresco e attiviamo il firewall securizzando il server.
Successivamente procediamo con alcune configurazioni di Alfresco e di alcuni suoi componenti.
6.1. ReverseProxy
Per il reverseproxy useremo Nginx. L'FQDN del nostro server è www.server.com .
Successivamente accenneremo all'attivazione del protocollo HTTPS usando sempre il reverseproxy come frontend per la securizzazione con CertBot (https://certbot.eff.org/) per avere un certificato valido.
• Installiamo Nginx
sudo apt install -y nginx
• creiamo il file di configurazione per il server
sudo vim /etc/nginx/sites-available/www.server.com.conf
# Set proxy cache config
proxy_buffering on;
proxy_cache_path /var/cache/nginx keys_zone=alfresco-cache:1512m inactive=1d;
proxy_cache_key "$scheme$request_method$host$request_uri";
# tomcats we're forwarding to
upstream tomcat_server_https {
server 127.0.0.1:8080 fail_timeout=0;
}
upstream tomcat_server_http {
server 127.0.0.1:8080 fail_timeout=0;
}
upstream sharepoint {
server 127.0.0.1:7070 fail_timeout=0;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location /share {
proxy_pass http://tomcat_server_http/share;
include /etc/nginx/proxy_params;
proxy_cache alfresco-cache;
# add_header X-Proxy-Cache $upstream_cache_status;
}
location /alfresco {
proxy_pass http://tomcat_server_http/alfresco;
include /etc/nginx/proxy_params;
proxy_cache alfresco-cache;
# add_header X-Proxy-Cache $upstream_cache_status;
}
location ~ (^/share/.*\.js$|^/share/.*\.css$|^/share/.*\.gif$|^/share/.*\.png$|^/share/.*\.woff$|^/share/.*\.ttf$|^/share/.*\.eot$|^/share/.*/images/|^/share/.*icons/) {
add_header Cache-Control public;
#add_header Cache-Control "public, must-revalidate, proxy-revalidate";
expires 7d ;
include /etc/nginx/proxy_params;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://tomcat_server_https;
proxy_cache alfresco-cache;
add_header X-Proxy-Cache $upstream_cache_status;
}
location ~ (^/share/.*/thumbnails/.*$) {
proxy_cache_valid 200 301 302 10m ;
proxy_cache_valid 404 1m;
include /etc/nginx/proxy_params;
expires 20m ;
proxy_cache alfresco-cache;
#add_header X-Proxy-Cache $upstream_cache_status;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://tomcat_server_https;
}
}
• abilitiamo la configurazione appena fatta
sudo ln -s /etc/nginx/sites-available/vm09.kbsb.loc /etc/nginx/sites-enabled/vm09.kbsb.loc
sudo rm /etc/nginx/sites-enabled/default
• cambiamo l'index default
NB: il file qui di seguito è solo un esempio
sudo vim /var/www/html/index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Home - Alfresco Reverseproxy</title>
</head>
<body>
<h1 style="text-align: center;">Home - Alfresco Reverseproxy</h1>
<p><a href="/alfresco">Alfresco</a><br>
<a href="/share">Share</a></p>
</body>
</html>
sudo chown www-data:www-data /var/www/html/index.html
• lanciamo Nginx
sudo systemctl start nginx
• avviamo lo stack Alfresco
sudo systemctl start alfresco-stack
• verifichiamo il reverse accedendo all'URL http://www.server.com
• verificato il funzionamento del reverse spegniamo lo stack ed Nginx
sudo systemctl stop alfresco-stack
sudo systemctl stop nginx
• impostiamo Nginx come servizio default
sudo systemctl enable nginx
6.2. Attivazione HTTPS
Prima di passare alla parte esecutiva è necessario fare delle puntualizzazioni perché il servizio funzioni:
• in questa architettura la criptazione SSL/TLS è gestita da Nginx, non da Tomcat
• per funzionare è necessario che l'hostname sia FQDN (cioè deve essere reale, ovvero su un DNS pubblico)
• i certificati SSL sono generati da Let’s Encrypt (https://letsencrypt.org/) e gestiti tramite CertBot (https://certbot.eff.org/)
• la parte circa l'installazione e l'attivazione di CertBot non verrà trattata e rimandiamo a queste guide:
• Certbot Instructions (https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal)
• How To Secure Apache with Let's Encrypt on Ubuntu 22.04 (https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-22-04)
• infine ipotizziamo che il nome FQDN sia www.example.com .
Iniziamo installando CertBot e creando il certificato, come illustrato dalle guida sopra indicate.
A questo punto aggiorniamo il file di configurazione del reverse:
• creiamo il file /etc/nginx/sites-available/www.example.com.conf
sudo vim /etc/nginx/sites-available/www.example.com.conf
# Set proxy cache config
proxy_buffering on;
proxy_cache_path /var/cache/nginx keys_zone=alfresco-cache:1512m inactive=1d;
proxy_cache_key "$scheme$request_method$host$request_uri";
# tomcats we're forwarding to
upstream tomcat_server_https {
server 127.0.0.1:8080 fail_timeout=0;
}
upstream tomcat_server_http {
server 127.0.0.1:8080 fail_timeout=0;
}
upstream sharepoint {
server 127.0.0.1:7070 fail_timeout=0;
}
# Default Redirect HTTP --> HTTPS
server {
listen 80 default_server;
# access_log /var/www/digitaldsb.it/log/www.example.com_access.log;
server_name www.example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl default_server;
access_log /var/www/digitaldsb.it/log/www.example.com_access.log;
server_name www.example.com;
root /var/www/digitaldsb.it/html;
index index.html index.htm index.nginx-debian.html;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location /errorpage {
root /var/www/digitaldsb.it/html/error;
}
#redirect server error pages to the static page /50x.html
error_page 502 503 504 /errorpage/maintenance.html;
location = /errorpage/maintenance.html {
root /var/www/digitaldsb.it/html/error;
}
location / {
try_files $uri $uri/ =404;
}
location /share {
proxy_pass http://tomcat_server_https/share;
include /etc/nginx/proxy_params;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache alfresco-cache;
#add_header X-Proxy-Cache $upstream_cache_status;
}
location /alfresco {
proxy_pass http://tomcat_server_https/alfresco;
include /etc/nginx/proxy_params;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache alfresco-cache;
#add_header X-Proxy-Cache $upstream_cache_status;
}
## Forcing Web Browsers to Cache CSS , JS , etc
location ~ (^/share/.*\.js$|^/share/.*\.css$|^/share/.*\.gif$|^/share/.*\.png$|^/share/.*\.woff$|^/share/.*\.ttf$|^/share/.*\.eot$|^/share/.*/images/|^/share/.*icons/) {
add_header Cache-Control public;
#add_header Cache-Control "public, must-revalidate, proxy-revalidate";
expires 7d ;
include /etc/nginx/proxy_params;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://tomcat_server_https;
proxy_cache alfresco-cache;
#add_header X-Proxy-Cache $upstream_cache_status;
}
## Forcing Nginx to cache Document Thumbnail Images on Disk , but NOT by the Web Browser
location ~ (^/share/.*/thumbnails/.*$)
{
proxy_cache_valid 200 301 302 10m ;
proxy_cache_valid 404 1m;
include /etc/nginx/proxy_params;
expires 20m ;
proxy_cache alfresco-cache;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://tomcat_server_https;
}
# sharepoint config
location ~ (^/spp|^/_vti_bin/|^/_vti_history/|^/_vti_inf.html$) {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-By $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
client_max_body_size 0;
client_body_buffer_size 128k;
proxy_connect_timeout 500;
proxy_send_timeout 500;
proxy_read_timeout 500;
proxy_buffers 32 4k;
proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;
proxy_http_version 1.1;
proxy_pass http://sharepoint;
proxy_buffering off;
}
}
• abilitiamo la nuova configurazione appena fatta
sudo ln -s /etc/nginx/sites-available/www.example.com.conf /etc/nginx/sites-enabled/www.example.com.conf
sudo rm /etc/nginx/sites-enabled/default
• ricarichiamo Nginx
sudo systemctl restart nginx
• avviamo lo stack Alfresco
sudo systemctl start alfresco-stack
• verifichiamo il reverse accedendo all'URL https://www.example.com
• verificato spegniamo lo stack ed Nginx
sudo systemctl stop alfresco-stack
sudo systemctl stop nginx
• impostiamo Nginx come servizio default
sudo systemctl enable nginx
6.3. Attivare e Settare il Firewall
Di default Ubuntu ha il firewall non attivo.
Cosa buona e saggia è attivarlo. Terremmo aperte le sole porte 22 (SSH), 80 (HTTP) e 443 (HTTPS):
• installiamo ufw, qualora non fosse ancora installato
sudo apt install ufw
• apriamo le porte 22, 80 e 443
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
• abilitiamo ufw
sudo ufw enable
• verifichiamo lo stato del firewall
sudo ufw status
7. Tuning di performance
Facciamo alcune azioni di fine tuning.
7.1. Eliminazione .WAR
L'operazione va fatto dopo il deploy e dopo aver fatto girare Alfresco.
Questa operazione alleggerisce Tomcat e accelera l'avvio:
• eliminiamo i WAR
sudo rm /opt/alfresco/tomcat/webapps/*.WAR
• eliminiamo i backup
sudo rm /opt/alfresco/tomcat/webapps/*.bak
• puliamo Tomcat
sudo rm -R /opt/alfresco/tomcat/work/Catalina/localhost/*
7.2. Rimuovere gli AMP
Dopo aver applicato i moduli aggiuntivi possiamo rimuovere i file AMP.
NB: i moduli non si possono applicare 2 volte. Pertanto è saggio rimuovere gli AMP dopo l'applicazione.
sudo rm /opt/alfresco/amps/*
sudo rm /opt/alfresco/amps_share/*
7.3. Password secret
Per mettere in produzione un'installazione Alfresco non possiamo tenere le password messe come esempio nella manualistica.
Pertanto la password "secret" usata in questa guida è da cambiare.
Alcuni accorgimenti:
• scegliere e impostare la password prima del primo lancio di Alfresco e di Solr
• se cambiamo la password dopo il primo avvio ricordarsi di:
• pulire Tomcat prima di avviarlo
• cancellare alfresco e archive
• inserire la nuova password in solr.in.sh
• inserire la nuova password in alfresco-global.properties
7.4. Log
I log consumano risorse. Possiamo migliorare le performance riducendo o togliendo i log.
L'alternativa, per un'architettura in produzione, è avere un collect con tool di navigazione e ricerca come ELK, Grafana, ecc...
Procediamo togliendo i log dalle configurazioni in modo da poterli ripristinare al bisogno:
• aggiornare /opt/alfresco/tomcat/bin/catalina.sh come segue
sudo vim /opt/alfresco/tomcat/bin/catalina.sh
[ ... ]
# CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
CATALINA_OUT=/dev/null
[ ... ]
• aggiornare /opt/alfresco/tomcat/webapps/alfresco/WEB-INF/classes/log4j2.properties
sudo vim /opt/alfresco/tomcat/webapps/alfresco/WEB-INF/classes/log4j2.properties
[ ... ]
# appender.rolling.fileName=/opt/alfresco/tomcat/logs/alfresco.log
appender.rolling.fileName=/dev/null
[ ... ]
• aggiornare ``/opt/alfresco/tomcat/webapps/share/WEB-INF/classes/log4j2.properties``
sudo vim /opt/alfresco/tomcat/webapps/share/WEB-INF/classes/log4j2.properties
[ ... ]
# appender.rolling.fileName=/opt/alfresco/tomcat/logs/share.log
appender.rolling.fileName=/dev/null
[ ... ]
• puliamo Tomcat
sudo rm /opt/alfresco/tomcat/work/Catalina/localhost/*
• aggiorniamo /opt/solr/logs/log4j.properties
sudo vim /opt/solr/logs/log4j.properties
[ ... ]
# log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.File=/dev/null
[ ... ]
7.5. Impostare Xmx Xms per Solr
Il sistema di ricerca Solr è preimpostato con 2GB di Xms e 2GB di Xmx.
Il dimensionamento va bene per un uso base, ma può essere troppo piccolo per un uso in produzione.
Quando il carico d'indicizzazione cresce viene saturata l'Xms e Solr crascia.
Per ovviare al problema basta aumentare la RAM assegnata. Per la quantità giusta è bene procedere in modo empirico con un periodo di monitoraggio del sistema in produzione. Suggeriamo, comunque, di partire da un dimensionamento a 4GB.
Cf.: https://docs.alfresco.com/content-services/community/config/repository/#effects-of-newsize
Per apportare il cambio:
• aggiorniamo /opt/solr/solr.in.sh
sudo vim /opt/solr/solr.in.sh
SOLR_JAVA_MEM="-Xms4g -Xmx4g"
[ ... ]
• riavviamo Solr
systemctl restart solr
8. Conclusione
L'installazione e prima configurazione descritta in queste pagine permette di avere un nodo completamente funzionante.
Pur potendolo da subito usare l'installazione come un nodo di produzione bisogna osservare:
• possono essere utili personalizzazioni ulteriori qui non descritte
• a seconda dello scopo possono essere necessarie l'aggiunta di moduli specifici
• l'architettura qui descritta presuppone una situazione semplice.
A valle di questo l'esperienza che si matura con un deploy completamente manuale permette di raggiungere una expertice importate che non si ha con le tecniche docker e\o consultando la documentazione community.
9. Appendice
9.1. Requisiti
Le indicazioni al momento riportate nella documentazione pubblica non sembrano sempre corrette per la versione community.
Cf.: https://docs.alfresco.com/content-services/7.4/support/
Con la versione usata in questa guida l'ambiente e le parti che risultano corrette sono le seguenti:
• Tomcat: versione 9.0.x
• JDK: OpenJava 11.x
• ActiveMQ: 5.17 o superiore
• MariaDB Server: 10.x e 11.x
• MariaDB Connector Java: 2.2.6 o precedenti
Inoltre la guida ufficiale descrive, per l'installazione con Tomcat, la personalizzazione di catalina.bat.
La pratica fa riferimento all'ambiente Windows, non sembra ci sia un riferimento ufficiale a Unix\Mac\Linux. Per quest'ultimo ambiente una buona pratica, apparentemente non documentata, è di usare catalina.sh passando i parametri tramite la variabile JAVA_OPTS=
.
Infine, a seconda dei moduli che si desidera aggiungere, è necessario creare anche directory amps_share non presente nel pacchetto ZIP, né descritta nella documentazione.
9.2. Extra
Vale la pena citare alcuni elementi che saranno oggetto di una futura guida.
Sono elementi che non impattano sulla funzionalità, ma servono per le configurazioni di dettaglio e la gestione avanzata.
• JMX: monitoraggio delle risorse impiegate
• Alfresco Administration Console: console di manipolazione e ispezione del singolo nodo e della rete di nodi
• Alfresco WebScripts Home: console di manipolazione e ispezione di Java Script del/i nodo/i
• WebDav: connessione per caricare-scaricare file tramite il protocollo WebDav.
10. Repo, risorse e Webgrafia
10.1. Repo
https://artifacts.alfresco.com/nexus/#nexus-search;gav~org.alfresco~alfresco-content-services-community*~7.4.0~~
https://nexus.alfresco.com/nexus/service/local/repositories/releases/content/org/alfresco/alfresco-content-services-community-distribution/7.4.0.1/alfresco-content-services-community-distribution-7.4.0.1.zip
https://nexus.alfresco.com/nexus/service/local/repositories/releases/content/org/alfresco/alfresco-content-services-share-distribution/7.4.0.1/alfresco-content-services-share-distribution-7.4.0.1.zip
https://nexus.alfresco.com/nexus/service/local/repositories/releases/content/org/alfresco/alfresco-search-services/2.0.7/alfresco-search-services-2.0.7.zip
https://nexus.alfresco.com/nexus/service/local/repositories/releases/content/org/alfresco/alfresco-transform-core-aio/3.1.0/alfresco-transform-core-aio-3.1.0.jar
https://docs.alfresco.com/process-automation/latest/model/connectors/database/#mariadb
10.2. Risorse
Guide
https://javaworld-abhinav.blogspot.com/2021/06/setup-acs70-ass201-and-transformation-service.html
https://javaworld-abhinav.blogspot.com/2022/05/setup-acs-7-ass-2-and-local-windows.html
https://github.com/abhinavmishra14/alfresco7-solr-localtransform-dist-setup
https://docs.alfresco.com/content-services/community/install/zip/
Post Install
https://docs.alfresco.com/content-services/community/install/zip/additions/#post-installation-checks
Certificate SSL/TLS
https://docs.alfresco.com/content-services/community/config/repository/#ssl-repo
Setting, Fixing, ...
https://docs.alfresco.com/content-services/community/config/repository/#effects-of-newsize
ReverseProxy
alfresco-reverse-proxy, https://github.com/ecm4u/alfresco-reverse-proxy
Configure Community Edition to work with a web proxy, https://docs.alfresco.com/content-services/community/config/repository/#configure-community-edition-to-work-with-a-web-proxy
How To Configure Nginx as a Reverse Proxy on Ubuntu 22.04, https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-as-a-reverse-proxy-on-ubuntu-22-04
https://github.com/ecm4u/alfresco-reverse-proxy/tree/master
https://serverfault.com/questions/472491/how-to-set-up-alfresco-share-behind-apache-reverse-proxy
https://www.eisenvault.com/forum/alfresco-community-q-a/how-to-setup-apache-as-a-reverse-proxy-for-alfresco-with-ssl-encryption
https://stackoverflow.com/questions/67303045/how-to-configure-alfresco-6-community-behind-proxy
Netplan + WOL
https://netplan.readthedocs.io/en/0.105/examples.html
https://wiki.ubuntu.com/Netplan/Design
https://askubuntu.com/questions/1244785/trouble-with-wakeonlan-with-ubuntu-20-04
https://www.golinuxcloud.com/wake-on-lan-ubuntu/
https://vitux.com/how-to-configure-networking-with-netplan-on-ubuntu/
MIME type
https://docs.alfresco.com/content-services/community/config/repository/#add-a-mime-type
Impostare cron
https://docs.alfresco.com/content-services/community/config/repository/#defer-the-start-of-cron-based-jobs
Impostare l'FTP interno ad Alfresco
https://docs.alfresco.com/content-services/community/config/file-servers/#configuring-the-ftp-file-server
Chrony
https://ubuntu.com/server/docs/how-to-serve-the-network-time-protocol-with-chrony
Tomcat
https://linuxize.com/post/how-to-install-tomcat-10-on-ubuntu-22-04/
https://docs.alfresco.com/content-services/community/install/zip/tomcat/
MariaDB
https://www.linuxcapable.com/how-to-install-mariadb-on-ubuntu-linux/
https://docs.alfresco.com/content-services/community/config/databases/#mysql-and-mariadb
ActiveMQ
https://docs.alfresco.com/content-services/community/config/activemq/
https://activemq.apache.org/installation.html
https://tecadmin.net/how-to-install-apache-activemq-on-ubuntu-22-04/
Alfresco
https://hub.alfresco.com/t5/alfresco-content-services-blog/alfresco-community-edition-7-4-release-notes/ba-p/316162
https://docs.alfresco.com/content-services/community/install/zip/
https://www.alfresco.com/it/thank-you/thank-you-downloading-alfresco-community-edition
https://hub.alfresco.com/t5/alfresco-content-services-blog/alfresco-community-edition-7-4-release-notes/ba-p/316162
https://nexus.alfresco.com/nexus/#nexus-search;quick~alfresco-content-services-community-distribution
https://docs.alfresco.com/content-services/7.4/support/
Alfresco Transform Service
Install Transform Service, https://docs.alfresco.com/transform-service/latest/install/
Setup ACS-7.x, ASS-2.x and Local Transformation Service using distribution package step by step Part-1, https://javaworld-abhinav.blogspot.com/2021/06/setup-acs70-ass201-and-transformation-service.html
Alfresco 7.3 - Upgrading to Transform Core 3.0.0, https://hub.alfresco.com/t5/alfresco-content-services-blog/alfresco-7-3-upgrading-to-transform-core-3-0-0/ba-p/315364
Alfresco Search Service
Alfresco Search Services, https://docs.alfresco.com/search-services/latest/install/
Setup ACS7.x, ASS2.x and transformation service using distribution package step by step on Linux platform, https://javaworld-abhinav.blogspot.com/2021/06/setup-acs70-ass201-and-transformation-service.html
Setup ACS7.x, ASS2.x and transformation service using distribution package step by step on Windows platform, https://javaworld-abhinav.blogspot.com/2022/05/setup-acs-7-ass-2-and-local-windows.html
Effects of NewSize, https://docs.alfresco.com/content-services/community/config/repository/#effects-of-newsize
Extention
https://nexus.alfresco.com/nexus/content/repositories/releases/org/alfresco/extension-inspector/
https://github.com/Alfresco/alfresco-extension-inspector
https://github.com/Alfresco/docs-alfresco
Keystore
NB: dalla versione 7.x l'uso delle chiavi di criptazione è obbligatoria. Senza Alfresco non si avvia.
https://github.com/Alfresco/alfresco-ssl-generator
https://hub.alfresco.com/t5/alfresco-content-services-forum/getting-error-while-starting-acs-7-0-keystores-are-invalid/m-p/306500#M23919
https://docs.alfresco.com/search-services/latest/config/keys/
https://docs.alfresco.com/content-services/latest/config/mtls/
https://github.com/Alfresco/alfresco-ssl-generator