Installare Alfresco Community 25 in Ubuntu Server 24: copertina

Come installare Alfresco 25 da pacchetto ZIP con DB di backend MariaDB.

Alfresco (da poco tempo "Hyland Alfresco") è un'ottimo software ECM (Enterprise Content Management).
Realizzato in Java è indipendente dal sistema operativo, è scalabile, ha un motore di ricerca interno ed è altamente personalizzabile e integrabile.
Nasce come progetto opnesource ed esiste tutt'ora una distribuzione community.
Questa guida descrive l'installazione partendo dal pacchetto ZIP deplyato in Tomcat in un server Ubuntu 24.

Premessa

L'installazione che stiamo per iniziare ha le seguenti caratteristiche:

Hostname: alf.example.com
IP: 10.10.10.10
FQDN: alf.example.com
CNAME: www.example.com
JDK: 17.0.16
ActiveMQ: 5.19.0
Tomcat: 10.1.44
Motore di ricerca: Solr
DataBaase: MariaDB 12.0.2
Libreoffice: 24.2.7.2
Reverse: Nginx
TLS: Certbot\Autofirmato
Directory di installazione: /opt

Opereremo normalmente da una console alfanumerica senza ambiente grafico.
Infine la configurazione di Alfresco sarà minimale, ma completamente funzionante.

L'installazione avverrà con i seguenti passi:
- preparazione del sistema operativo
- installazione di ActiveMQ
- installazione di Tomcat
- installazione di Alfresco
- installazione di Solr
- installazione del servizio di trasformazione
- installazione di ACA (Alfresco Content App)
- installazione di Nginx come reverse
- script per avvio automatico.

Personalizzazione OS

- Iniziamo aggiornando il sistema operativo


sudo apt update && apt upgrade -y && apt autoremove -y && systemctl reboot

- installiamo i tool necessari


sudo apt install -y htop iftop neofetch lnav wget curl net-tools nmap apt-transport-https unzip openssl git
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
sudo apt install -y tesseract-ocr tesseract-ocr-ita tesseract-ocr-eng tesseract-ocr-spa tesseract-ocr-fra

- settiamo la rete. Iniziamo creando una copia della configurazione e invocando l'editor


sudo cp -p /etc/netplan/00-installer-config.yaml{,.ORG}
sudo nano /etc/netplan/00-installer-config.yaml

- aggiorniamo la configurazione


network:
  ethernets:
    enp1s0:
      dhcp4: no
      addresses:
      - 10.10.10.10/24
      nameservers:
        addresses:
        - 8.8.8.8
        search: []
      routes:
      - to: default
        via: 10.10.10.1
  version: 2

- applichiamo l'aggiornamento


sudo netplan try
sudo netplan apply

- installiamo NTP 


sudo apt install -y ntp ntpdate

- editare /etc/ntpsec/ntp.conf


sudo nano /etc/ntpsec/ntp.conf

- e aggiorniamo con gli NTP server italiani


[ ... ]
# 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, sincronizziamo l'ora e verifichiamo


systemctl stop ntp
ntpdate -q 'server 0.it.pool.ntp.org iburst'
ntpdate -q 'server 0.it.pool.ntp.org iburst'
systemctl restart ntp
ntpq -p

- installiamo unoconv


apt install -y unoconv

- installiamo LibreOffice


apt install -y libreoffice

- installiamo ImageMagick


apt install -y imagemagick

- installiamo ExifTool


apt install -y exiftool

- installiamo ffmpeg


apt install -y ffmpeg

- procediamo installando MariaDB. Iniziamo scaricando il DEB per usare i repo ufficiali di MariaDB


wget https://r.mariadb.com/downloads/mariadb_repo_setup
sudo bash ./mariadb_repo_setup

- installiamo MariaDB


apt install -y mariadb-server

- attiviamo e avviamo MariaDB


systemctl disable mariadb
systemctl restart mariadb
systemctl status mariadb

- verifichieamo la versione


mariadb --version

- securizziamo MariaDB


mariadb-secure-installation
Switch to unix_socket authentication [Y/n]
Change the root password? [Y/n]
New password: MiaPass32Prova!
Re-enter new password: MiaPass32Prova!
[ ... ]

- settiamo MariaDB editando /etc/mysql/mariadb.conf.d/50-server.cnf


sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

- aggiorniamo come segue


[ ... ]
#max_connections        = 100
max_connections        = 275
[ ... ]

- riavviamo MariaDB


systemctl restart mariadb

 

- creare il DB per Alfresco


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;


- installiamo il JDK ed il JRE 17
  NB: rimuoviamo il JDK e JRE 21 preinstallato di default e precalente sull'installazione del 17


apt remove -y openjdk-21-jdk openjdk-21-jdk-headless
apt remove -y openjdk-21-jre openjdk-21-jre-headless
apt install -y openjdk-17-jdk openjdk-17-jdk-headless && apt install -y openjdk-17-jre openjdk-17-jre-headless

- verificare la versione installata


java --version

 

Installazione di ActiveMQ

- Aggiungiamo l'utente di sistema per ActiveMQ


useradd -m -U -d /opt/activemq -s /bin/false activemq

- scarichiamo il pacchetto


cd Temp
wget https://dlcdn.apache.org/activemq/5.19.0/apache-activemq-5.19.0-bin.tar.gz

- estraiamo e sistemiamo la sicurezza


sudo tar xfz apache-activemq-5.19.0-bin.tar.gz -C /opt/
sudo rm -R /opt/activemq
sudo mv /opt/apache-activemq-5.19.0 /opt/activemq
sudo chown activemq:activemq -R /opt/activemq

- editiamo il file di configurazione


sudo nano  /opt/activemq/conf/jetty.xml

- e aggiorniamolo come segue
  NB: con questo cambio ActiveMQ sarà accessibile anche dalla rete


[ ... ]
    <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 nano /usr/lib/systemd/system/activemq.service

- e inseriamo le seguenti stringhe


[Unit]
Description=Apache ActiveMQ Message Broker
After=network.target mariadb.service

[Service]
Type=forking

User=activemq
Group=activemq

WorkingDirectory=/opt/activemq/bin
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
Environment="ACTIVEMQ_HOME=/opt/activemq"
Environment="ACTIVEMQ_BASE=/opt/activemq"
Environment="ACTIVEMQ_CONF=/opt/activemq/conf"
Environment="ACTIVEMQ_DATA=/opt/activemq/data"

ExecStart=/opt/activemq/bin/activemq start
ExecStop=/opt/activemq/bin/activemq stop

[Install]
WantedBy=multi-user.target

- avviamo e verifichiamo ActiveMQ


sudo systemctl daemon-reload
sudo systemctl start activemq
sudo systemctl status activemq

- verifichiamo ActiveMQ accedendo al pannello di controllo all'URL http://alf.example.com:8161/admin e autenticandoci con
    Username: admin
    Password: admin

- spegniamo e disattiviamo ActiveMQ


sudo systemctl stop activemq
sudo systemctl disable activemq

- riportiamo in sicurezza ActiveMQ


sudo nano  /opt/activemq/conf/jetty.xml

- e ripristiniamo la precedente configurazione


[ ... ]
    <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>
[ ... ]

 

Installazione di Tomcat 10

- Scarichiamo la versione 9 di Tomcat


mkdir Temp
cd Temp
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.44/bin/apache-tomcat-10.1.44.tar.gz

- creiamo l'utente dedicato


mkdir /opt/alfresco
useradd -m -U -d /opt/alfresco/tomcat -s /bin/false tomcat

- estraiamo il pacchetto Tomact e sistemiamo nomi e permessi


sudo tar xfz apache-tomcat-10.1.44.tar.gz -C /opt/alfresco
sudo mv /opt/alfresco/apache-tomcat-10.1.44 /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 nano /usr/lib/systemd/system/tomcat.service

- e inseriamo le seguenti stringhe


[Unit]
Description=Tomcat 10 servlet container
After=network.target alfrescots.service

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
Environment="CATALINA_PID=/opt/alfresco/tomcat/temp/tomcat.pid"
Environment="CATALINA_BASE=/opt/alfresco/tomcat"
Environment="CATALINA_HOME=/opt/alfresco/tomcat"
# Environment="CATALINA_OPTS=-Xms2048M -Xmx3072M -server -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80"
Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"
Environment="JAVA_TOOL_OPTIONS=-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"

ExecStart=/opt/alfresco/tomcat/bin/startup.sh
ExecStop=/opt/alfresco/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

 

- carichiamo la nuova unit e testiamola


sudo systemctl daemon-reload
sudo systemctl start tomcat
sudo systemctl status tomcat

- verifichiamo il funzionamento di Tomcat accedendo all'URL: http://alf.example.com:8080/

- stoppiamo Tomcat


systemctl stop tomcat

 

Installazione di Alfresco

- Scaricamento e pubblichiamo il connector MariaDB


cd ~/Temp
wget wget https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/2.7.9/mariadb-java-client-2.7.9.jar
sudo cp mariadb-java-client-2.7.9.jar /opt/alfresco/tomcat/lib/
sudo chown tomcat:tomcat /opt/alfresco/tomcat/lib/mariadb-java-client-2.7.9.jar

- scarichiamo lo zip Alfresco


wget https://nexus.alfresco.com/nexus/repository/releases/org/alfresco/alfresco-content-services-community-distribution/25.2.0/alfresco-content-services-community-distribution-25.2.0.zip

- estraiamo il pacchetto


sudo mkdir /opt/alfresco_data
mkdir alfresco-content-services-community-distribution-25.2.0
cp alfresco-content-services-community-distribution-25.2.0.zip alfresco-content-services-community-distribution-25.2.0/
cd alfresco-content-services-community-distribution-25.2.0
unzip alfresco-content-services-community-distribution-25.2.0.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/

- aggiungiamo la classpath per Alfresco


sudo sed -i 's|^shared.loader=$|shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar|' /home/ubuntu/tomcat/conf/catalina.properties

- impostiamo il connector di Tomcat


sudo nano /opt/alfresco/tomcat/conf/server.xml

- e personalizziamo come segue


[ ... ]
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8"
               maxHttpHeaderSize="32768"
            />
[ ... ]

- dimensioniamo la RAM
  NB: la dimensione della RAM dipende molto dall'uso reale e dalle specifiche del server


sudo nano /opt/alfresco/tomcat/bin/setenv.sh

- e aggiorniamo come segue


[...]
#
# Dimensionamento RAM: necessario aumentarla per gli indici
# Farlo anche in Solr altrimenti crasha durante l'attività
CATALINA_OPTS="-Xms6G -Xmx8G -server -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80" # java-memory-settings
[...]

- correggiamo la sicurezza


sudo chmod +x /opt/alfresco/tomcat/bin/setenv.sh
sudo chown tomcat:tomcat /opt/alfresco/tomcat/bin/setenv.sh

- creiamo la configurazione globale di Alfresco


sudo nano /opt/alfresco/tomcat/shared/classes/alfresco-global.properties

- e inseriamo le seguenti stringhe


# The server mode. Set value here
# UNKNOWN | TEST | BACKUP | PRODUCTION
# system.serverMode=TEST
system.serverMode=TEST

#
# Custom content and index data location
#
dir.root=/opt/alfresco_data
dir.keystore=/opt/alfresco_data/keystore/

#
# Database connection properties
#
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

#
# Licenze

dir.license.external=/opt/alfresco/licenses

#
# Solr Configuration
#
solr.secureComms=secret
solr.sharedSecret=secret
solr.host=localhost
solr.port=8983
index.subsystem.name=solr6


# Transform Configuration
#
transform.service.enabled=true
local.transform.service.enabled=true
localTransform.core-aio.url=http://localhost:8090/

#
# Events Configuration
#
messaging.broker.url=failover:(nio://localhost:61616)?timeout=3000&jms.useCompression=true

#
# URL Generation Parameters
#
alfresco.context=alfresco
alfresco.host=localhost
alfresco.port=8080
alfresco.protocol=http
share.context=share
share.host=localhost
share.port=8080
share.protocol=http
opencmis.context.override=false
opencmis.context.value=
opencmis.servletpath.override=false
opencmis.servletpath.value=
opencmis.server.override=true
opencmis.server.value=localhost

- installiamo alfresco-share-services.amp

NB: se non fatto Alfresco parte regolarmente, si accede anche a Share, ma non si ha accesso né possibilità di gestione delle directory e non si può caricare-gestire alcun file! In pratica gli manca il modulo share.


sudo java -jar /opt/alfresco/bin/alfresco-mmt.jar install /opt/alfresco/amps /opt/alfresco/tomcat/webapps/alfresco.war -directory
sudo java -jar /opt/alfresco/bin/alfresco-mmt.jar list /opt/alfresco/tomcat/webapps/alfresco.war

- setting i log di Alfresco e Share


sudo mkdir /opt/alfresco/tomcat/webapps/alfresco && unzip /opt/alfresco/tomcat/webapps/alfresco.war -d /opt/alfresco/tomcat/webapps/alfresco
sudo mkdir /opt/alfresco/tomcat/webapps/share && unzip /opt/alfresco/tomcat/webapps/share.war -d /opt/alfresco/tomcat/webapps/share
sudo sed -i 's|^appender\.rolling\.fileName=alfresco\.log|appender.rolling.fileName=/opt/alfresco/tomcat/logs/alfresco.log|' /opt/alfresco/tomcat/webapps/alfresco/WEB-INF/classes/log4j2.properties
sudo sed -i 's|^appender\.rolling\.fileName=share\.log|appender.rolling.fileName=/opt/alfresco/tomcat/logs/share.log|' /opt/alfresco/tomcat/webapps/share/WEB-INF/classes/log4j2.properties

- rimnuoviamo i pacchetti war


sudo rm /opt/alfresco/tomcat/webapps/alfresco.war
sudo rm /opt/alfresco/tomcat/webapps/share.war

- correggiamo la sicurezza


sudo mkdir -p /opt/alfresco/modules/platform
sudo mkdir -p /opt/alfresco/modules/share
sudo chown tomcat:tomcat -R /opt/alfresco_data /opt/alfresco

 

Installiamo Solr

- Scarichiamo il pacchetto Search 


cd ~/Temp
wget https://nexus.alfresco.com/nexus/repository/releases/org/alfresco/alfresco-search-services/2.0.16/alfresco-search-services-2.0.16.zip

- estraiamo il pacchetto


unzip alfresco-search-services-2.0.16.zip

- creiamo l'utente


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

- editiamo /opt/solr/solrhome/conf/shared.properties


sudo nano /opt/solr/solrhome/conf/shared.properties

- aggiorniamo la configurazione come segue


#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
alfresco.cross.locale.property.1={http://www.alfresco.org/model/content/1.0}lockOwner

# 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: quando si porta in produzione la memoria XMS e XMX va aumentata almeno a 4GB altrimenti crascia durante l'indicizzazione!


sudo nano /opt/solr/solr.in.sh

- aggiorniamo il file conme segue


[...]
SOLR_JAVA_MEM="-Xms4G -Xmx6G"
[...]

- aggiorniamo la configurazione di Alfresco


sudo nano /opt/alfresco/tomcat/shared/classes/alfresco-global.properties

- e aggiungiamo le seguenti stringhe


[ ... ]

#
# Solr Configuration
#
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

- creaiamo la unit di avvio per SystemD


sudo nano /usr/lib/systemd/system/solr.service

- popoliamo il file con le seguenti stringhe


[Unit]
Description=Alfresco search service Solr
After=network.target tomcat.service
Requires=tomcat.service

[Service]
Type=forking

User=solr
Group=solr

Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"

ExecStart=/opt/solr/solr/bin/solr start -a "-Dcreate.alfresco.defaults=alfresco,archive -Dalfresco.secureComms=secret -Dalfresco.secureComms.secret=secret"
ExecStop=/opt/solr/solr/bin/solr stop -all

[Install]
WantedBy=multi-user.target

- carichiamo la unit e facciamo un avvio ed un test di accesso di verifica al pannello di Solr


sudo systemctl daemon-reload
sudo systemctl start solr
sudo systemctl status solr
sudo systemctl stop solr
sudo systemctl disable solr

 

Installiamo il Servizio di Trasformazione

- Installiamo alfresco-pdf-renderer


cd ~/Temp
wget https://nexus.alfresco.com/nexus/repository/releases/org/alfresco/alfresco-pdf-renderer/1.3.0-76/alfresco-pdf-renderer-1.3.0-76-linux.tgz
tar xfz alfresco-pdf-renderer-1.3.0-76-linux.tgz
sudo 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


wget https://nexus.alfresco.com/nexus/repository/releases/org/alfresco/alfresco-transform-core-aio/5.2.1/alfresco-transform-core-aio-5.2.1.jar

- e copiamolo in /opt/alfresco/bin


sudo cp alfresco-transform-core-aio-5.2.1.jar /opt/alfresco/bin/
sudo chmod -x /opt/alfresco/bin/alfresco-transform-core-aio-5.2.1.jar
sudo chown tomcat:tomcat /opt/alfresco/bin/alfresco-transform-core-aio-5.2.1.jar

- creiamo lo script di avvio


sudo nano /opt/alfresco/bin/alfrescots.sh

- e popoliamolo come segue


#!/bin/bash

#
# ver 25.0
#

#
# 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_PDFRENDERER=/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.12/modules-Q16/coders

# -DIMAGEMAGICK_CONFIG
TS_IMAGEMAGICK_CONVERT_CONFIG=/usr/lib/x86_64-linux-gnu/ImageMagick-6.9.12/config-Q16

# alfresco-transform-core-aio-5.2.1.jar
TS_JAR=/opt/alfresco/bin/alfresco-transform-core-aio-5.2.1.jar


#
# Function Start Transform Service
#
TsStart()
{
nohup java -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80 \
    -DPDFRENDERER_EXE="$TS_PDFRENDERER" \
    -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>> /opt/alfresco/alfrescots.log >>/opt/alfresco/tomcat/log/alfrescots.log \
     & echo $! > $PID_PATH_NAME

#      /tmp 2>> /dev/null >>/dev/null \

}

#
# 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 per lo script


sudo chmod +x /opt/alfresco/bin/alfrescots.sh
sudo chown tomcat:tomcat /opt/alfresco/bin/alfrescots.sh

- infine creiamo e carichiamo la unit per il servizio di trasformazione


sudo nano /usr/lib/systemd/system/alfrescots.service

- e popoliamolo con le seguenti stringhe


[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

Per testare il servizio di trasformazione
- avviare il servizio


sudo systemctl start alfrescots.service

- accediamo all'url http://alf.example.com:8090

- stoppiamo il servizio


sudo systemctl stop alfrescots.service

- riprovare ad accedere all'url http://alf.example.com:8090

 

Installazione di ACA (Alfresco Content App)

- Installiamo Node.js ed npm


cd ~/Temp
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs

- verifichiamo


node -v
npm -v

- cloniamo il git di ACA


cd ~/Temp
git clone https://github.com/Alfresco/alfresco-content-app.git
cd alfresco-content-app

- check dell'ultima versione

latest_tag=$(git ls-remote --tags --sort="v:refname" https://github.com/Alfresco/alfresco-content-app.git \
  | grep -o 'refs/tags/[0-9]*\.[0-9]*\.[0-9]*' \
  | tail -n 1 \
  | sed 's/refs\/tags\///')

# Checkout to the latest version tag
echo "Checking out to the latest version: $latest_tag"
git checkout tags/$latest_tag -b $latest_tag

- installiamo ACA


npm install
npm run build

 

Installazione di Nginx come reverse

- Installiamo Nginx


sudo apt install -y nginx

- creiamo le directory per 


sudo mkdir -p /opt/www/example.com/{conf,data,html,log,ssl,temp}

- configuriamo Nginx


sudo nano /etc/nginx/sites-available/example.com

- popoliamolo come segue


server {
    listen 80;
    server_name www.example.com alf.example.com;

    client_max_body_size 0;

    set  \$allowOriginSite *;
    proxy_pass_request_headers on;
    proxy_pass_header Set-Cookie;

    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_redirect off;
    proxy_buffering off;
    proxy_set_header Host            \$host:\$server_port;
    proxy_set_header X-Real-IP       \$remote_addr;
    proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
    proxy_pass_header Set-Cookie;    

    root /opt/www/example.com/html;
    index index.html;

    location / {
        try_files \$uri \$uri/ /index.html;
    }

    location /alfresco/ {
        proxy_pass http://localhost:8080;
    }

    location /share/ {
        proxy_pass http://localhost:8080;
    }    
}

- attiviamo la configurazione


sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

- controlliamo la corretteza della configurazione


sudo nginx -t

- creiamo una home-page provvisoria


sudo nano /opt/www/example.com/html/index.html

- inseriamo il seguente codice html


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="it_IT" xml:lang="it_IT">
<head>
   <title>Alfresco 25</title>
</head>

<body>
<p>
    <h1>Alfresco 25</h1>
</p>
<hr>
<p>
    <ul>
        <li><a href="http://www.example.com/alfresco">Alfresco 25</a></li>
    </ul>
</p>
<hr>
</body>
</html>

- correggiamo i permessi


sudo chown www-data:www-data /opt/www/kbsb.dsb/html/index.php

 

Script per avvio automatico

A questo punto creiamo lo script che farà avviare automaticamente tutto lo stack di applicazioni in modo corretto e lo imposteremo per l'avvio automatico all'accensione del server.

- Disattiviamo e stoppiamo le applicazioni dello stack


sudo systemctl stop nginx
sudo systemctl stop alfrescots
sudo systemctl stop solr
sudo systemctl stop tomcat
sudo systemctl stop mariadb
sudo systemctl stop activemq
sudo systemctl disable nginx
sudo systemctl disable alfrescots
sudo systemctl disable solr
sudo systemctl disable tomcat
sudo systemctl disable mariadb
sudo systemctl disable activemq

- creiamo lo script


sudo nano /etc/init.d/alfresco-stack

- e inseriamo le seguenti stringhe


#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          alfresco-stack
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: to start automatcly Alfresco
### END INIT INFO
#
#
# 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
    systemctl start nginx

    return 0
}

#
# Stop dello stack Alfresco
#
stStop()
{
    systemctl stop nginx
    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 Nginx
    #
    systemctl status nginx > /dev/null 2>&1;AS_STATUS=$?
    if [ "$AS_STATUS" != "3" ] && [ "$ST_ERR" = "0" ]; then
        ST_ERR=1
    fi

    #
    # 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

- impostiamo i permessi per lo script


chmod 754 /etc/init.d/alfresco-stack
chown root:root /etc/init.d/alfresco-stack

- aggiorniamo la configurazione di systemd


systemctl daemon-reload

- e testiamo l'avvio dello stack tramite SystemD
 

systemctl start alfresco-stack

- verifichiamo il funzionamento collegandoci all'URL http://alf.example.com/alfresco .
  Le credenziali defaul per autenticarsi sono:
  Username: admin
  Password: admin


Conclusione

A questo punto tutta l'installazione e la configura dello stack Alfresco per funzionare come singolo nodo è pronta.
Per impostarlo in avvio automatico al boot del server


systemctl enable alfresco-stack

Per disattivarlo come avvio automatico:


systemctl disable alfresco-stack

Per perfezionare l'installazione manca l'aggiunta del certificato TLS per avere connessioni https .
Per fare questo possiamo unasere certbot seguendo uno degli howto in rete come questi
- https://www.hostwinds.it/tutorials/nginx-reverse-proxy-with-ssl
- https://dev.to/yousufbasir/setting-up-nginx-with-certbot-for-https-on-your-web-application-n1i

A questo dobbiamo aggiungere un perfezionamento della configurazione di Alfresco:
- editiamo alfresco-global.properties


sudo nano /opt/alfresco/tomcat/shared/classes/alfresco-global.properties

- e aggiorniamo come segue


[...]
alfresco.context=alfresco
alfresco.host=localhost
alfresco.port=8080
alfresco.protocol=https
share.context=share
share.host=localhost
share.port=8080
share.protocol=https
opencmis.context.override=false
opencmis.context.value=
opencmis.servletpath.override=false
opencmis.servletpath.value=
opencmis.server.override=true
opencmis.server.value=localhost
[...]

- disattiviamo il CSRF decommentando il condition="CSRFPolic


vim /opt/alfresco/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml

- e aggiorniamo come segue


[...]
   <!-- Disable the CSRF Token Filter -->
   <!-- -->
   <config evaluator="string-compare" condition="CSRFPolicy" replace="true">
      <filter/>
   </config>
   <!-- -->
[...]

A questo punto dobbiamo far ripartire lo stack.

Per completezza possiamo pensare a creare un certificato autofirmato. Questo approccio è l'unico fattibile se la nostra installazione non ha un reale FQDN con la noia che dovremmo al nostro browser ogni volta che il sito va bene anche se il certificato non ha una firma valida.